<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Tech-Angels SAS is a french company based in Paris. We help and follow new entrepreneurs, providing technical + “business angel” help to start their projects.</description><title>Tech-Angels</title><generator>Tumblr (3.0; @tech-angels)</generator><link>http://www.tech-angels.com/</link><item><title>MaxMind support for Geocoder gem</title><description>&lt;p&gt;While using &lt;a href="https://github.com/alexreisner/geocoder" target="_blank"&gt;geocoder&lt;/a&gt; gem to fetch IP address info, we thought: default &lt;span&gt;&lt;a href="http://freegeoip.net/" target="_blank"&gt;FreeGeoIP&lt;/a&gt; service is great, &lt;/span&gt;&lt;span&gt;open source and &lt;/span&gt;&lt;span&gt;freely available, it has all the info we need, quite fast and &lt;/span&gt;&lt;span&gt;accurate.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;But what if we don&amp;#8217;t want to mess up with FreeGeoIP&amp;#8217;s limit or just need to use &lt;a href="http://www.maxmind.com/" target="_blank"&gt;MaxMind&lt;/a&gt;? Then we would be disappointed, because geocoder doesn&amp;#8217;t support MaxMind and there&amp;#8217;s been no way easily to include support in short period of time&amp;#8230; Until now! Thanks to our &lt;a href="https://github.com/gonzoyumo" target="_blank"&gt;angel Olivier&lt;/a&gt;, who has opened &lt;a href="https://github.com/alexreisner/geocoder/pull/227" target="_blank"&gt;pull request&lt;/a&gt; with MaxMind support:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/alexreisner/geocoder/pull/227" target="_blank"&gt;&lt;a href="https://github.com/alexreisner/geocoder/pull/227"&gt;https://github.com/alexreisner/geocoder/pull/227&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Moreover, this version has been used on production servers for 7 months. So, we are confident it&amp;#8217;s stable.&lt;/p&gt;
&lt;p&gt;Enjoy!&lt;/p&gt;</description><link>http://www.tech-angels.com/post/23158313900</link><guid>http://www.tech-angels.com/post/23158313900</guid><pubDate>Wed, 16 May 2012 11:39:00 +0200</pubDate><category>geocoder</category><category>geolocation</category><category>maxmind</category></item><item><title>Gemfile trick for github repositories</title><description>&lt;p&gt;&lt;p class="p1"&gt;Tired of writing long git paths to github &lt;span class="s1"&gt;repositories &lt;/span&gt;in Gemfile? Then you will find this useful. When the repository you need is public, you can use :github shortland instead of :git. And just specify github username and repository name separated by slash.&lt;/p&gt;
&lt;p class="p1"&gt;If repository name and username are the same, you can drop one:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    gem "rails", :github =&amp;gt; "rails/rails"&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;    gem "rails", :github =&amp;gt; "rails"&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p3"&gt;Are both equivalent to:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;    gem "rails", :git =&amp;gt; "git://github.com/rails/rails.git"&lt;/code&gt;&lt;/pre&gt;
&lt;p class="p5"&gt;I wonder, how didn&amp;#8217;t we enjoy this all the time? :) &lt;/p&gt;&lt;/p&gt;</description><link>http://www.tech-angels.com/post/22772521112</link><guid>http://www.tech-angels.com/post/22772521112</guid><pubDate>Thu, 10 May 2012 11:35:26 +0200</pubDate><category>gemfile</category><category>github</category></item><item><title>Presentation at UTC - May 18th</title><description>&lt;p&gt;&lt;img alt="UTC logo" height="125" src="http://www.utc.fr/fetedelascience/images/logos_partenaires/bas/logo_utc.png" width="353"/&gt;&lt;/p&gt;
&lt;p&gt;Tech-Angels will be presented Friday May 18th at UTC (Université de Technologie de Compiègne - France). Meet us from 13:00 to 14:00 in Benjamin Franklin Building (room unknown for now). We will be available in the afternoon to answer your questions.&lt;/p&gt;</description><link>http://www.tech-angels.com/post/21727600714</link><guid>http://www.tech-angels.com/post/21727600714</guid><pubDate>Tue, 24 Apr 2012 21:24:16 +0200</pubDate></item><item><title>Krakow is full of &lt;3</title><description>&lt;img src="http://24.media.tumblr.com/tumblr_m2ua9b5w471qa8mv9o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Krakow is full of &lt;3&lt;/p&gt;</description><link>http://www.tech-angels.com/post/21506624896</link><guid>http://www.tech-angels.com/post/21506624896</guid><pubDate>Sat, 21 Apr 2012 19:07:58 +0200</pubDate></item><item><title>Railsberry 2012 KRK</title><description>&lt;p&gt;We&amp;#8217;re attending &lt;a href="http://www.railsberry.com" title="Official website"&gt;railsberry&lt;/a&gt; in Krakow for 2 days, and will have soon some exciting official announcements. If you&amp;#8217;re there, you will probably find us, and we will be pleased to meet you.&lt;/p&gt;
&lt;p&gt;So far, it was a real bunch of great speeches and presentation, with a special thanks to @tenderlove. We were hopping for some rails announcements, but so far, nothing new under the sun. It was still the occasion to meet face-to-face with some really interesting and nice people.&lt;/p&gt;
&lt;p&gt;Stay tunned in the next days for news. &lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_m2s2k8S8JN1qa44ov.jpg"/&gt;&lt;/p&gt;</description><link>http://www.tech-angels.com/post/21432667493</link><guid>http://www.tech-angels.com/post/21432667493</guid><pubDate>Fri, 20 Apr 2012 14:33:00 +0200</pubDate></item><item><title>News, news, news!</title><description>&lt;p&gt;Hey everyone, it&amp;#8217;s been a while since we&amp;#8217;ve updated our blog, but we have a couple of reasons for that.&lt;/p&gt;
&lt;p&gt;We were working hard over the last months and found 4 angels, who joined our team! They&amp;#8217;re working all over the Europe and even have girl-angel among them ;) (photos coming soon)&lt;/p&gt;
&lt;p&gt;As for the main reason, we&amp;#8217;re excited to tell that we&amp;#8217;ve started our own projects development. And I tell you what, this is gonna be awesome.&lt;/p&gt;</description><link>http://www.tech-angels.com/post/19189276125</link><guid>http://www.tech-angels.com/post/19189276125</guid><pubDate>Mon, 12 Mar 2012 20:07:53 +0100</pubDate><category>corporate</category><category>submission</category></item><item><title>Tech-Angels is hiring a Debian SysAdmin</title><description>&lt;p&gt;We&amp;#8217;re looking for (passionate) SysAdmin to  join our existing team. You will be in charge of managing servers remotely with ssh and puppet.&lt;/p&gt;
&lt;!-- more --&gt;
&lt;p&gt;Skills needed&amp;#160;: Linux Debian, puppet, git, postgresql, mysql, redis&lt;br/&gt;You will work remotely only, as all other employees in Tech-Angels, and will report hours through oDesk.&lt;/p&gt;
&lt;p&gt;To improve communication between developers, we&amp;#8217;re only accepting people in the UTC +-3 hours range.&lt;/p&gt;
&lt;p&gt;Please apply &lt;a href="https://www.odesk.com/jobs/Ruby-Ruby-Rails-developers-wanted_~~b9c926c9df96d538" title="oDesk job posting"&gt;here&lt;/a&gt; (only!).&lt;/p&gt;</description><link>http://www.tech-angels.com/post/15290023451</link><guid>http://www.tech-angels.com/post/15290023451</guid><pubDate>Wed, 04 Jan 2012 11:05:36 +0100</pubDate></item><item><title>Tech-Angels is hiring Ruby On Rails developers</title><description>&lt;p&gt;We&amp;#8217;re looking for (passionate) Ruby / Ruby on Rails developers to join our existing team. We work mostly with recent Rails versions, haml, sass/scss, jQuery, Redis and PostgreSQL.&lt;!-- more --&gt;&lt;br/&gt;You will work remotely only, as all other employees in Tech-Angels, and will report hours through oDesk.&lt;/p&gt;
&lt;p&gt;To improve communication between developers, we&amp;#8217;re only accepting people in the UTC +-3 hours range.&lt;/p&gt;
&lt;p&gt;Please apply &lt;a href="https://www.odesk.com/jobs/Ruby-Ruby-Rails-developers-wanted_~~b9c926c9df96d538" title="oDesk job posting"&gt;here&lt;/a&gt; (only!).&lt;/p&gt;</description><link>http://www.tech-angels.com/post/15289973655</link><guid>http://www.tech-angels.com/post/15289973655</guid><pubDate>Wed, 04 Jan 2012 11:02:29 +0100</pubDate></item><item><title>TcpSyslog is now a gem</title><description>&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ln4s8kOwAg1qa44ov.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ve just released &lt;a href="https://github.com/tech-angels/tcp_syslog"&gt;TcpSyslog 1.0.0 gem&lt;/a&gt;. TcpSyslog is rails logger using syslog with TCP instead of UPD. This gem should be used in large apps, where a central syslog server is available using TCP, and no syslog server is present on the local node.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;(image credits&amp;#160;: &lt;a title="Image credits" href="http://www.flickr.com/photos/lamenta3/"&gt;lamenta3&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;</description><link>http://www.tech-angels.com/post/6750806433</link><guid>http://www.tech-angels.com/post/6750806433</guid><pubDate>Tue, 21 Jun 2011 10:17:45 +0200</pubDate></item><item><title>TcpSyslog logger for rails</title><description>&lt;p&gt;Weird enough, the default syslog librairy (ie: &lt;a title="Syslog for Ruby" href="http://ruby-doc.org/stdlib/libdoc/syslog/rdoc/index.html"&gt;Syslog&lt;/a&gt;) doesn&amp;#8217;t allow to sent logs to a distant server. Instead, localhost must be used, and the local syslog server will forward the message to a central server.&lt;/p&gt;
&lt;p&gt;Anyhow, in some cases, there&amp;#8217;s no local syslog server, or you might have to send your messages directly to that central position. In the cloud, that&amp;#8217;s a lot of syslog servers you won&amp;#8217;t have to monitor.&lt;/p&gt;
&lt;p&gt;Here it comes, you can find the TcpSyslog for rails &lt;a title="TcpSyslog" href="http://gist.github.com/598133"&gt;here&lt;/a&gt;. It was inspired from SyslogLogger and ActiveSupport::BufferedLogger. In fact, TcpSyslog will act exactly as a BufferedLogger, except messages are sent over TCP/IP (only for now) to syslog.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ll release a gem soon, stay tuned.&lt;/p&gt;</description><link>http://www.tech-angels.com/post/1192970364</link><guid>http://www.tech-angels.com/post/1192970364</guid><pubDate>Sun, 26 Sep 2010 20:36:09 +0200</pubDate></item><item><title>Improve IRB (and fix it on mac OS X)</title><description>&lt;p&gt;Irb, the interactive Ruby shell should be the Ruby developer&amp;#8217;s best friend.&lt;/p&gt;
&lt;p&gt;Anyway, with a few customization, we can still improve this tool. First, you will notice the backward search won&amp;#8217;t work out of the box on Mac OS X. This is an issue with readline.&lt;/p&gt;
&lt;p&gt;To fix this, add this to your ~/.editrc file&amp;#160;:&lt;/p&gt;
&lt;pre&gt;bind "^R" em-inc-search-prev
&lt;/pre&gt;
&lt;p&gt;Now you may use CTRL-R to Reverse-search your history.&lt;/p&gt;
&lt;p&gt;Also, you may want to give a try to &lt;a title="Wirble" href="http://pablotron.org/software/wirble/"&gt;Wirble&lt;/a&gt;, which is used to colorize your IRB output.&lt;/p&gt;
&lt;p&gt;At tech-angels, we also use &lt;a title="Hirb" href="http://tagaholic.me/2009/03/13/hirb-irb-on-the-good-stuff.html"&gt;Hirb&lt;/a&gt; to format the ActiveRecord outputs.&lt;/p&gt;
&lt;p&gt;Finally, this is a common .irbrc file&amp;#160;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
require 'rubygems'
require 'wirble'
require 'hirb'
Wirble.init
Wirble.colorize
# hirb (active record output format in table)
Hirb::View.enable

# IRB Options
IRB.conf[:AUTO_INDENT] = true
IRB.conf[:SAVE_HISTORY] = 1000
IRB.conf[:EVAL_HISTORY] = 200

# Log to STDOUT if in Rails
if ENV.include?('RAILS_ENV') &amp;amp;&amp;amp; !Object.const_defined?('RAILS_DEFAULT_LOGGER')
  require 'logger'
  RAILS_DEFAULT_LOGGER = Logger.new(STDOUT)
  #IRB.conf[:USE_READLINE] = true

  # Display the RAILS ENV in the prompt
  # ie : [Development]&amp;gt;&amp;gt; 
  IRB.conf[:PROMPT][:CUSTOM] = {
   :PROMPT_N =&amp;gt; "[#{ENV["RAILS_ENV"].capitalize}]&amp;gt;&amp;gt; ",
   :PROMPT_I =&amp;gt; "[#{ENV["RAILS_ENV"].capitalize}]&amp;gt;&amp;gt; ",
   :PROMPT_S =&amp;gt; nil,
   :PROMPT_C =&amp;gt; "?&amp;gt; ",
   :RETURN =&amp;gt; "=&amp;gt; %s\n"
   }
  # Set default prompt
  IRB.conf[:PROMPT_MODE] = :CUSTOM
end

# We can also define convenient methods (credits go to thoughtbot)
def me
  User.find_by_email("me@gmail.com")
end
&lt;/code&gt;&lt;/pre&gt;</description><link>http://www.tech-angels.com/post/963080350</link><guid>http://www.tech-angels.com/post/963080350</guid><pubDate>Mon, 16 Aug 2010 17:39:00 +0200</pubDate><category>ruby</category><category>irb</category><category>tips</category></item><item><title>Diff joy for your migrations with git</title><description>&lt;p&gt;Rails migrations are great. They allow to migrate and rollback, and maintain the DB in a consistent state. Thanks to Rails DSL (+ some plugins like &lt;a href="http://github.com/gonzoyumo/rails_on_pg/"&gt;rails_on_pg&lt;/a&gt;), they are even easy to read and write. Fine.&lt;/p&gt;
&lt;p&gt;Enters our beloved friend language SQL. Whilst views (or functions, or whatever) creation is made easy, updating existing code can become a real nightmare, especially with long and complex queries.&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s illustrate our problem&amp;#160;:&lt;/p&gt;
&lt;p&gt;In a rails app, I&amp;#8217;d like to create a view for confirmed users. Let&amp;#8217;s leave rails_on_pg plugin for now, but the problem would be exactly the same. (Note: examples bellow are based on rails 2.3, they would be a little different in rails 3, but the problem is still there).&lt;/p&gt;
&lt;pre&gt;script/generate migration create_confirmed_user_view&lt;/pre&gt;
&lt;p&gt;In the migration file, you would add your code as&amp;#160;:&lt;/p&gt;
&lt;script src="http://gist.github.com/509649.js"&gt;&lt;/script&gt;&lt;p&gt;Right, now your run your migration process&amp;#160;:&lt;/p&gt;
&lt;pre&gt;rake db:migrate&lt;/pre&gt;
&lt;p&gt;and everything goes fine.&lt;/p&gt;
&lt;p&gt;Later, you realize that the view was incorrect, you should have filtered also on the disabled boolean column. Now the migration will be something more&amp;#160;:&lt;/p&gt;
&lt;script src="http://gist.github.com/509658.js"&gt;&lt;/script&gt;&lt;p&gt;Here comes the problem. You have to copy / paste your previous definition in the migration, each time you want to update a view or a function.&lt;/p&gt;
&lt;p&gt;In this example, our view is 2 lines only. With a big fancy function of 20 lines, you won&amp;#8217;t be able to notice differences easily (or at all).&lt;/p&gt;
&lt;h2&gt;Enters Git&lt;/h2&gt;
&lt;p&gt;To solve our problem, we can create a &lt;em&gt;sql&lt;/em&gt; folder in our project tree, and put all functions and complex queries in there.&lt;/p&gt;
&lt;p&gt;Now we can write our first implementation of the &lt;em&gt;confirmed_users&lt;/em&gt; view&amp;#160;:&lt;/p&gt;
&lt;script src="http://gist.github.com/509663.js"&gt;&lt;/script&gt;&lt;p&gt;Add the file to git&amp;#160;:&lt;/p&gt;
&lt;pre&gt;git add sql/confirmed_users_view.sql&lt;/pre&gt;
&lt;p&gt;And commit it&amp;#160;:&lt;/p&gt;
&lt;pre&gt;git ci&lt;/pre&gt;
&lt;p&gt;The file has been &amp;#8220;saved&amp;#8221; in git, at least in its original version. We can easily use git to manage the history of the file. Do your changes, and commit the file again (you know, git add, git ci).&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s spice up our migration now. First, grab the last commit ids from git&amp;#160;:&lt;/p&gt;
&lt;pre&gt;git log --oneline -n 2&lt;br/&gt;&lt;/pre&gt;
&lt;pre&gt;2d308a6 Update view confirmed users
1596b6d Create view confirmed users&lt;/pre&gt;
&lt;p&gt;We can use these 2 ids in our migration&amp;#160;:&lt;/p&gt;
&lt;script src="http://gist.github.com/509674.js"&gt;&lt;/script&gt;&lt;p&gt;Migration files will be certainly harder to read, but you get a valuable tool with git diff&amp;#160;:&lt;/p&gt;
&lt;pre&gt;git diff -p 2d308a6&lt;br/&gt;&lt;/pre&gt;
&lt;pre&gt;[...]
CREATE OR REPLACE VIEW confirmed_user AS
-  SELECT * FROM users WHERE confirmed_at IS NOT NULL;
+  SELECT * FROM users WHERE confirmed_at IS NOT NULL
+  AND disabled IS FALSE;&lt;/pre&gt;
&lt;p&gt;Of course, this implies you have Git installed on your production servers, but why won&amp;#8217;t you&amp;#160;? Especially if you&amp;#8217;re using capistrano.&lt;/p&gt;</description><link>http://www.tech-angels.com/post/911788222</link><guid>http://www.tech-angels.com/post/911788222</guid><pubDate>Fri, 06 Aug 2010 10:00:00 +0200</pubDate><category>git</category><category>rails</category><category>sql</category><category>migrations</category></item><item><title>Make Ack look into haml files too</title><description>&lt;p&gt;If you&amp;#8217;re using &lt;a title="Ack, better than grep?" href="http://betterthangrep.com/"&gt;Ack grep&lt;/a&gt; command in a Rails project, you&amp;#8217;ll notice all haml views aren&amp;#8217;t taken into account. This is because the haml file pattern is not recognized by Ack.&lt;/p&gt;
&lt;p&gt;To fix this, simply create a ~/.ackrc file and add&amp;#160;:&lt;/p&gt;
&lt;pre&gt;--type-add=ruby=.haml,.rake,.rsel&lt;/pre&gt;</description><link>http://www.tech-angels.com/post/902760094</link><guid>http://www.tech-angels.com/post/902760094</guid><pubDate>Wed, 04 Aug 2010 14:33:12 +0200</pubDate><category>haml</category><category>ack</category><category>rails</category></item><item><title>Make cookies more secure in Ruby On Rails</title><description>&lt;p&gt;This subject is really not very often highlighted in rails security docs, even in the &lt;a title="Rails security Guide" href="http://guides.rails.info/security.html"&gt;official guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;re often happy with the basic cookie store options&amp;#160;:&lt;/p&gt;
&lt;script type="text/javascript" src="http://gist.github.com/484422.js"&gt;&lt;/script&gt;&lt;p&gt;Anyway, secure websites (like e-commerce sites) must include some more secure options. Cookies have two attributes people usually don&amp;#8217;t use&amp;#160;:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Secure&lt;/strong&gt;&amp;#160;: &amp;#8220;&lt;span&gt;&lt;em&gt;A server can specify thesecure flag while setting a cookie; the browser will then send it only over a secure channel, such as an &lt;a title="Secure Sockets Layer" href="/wiki/Secure_Sockets_Layer"&gt;SSL&lt;/a&gt; connection.&lt;/em&gt;&amp;#8221;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Expires&lt;/strong&gt;&amp;#160;: &amp;#8220;&lt;em&gt;Cookies expire, and are therefore not sent by the browser to the server, under any of these conditions: [&amp;#8230;] An expiration date has been specified, and has passed.&amp;#8221;&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;(&lt;em&gt;Definition taken from &lt;a title="Wikipedia cookie" href="http://en.wikipedia.org/wiki/HTTP_cookie"&gt;Wikipedia&lt;/a&gt;&lt;/em&gt;)&lt;/p&gt;
&lt;p&gt;The last means the session AND the cookie will expire after the given date. It&amp;#8217;s generally a good idea to set this option, unless you&amp;#8217;re running facebook.com, people won&amp;#8217;t spend more than 1 hour on you site per day.&lt;/p&gt;
&lt;p&gt;To enable these 2 options, you can use the configuration in config/environment.rb&amp;#160;:&lt;/p&gt;
&lt;script type="text/javascript" src="http://gist.github.com/484423.js"&gt;&lt;/script&gt;&lt;p&gt;You should set the secure option per environment, otherwise your dev environment will fail. To do so, you can add a line in each secure environment&amp;#160;:&lt;/p&gt;
&lt;script type="text/javascript" src="http://gist.github.com/484440.js"&gt;&lt;/script&gt;</description><link>http://www.tech-angels.com/post/840662150</link><guid>http://www.tech-angels.com/post/840662150</guid><pubDate>Wed, 21 Jul 2010 15:01:00 +0200</pubDate><category>ruby on rails</category><category>cookies</category><category>secure</category><category>security</category><category>expires</category><category>session</category></item><item><title>Rails Freak: Be pragmatic with your time</title><description>&lt;a href="http://railsfreak.com/post/436865973/be-pragmatic-with-your-time"&gt;Rails Freak: Be pragmatic with your time&lt;/a&gt;: &lt;blockquote&gt;
&lt;p&gt;So you’re trying to write that awesome new feature you’ve been chomping at the bit for, right? Your gonna get it done and it’s gonna have so many bells and whistles! Let’s say you give yourself two weeks to get it done, but at the end of one week you realize you just can’t finish it in one more…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://www.tech-angels.com/post/437045266</link><guid>http://www.tech-angels.com/post/437045266</guid><pubDate>Tue, 09 Mar 2010 17:30:08 +0100</pubDate><category>rails</category><category>bdd</category><category>tdd</category><category>best-practices</category><category>tips</category></item><item><title>Nous sommes heureux et fiers d’accueillir dans nos rangs...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_kylj1okDnF1qa8mv9o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Nous sommes heureux et fiers d’accueillir dans nos rangs Olivier Gonzalez. Olivier a une formation d’ingénieur en génie informatique à l’UTC (Université de Compiègne), et une curiosité et une ténacité qui lui permettent de travailler sur tous nos projets. Il a notamment passé ces derniers mois à travailler sur le site &lt;a href="http://woopets.com"&gt;http://woopets.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Au passage, nous sommes toujours à la recherche d’un designer / intégrateur web pour renforcer notre équipe.&lt;/p&gt;</description><link>http://www.tech-angels.com/post/419576633</link><guid>http://www.tech-angels.com/post/419576633</guid><pubDate>Mon, 01 Mar 2010 10:15:24 +0100</pubDate></item><item><title>[FR] Tech-Angels recherche un designer web</title><description>&lt;p&gt;Tech-Angels recherche un(e) designer web avec ou sans expérience, mais avec beaucoup de curiosité et d&amp;#8217;autonomie. Vous êtes un expert en (x)html, css, javascript (en particulier jQuery), et souhaitez collaborer sur des prototypes de projets innovants&amp;#160;? Rejoignez notre équipe d&amp;#8217;ingénieurs.&lt;/p&gt;
&lt;p&gt;Le poste est à pourvoir dès aujourd&amp;#8217;hui sur Chantilly, au nord de Paris, avec possibilité de travail à distance. Rémunération fonction de votre expérience.&lt;/p&gt;
&lt;p&gt;Envoyez votre canditature à philippe|@|tech-angels.biz&lt;/p&gt;
&lt;script type="text/javascript"&gt;&lt;![CDATA[// &lt;![CDATA[
// &lt;![CDATA[
eval(decodeURIComponent('%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%70%68%69%6c%69%70%70%65%40%74%65%63%68%2d%61%6e%67%65%6c%73%2e%62%69%7a%22%3e%70%68%69%6c%69%70%70%65%40%74%65%63%68%2d%61%6e%67%65%6c%73%2e%62%69%7a%3c%2f%61%3e%27%29%3b'))
// ]]&lt;![CDATA[&gt;
// ]]]]&gt;&lt;![CDATA[&gt;]]&gt;&lt;/script&gt;</description><link>http://www.tech-angels.com/post/354502662</link><guid>http://www.tech-angels.com/post/354502662</guid><pubDate>Tue, 26 Jan 2010 16:58:00 +0100</pubDate><category>recrutement</category><category>designer</category></item><item><title>"iPilule, chronique d’une application iPhone"</title><description>&lt;a href="http://www.applicationiphone.com/2009/12/ipilule-chronique-application-iphone-developpement-promotion-ventes-appstore/"&gt;"iPilule, chronique d’une application iPhone"&lt;/a&gt;: &lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;a title="iPilule, chronique d’une application iPhone. Du développement aux ventes dans l’AppStore, on vous dit tout"&gt;“Du développement aux ventes dans l’AppStore, on vous dit tout”&lt;/a&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;&lt;b&gt;Un retour d’expérience complet et argumenté, à lire absolument.&lt;br/&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;b&gt;&lt;br/&gt;&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;</description><link>http://www.tech-angels.com/post/289046981</link><guid>http://www.tech-angels.com/post/289046981</guid><pubDate>Fri, 18 Dec 2009 17:13:56 +0100</pubDate></item><item><title>Don't complicate your billing</title><description>&lt;p&gt;&lt;a href="http://cooking.fourbeansoup.com/post/265425704/dont-complicate-your-billing" class="tumblr_blog"&gt;4beansoup&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Recently we have been working on adding billing support to &lt;a href="http://tweethopper.com/"&gt;tweet hopper&lt;/a&gt;, and we had all types of debates on how to handle each little nuisance.  After much discussion and research, I have found the right answer: don’t make it complicated!&lt;/p&gt;

&lt;p&gt;There is a saying, “&lt;a href="http://ni.hili.st/post/54775834/no-code-is-faster-than-no-code"&gt;no code is faster than no code&lt;/a&gt;”.  Very smart coding proverb, which can be easily restated as “no functionality is less buggy than no functionality”.  What I am trying to say is, adding complex billing functions just adds unneeded complexity to an already tough problem.&lt;/p&gt;

&lt;h3&gt;Once a month or 30 days?&lt;/h3&gt;

&lt;p&gt;This decision doesn’t have deep ramifications, but it is an important question to decide on.  Do you bill every 30 days or the same day every month?  Services like &lt;a href="http://github.com"&gt;github&lt;/a&gt; charge on the same day every month, or be more like &lt;a href="http://37signals"&gt;37signals&lt;/a&gt; and charge every 30 days.  The biggest difference is that going every 30 days means you get an extra payment every 10 years…  Yes, 10 years, &lt;em&gt;shrug&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;There is also one other issue to consider if you charge on the same day every month, heard of February?  What if someone signs up on the 31st?  You have to start accounting for month end dates and make sure you get a monthly charge in on shorter and longer months, leading to more code complexity.&lt;/p&gt;

&lt;h3&gt;To prorate or not to prorate&lt;/h3&gt;

&lt;p&gt;Wait?  Someone wants to upgrade in the middle of the month!  There are two different schools of thoughts; prorate or just bill the higher amount on the next billing date.  &lt;a href="http://www.linode.com/?r=0811f02dfe3107d2fef72920ff9af30fd720bf73" title="Awesome vps hosting"&gt;Linode&lt;/a&gt;, our hosting provider, charges on the 1st of every month and then charges prorated amounts if you need to upgrade or add services.  On the other hand, github and 37signals both wait and charge you the upgraded amount on your next billing date, but you get immediate access to upgraded plans.&lt;/p&gt;

&lt;p&gt;The prorating method has another down side that can lead to extra code complexity if you aren’t careful.  What happens if you charge a customer $30 a month and they signup on November 29th?  If you prorate and charge them, you will charge them $1, which will be almost nothing after credit card processing fees - depending on who you use to process transactions.  Linode handles this by charging prorated amounts plus the next month if it is after the 20th, but that adds to complexity.&lt;/p&gt;

&lt;p&gt;For tweet hopper, we decided to avoid complication and skip prorating and just go with the higher billing amount on the next billing date.  Why write code that has to do complicated math?  The side benefit of it all?  Credit card billing can be completely separated from the app and run via cron scripts, there is no need to do on the spot prorate charging.&lt;/p&gt;

&lt;h3&gt;Refunds? We don’t need no stinkin’ refunds!&lt;/h3&gt;

&lt;p&gt;This one is pretty straight forward for me, don’t offer refunds.  Don’t write any code in your app to push refunds - your gateway should have the tools you need for the few instances that you need it.  It is the customer’s responsibility to cancel their account, and if they don’t it in time it isn’t your fault.&lt;/p&gt;

&lt;p&gt;This is a clear cut “no code” win!&lt;/p&gt;

&lt;h3&gt;Freemium vs Trials&lt;/h3&gt;

&lt;p&gt;Free and paid plans versus 30 day trials with paid plans, it is less of a clear cut choice.  The choice really depends on your product and the resources each plan uses.&lt;/p&gt;

&lt;p&gt;With tweet hopper we have a lot of expense that goes into even just one twitter account. Due to that expense we decided to offer a free 30 day trial instead of a completely free account.  We collect the credit card up front, mark the 30 day billing date, and charge your card once that date hits unless you cancel.  By offering only paid plans, the plan changing and card collecting is pretty straight forward.&lt;/p&gt;

&lt;p&gt;37signals offers both options in their products, either free plans or paid plans, taking credit cards up front.  When you upgrade from a free plan to a paid plan, they have a bit of extra logic they need to handle to setup billing dates and get the charging going.&lt;/p&gt;

&lt;h3&gt;Keep it simple…&lt;/h3&gt;

&lt;p&gt;In the end, do whatever feels right when you are collecting payments.  Keep it secure and keep it simple.  The most important thing to understand is that no code is less complex than no code!&lt;/p&gt;&lt;/blockquote&gt;</description><link>http://www.tech-angels.com/post/267499098</link><guid>http://www.tech-angels.com/post/267499098</guid><pubDate>Thu, 03 Dec 2009 10:21:30 +0100</pubDate></item><item><title>Axon Flux : "Building and Scaling a Startup on Rails: 12 Things We Learned the Hard Way"</title><description>&lt;a href="http://axonflux.com/building-and-scaling-a-startup"&gt;Axon Flux : "Building and Scaling a Startup on Rails: 12 Things We Learned the Hard Way"&lt;/a&gt;</description><link>http://www.tech-angels.com/post/266677007</link><guid>http://www.tech-angels.com/post/266677007</guid><pubDate>Wed, 02 Dec 2009 22:22:58 +0100</pubDate><category>rails</category><category>tips</category></item></channel></rss>

