<?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>The Gilt Groupe technology organization. We make gilt.com work.

  var _gaq = _gaq || [];
  _gaq.push([‘_setAccount’, ‘UA-3311903-7’]);
  _gaq.push([‘_trackPageview’]);

  (function() {
    var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true;
    ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js’;
    var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
  })();</description><title>Gilt Technologie</title><generator>Tumblr (3.0; @gilt-tech)</generator><link>http://tech.gilt.com/</link><item><title>

C Level Engineering Symmetry

</title><description>&lt;img src="http://24.media.tumblr.com/71e59a1f9ca874842614340f27d086e5/tumblr_mmw4wiuOLC1qgexq2o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;div class="post_content clearfix" id="post_content_50572489233"&gt;
&lt;div class="caption"&gt;
&lt;p&gt;C Level Engineering Symmetry&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description><link>http://tech.gilt.com/post/50572518804</link><guid>http://tech.gilt.com/post/50572518804</guid><pubDate>Thu, 16 May 2013 08:19:30 -0400</pubDate><dc:creator>giltquinn</dc:creator></item><item><title>Monitoring network traffic and service chatter with Boundary</title><description>&lt;p&gt;We recently published a &lt;a href="http://boundary.com/blog/2013/05/09/gilt-groupe-keeps-fashion-hot-with-boundary/" target="_blank"&gt;case study&lt;/a&gt; with &lt;a href="http://boundary.com" target="_blank"&gt;Boundary&lt;/a&gt; regarding how we, at &lt;a href="http://www.gilt.com/" target="_blank"&gt;Gilt Groupe&lt;/a&gt;, are using their product and I wanted to give some additional details concerning our decision process, what we were looking for, what we looked at and why we decided that going to Boundary was the best choice for us moving forward.&lt;/p&gt;
&lt;p&gt;Gilt Groupe’s architecture is now very much a case of micro-service architecture. We have hundreds of JVM-based HTTP services interacting with each others or with backend systems such as PostgreSQL, MongoDB, RabbitMQ, Kafka, Zookeeper, and many more third-party solutions over various data interchange formats and protocols.&lt;/p&gt;
&lt;p&gt;A few months ago, we felt we needed to get more insight into the detailed amount of traffic that was going in and out of every service or backend system. When various teams are working on new features that require more communication patterns and data exchange, it starts to be difficult to do capacity planning when you don’t know where you are.&lt;/p&gt;
&lt;p&gt;Moreover, in our experience, we have seen that most features generally go from a normal usage pattern for months to a sudden very large adoption by our business operations. The amount of data can suddenly grow 1 to 2 orders of magnitude, which does not generally go without its own set of challenges.&lt;/p&gt;
&lt;p&gt;To get better insight into the amount of data exchanged, we started the effort to monitor the data transferred out of our HTTP services (we use Jetty) using the excellent &lt;a href="http://metrics.codahale.com/" target="_blank"&gt;Metrics&lt;/a&gt; library from Coda Hale. This can be trivially done extending the existing Metrics &lt;a href="http://metrics.codahale.com/maven/apidocs/com/yammer/metrics/jetty/InstrumentedHandler.html" target="_blank"&gt;InstrumentedHandler&lt;/a&gt; for Jetty:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
public class CustomInstrumentedHandler extends InstrumentedHandler { 

  private final Meter bytesTransferred = Metrics.newMeter(handler.getClass(), "bytes-transferred", "responses", TimeUnit.SECONDS);
  
  private final Histogram bytesResponse = Metrics.newHistogram(handler.getClass(), "bytes-responses"); 
  
  // constructor omitted for blog readability
  @Override
  public void handle(String target, Request request, HttpServletRequest httpRequest, HttpServletResponse httpResponse) throws IOException, ServletException {
    final AsyncContinuation continuation = request.getAsyncContinuation();
    try {
      super.handle(target, request, httpRequest, httpResponse);
    } finally {
      if (continuation.isInitial()) {
        long count = request.getResponse().getContentCount();
        bytesResponse.update(count);
        bytesTransferred.mark(count);
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The clients effort would be a bit more challenging however. In our JVM-based services we end using a menagerie of HTTP clients: &lt;a href="https://github.com/AsyncHttpClient/async-http-client" target="_blank"&gt;AsyncHTTPClient&lt;/a&gt; with Netty 3.x provider, &lt;a href="http://hc.apache.org/" target="_blank"&gt;Apache HttpComponents&lt;/a&gt; 4.x, &lt;a href="http://hc.apache.org/httpclient-3.x/" target="_blank"&gt;Apache Commons HTTPClient&lt;/a&gt; 3.x, and the venerable JDK &lt;a href="http://docs.oracle.com/javase/6/docs/api/java/net/HttpURLConnection.html%20" target="_blank"&gt;HttpURLConnection&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This is the reality of having to deal with various third-party integration, it makes things more complicated than we would like to, but it can be a bit annoying to rewrite or extend some existing SDKs to try to use one and only one HTTP client across the platform (especially when non-extensible, or worse, closed-source).&lt;/p&gt;
&lt;p&gt;The immediate problem faced is effectively how to instrument *all* those clients.&lt;/p&gt;
&lt;p&gt;AsyncHTTPClient can be done easily using a RequestFilter and an AsyncHandler. The code would be something similar to the snippet below. There is not much overhead of doing it as you just need to count chunk size as they the HttpResponseBodyPart objects are received.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; public class InstrumentedAsyncHttpClientRequestFilter implements RequestFilter { 
  private final Meter bytesTransferred;
  private final Histogram bytesResponses;
&lt;br/&gt;  // ... initialization omitted for readability&lt;br/&gt;
  public FilterContext filter(FilterContext ctx) throws FilterException { 
    return new FilterContext.FilterContextBuilder(ctx) .asyncHandler(new MetricsAsyncHandler(ctx.getRequest(), ctx.getAsyncHandler())) .build(); 
  } 

 public class MetricsAsyncHandler implements AsyncHandler {
  private AsyncHandler delegate;
  private long totalBytesTransferred = 0;
&lt;br/&gt;  // ... initialization omitted for readability&lt;br/&gt;
  public STATE onBodyPartReceived(HttpResponseBodyPart bodyPart) throws Exception {
    long bytes = bodyPart.getBodyPartBytes().length;
    totalBytesTransferred += bytes;
    metrics.bytesTransferred.mark(bytes);
    return delegate.onBodyPartReceived(bodyPart);
  }

  public T onCompleted() throws Exception {
    T o = delegate.onCompleted();
    metrics.bytesResponses.update(totalBytesTransferred);
    return o;
  }
 }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Note that we tend to give a name to each service client which would map to a Metrics scope, which makes it useful to distinguish metrics between each client (some services use a dozen of clients).&lt;/p&gt;
&lt;p&gt;For all the others clients, it is a bit more intrusive to be practical. And it doesn’t address how to monitor the traffic in/out going directly through the Socket api like for Zookeeper, Play Framework (Netty server), MongoDB and JDBC drivers, etc&amp;#8230;&lt;/p&gt;
&lt;p&gt;Another solution would be to write a JVM Java Agent via the &lt;a href="http://docs.oracle.com/javase/6/docs/api/java/lang/instrument/package-summary.html" target="_blank"&gt;java.lang.Instrument&lt;/a&gt; API to instrument some well known libraries (NewRelic uses a similar technique, but doesn’t track traffic). While it may looked like the less intrusive solution, it is also a fairly significant undertaking to develop instrumentations for several third-party libraries which you have to maintain over time.&lt;/p&gt;
&lt;p&gt;Also, knowing we were looking with an interested eye to add systems such as Riak, Redis and possibly some various asynchronous drivers and having to deal with multiple versions of Scala&amp;#8230; this was a cool project to work on technically, but maybe not excessively practical.&lt;/p&gt;
&lt;p&gt;What we needed was something similar to &lt;a href="https://github.com/deployfu/nethogs" target="_blank"&gt;nethogs&lt;/a&gt; minus the text interface. A tool capable of grouping the bandwidth by process, but ideally it would have some features also found in &lt;a href="http://www.wireshark.org/" target="_blank"&gt;Wireshark&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We did not find anything matching those requirements.&lt;/p&gt;
&lt;p&gt;Until a week or two later. We had &lt;a href="https://github.com/cliffmoon" target="_blank"&gt;Cliff Moon&lt;/a&gt;, Co-Founder and CTO of &lt;a href="http://boundary.com/" target="_blank"&gt;Boundary&lt;/a&gt;, visiting our New-York office to present Boundary and do a Tech Talk on Distributed Systems (which we &lt;a href="http://tech.gilt.com/post/37351648557/thanks-to-cliff-moon-moonpolysoft-for-stopping-by" target="_blank"&gt;blogged about&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;We installed Boundary on some our servers to get a better idea. This was truly a revelation. The installation was painless with just a single command and as soon as the agent was up, it started to report data to the dashboard within the next second.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/a7a243af28da4390d5771c199ecc93ff/tumblr_inline_mmspm3uKix1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;Each of the line represent the traffic volume happening on a given port/protocol across all nodes at a 1 second resolution. Traffic can easily be broken down. For example you have the ability to group servers, either manually or dynamically using pattern matching which makes it easy to segment your front-end from your backend machines and see traffic flowing between those groups (this is where a descriptive naming policy for your machines comes handy).&lt;/p&gt;
&lt;p&gt;You can further segment your traffic by port / protocol. For example TCP 5432 would be the traffic to/from PostgreSQL. You can then easily analyze the traffic that is going from your backend machines (or a subset of those) to your PostgreSQL. Same thing could be done to know the chatter around our messaging infrastructure on RabbitMQ.&lt;/p&gt;
&lt;p&gt;A lot more details on how all of this can be done is visible on a Youtube video &amp;#8216;&lt;a href="https://www.youtube.com/watch?v=5RSlJ-KrVjw&amp;amp;list=UUCfsqk2CNoHOeUbLPkHl-JQ" target="_blank"&gt;Isolate your traffic with filters and conversations&lt;/a&gt;&amp;#8217;.&lt;/p&gt;
&lt;p&gt;There is a shortcoming currently for us where we are effectively losing a bit of visibility in our conversations. For instance, traffic to our services is always going through a set of dedicated service load balancers. For example we reach to it via a canonical url such as http://svc-product and the load balancer will balance between node1:7501, node2:7501, node3:7501. It means traffic from the caller to/from the load balancer happens on port 80 while the traffic to/from the load balancer to the callee is on port 7501.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;caller ← port 80 → svc-lb ← port 7501 → callee 
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Which means that the traffic flowing on port 80 is basically the aggregate of all service traffic and that we cannot see the traffic directly from caller to callee, but only the aggregate from caller to svc-lb and from svc-lb to callee.&lt;/p&gt;
&lt;p&gt;This is something that may be alleviated a bit in the future as we are thinking about removing the load balancer and having applications doing the load balancing themselves using information from Zookeeper.&lt;/p&gt;
&lt;p&gt;Boundary settings on the dashboard can be driven entirely from their &lt;a href="https://app.boundary.com/docs" target="_blank"&gt;REST API&lt;/a&gt;, which provides the added convenience of being able to integrate with your own configuration management system such as Puppet or Chef and a set of backend applications which may contain metadata about your environment.&lt;/p&gt;
&lt;p&gt;The REST API is useful to define application aliases which gives names to a protocol:port (eg: ‘svc-product’ for TCP 7501), send deployment events or integrate with other systems (it can subscribe to NewRelic events via RSS).&lt;/p&gt;
&lt;p&gt;We have only scratched the surface of Boundary so far and we are very excited about the direction it is taking and what is being developed. It has already proved extremely useful in identifying traffic volume and patterns occurring between services and databases. Something that would have required a lot more tedious investigative work can basically be done now in a few minutes and with much more flexibility than we could initially imagine and with no direct investment.&lt;/p&gt;
&lt;p&gt;I hope that this (long) blog post will be helpful to some people who are facing the same challenges of not having enough visibility in their network traffic. If however you know of any interesting tool in that space, feel free to drop a note.&lt;/p&gt;
&lt;p&gt;On a slightly unrelated note, we are also users of a nice library from Boundary called &lt;a href="https://github.com/boundary/ordasity" target="_blank"&gt;Ordasity&lt;/a&gt;. It is a great way to distribute workload across nodes via Zookeeper. It was brought to our attention during &lt;a href="https://twitter.com/cscotta" target="_blank"&gt;Scott Andreas&lt;/a&gt;’s tech talk at Gilt Groupe (another one&amp;#160;!), and it might be the topic of another blog post.&lt;/p&gt;
&lt;p&gt;&amp;#8212; stephane&lt;/p&gt;</description><link>http://tech.gilt.com/post/50426747760</link><guid>http://tech.gilt.com/post/50426747760</guid><pubDate>Tue, 14 May 2013 12:32:18 -0400</pubDate><category>jvm</category><category>monitoring</category><category>network</category><category>metrics</category><category>boundary</category><category>gilt</category><dc:creator>sbailliez-gilt</dc:creator></item><item><title>Mobile Web How To: Development Environment Toolkit</title><description>&lt;p&gt;While working on Gilt Mobile Web, these are our development tools of choice to get the job done:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Browsers &amp;amp; Emulators&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Android emulator: &lt;a href="http://developer.android.com/sdk/index.html" target="_blank"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;XCode iOS Simulator: &lt;a href="https://developer.apple.com/devcenter/ios/index.action" target="_blank"&gt;https://developer.apple.com/devcenter/ios/index.action&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Chrome Canary + mobile settings: &lt;a href="https://www.google.com/intl/en/chrome/browser/canary.html" target="_blank"&gt;https://www.google.com/intl/en/chrome/browser/canary.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Page Speeds&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;HTTP proxy/monitor and bandwidth throttler: &lt;a href="http://www.charlesproxy.com/" target="_blank"&gt;http://www.charlesproxy.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PageSpeed Insights: &lt;a href="https://developers.google.com/speed/docs/insights/using_chrome" target="_blank"&gt;https://developers.google.com/speed/docs/insights/using_chrome&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Device Testing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;User agent strings: &lt;a href="http://youruseragent.info/commonua.en.htm" target="_blank"&gt;http://youruseragent.info/commonua.en.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Feature compatibility checks: &lt;a href="http://caniuse.com/" target="_blank"&gt;http://caniuse.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Android debug bridge for inspecting your Android device: &lt;a href="http://developer.android.com/tools/help/adb.html" target="_blank"&gt;http://developer.android.com/tools/help/adb.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Adobe inspect for inspecting Android Browser: &lt;a href="http://html.adobe.com/edge/inspect/" target="_blank"&gt;http://html.adobe.com/edge/inspect/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;iOS 4.2.1 to 6.1 iPods and iPhones&lt;/p&gt;
&lt;p&gt;Android 2.1 to 4.2 phones and tablets&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Usability Testing&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Reflector: &lt;a href="http://www.reflectorapp.com/" target="_blank"&gt;http://www.reflectorapp.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;So, what tools do you use?&lt;/strong&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/49954377599</link><guid>http://tech.gilt.com/post/49954377599</guid><pubDate>Wed, 08 May 2013 16:26:00 -0400</pubDate><category>gilttech</category><category>mobile</category><dc:creator>gregorymazurek</dc:creator></item><item><title>Mobile Web How To: Proxy Local Environment To Devices</title><description>&lt;p&gt;When you develop a front end experience for the full screen, the feedback loop between code and test is relatively fast. You code. You refresh your browser. Repeat. When you develop a front end experience for mobile devices, this can become a little cumbersome because the feedback loop can sometimes feel much slower. There are emulators for your machine and browser sizing/user-agent strategies that you can employ to make your development process more efficient. But in the end, you&amp;#8217;re going to want to test on your devices.&lt;/p&gt;
&lt;p&gt;In this post, I&amp;#8217;ll explain how you can proxy your local development (localhost) to both your Android and iOS devices. When you do this, you&amp;#8217;ll be able to code, refresh, repeat a lot faster and more efficiently.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Charles Proxy&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To get started, you need a strategy to manage your HTTP proxy. I use and recommend using Charles Proxy (&lt;a href="http://www.charlesproxy.com/" target="_blank"&gt;http://www.charlesproxy.com/&lt;/a&gt;) but there are certainly other alternatives. Charles Proxy is very powerful but I won&amp;#8217;t be going into much detail about it here. Instead, we want to set up a port that we can HTTP proxy to.&lt;/p&gt;
&lt;p&gt;If you click on PROXY, then PROXY SETTINGS, you&amp;#8217;ll see a menu where you can enter in a port that you would like to proxy to. I&amp;#8217;ve chosen 8888.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/f14ba4e1da5ef53b2e7b1892c4866bad/tumblr_inline_mmg6oyxbAu1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;Charles Proxy is going to look for incoming connections on this port. When you connect iOS or Android to this port, you will see that Charles Proxy will ask you to allow or deny this connection attempt:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/d11e4560a6fc9c4310532610183684ff/tumblr_inline_mmg6qt8tD01qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;Now, let&amp;#8217;s connect our devices.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;iOS&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;In iOS, navigate to your WiFi menu and then tap into your connected WiFi. At the bottom of this screen, tap on MANUAL under HTTP Proxy. Where you see computer_ip_address_here, enter your computer&amp;#8217;s ip address and where you see 8888, enter the port that you set up on Charles Proxy.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/a6bf4a34721657bb998671b661675709/tumblr_inline_mmg6t2fEiX1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;That&amp;#8217;s about it. On your device, open localhost:1234 or whatever in a browser and then Charles Proxy will ask you to allow or deny. You can now start coding on your machine and refreshing on your iOS device. You&amp;#8217;re done.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Android&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;On Android, tap SETTINGS and then Wi-Fi. Next, tap and hold on the WiFi network that you are currently connected to. On the following menu, tap on MODIFY NETWORK CONFIG.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/0d5b31fc2f2e18adfee99654ef567501/tumblr_inline_mmg76bKA8Z1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;You next see a menu to manage your network config. Scroll to the bottom of this modal and tap on SHOW ADVANCED OPTIONS.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/916800fbdfb2c180b8341c9b8a435e8d/tumblr_inline_mmg77lvWnt1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;In the menu options that appear, you will see configuration settings similar to those found in iOS. Where you see computer_ip_address_here, enter your computer&amp;#8217;s ip address. Where you see 8888, select the port you set up with Charles Proxy.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/38c9d740003a5f162c946657f6d1e525/tumblr_inline_mmg79j8KqQ1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;And, that&amp;#8217;s about it. On your device, open localhost:1234 or whatever in a browser and then Charles Proxy will ask you to allow or deny. You can now start coding on your machine and refreshing on your iOS device. You&amp;#8217;re done.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/49882407629</link><guid>http://tech.gilt.com/post/49882407629</guid><pubDate>Tue, 07 May 2013 17:54:30 -0400</pubDate><category>gilttech</category><category>mobile</category><category>ios</category><category>android</category><dc:creator>gregmazurek</dc:creator></item><item><title>Today in Pictures</title><description>&lt;img src="http://25.media.tumblr.com/b5dbe588dcb5911334015de8b813d5f1/tumblr_mmg5p1hDu61qgexq2o1_r1_500.png"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/2b661b56968c5037648db62bda21e8ff/tumblr_mmg5p1hDu61qgexq2o2_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;img src="http://24.media.tumblr.com/7688ffdf7fb3ccb6c55bd94fb1756efa/tumblr_mmg5p1hDu61qgexq2o3_500.jpg"/&gt;&lt;br/&gt; &lt;br/&gt;&lt;p&gt;Today in Pictures&lt;/p&gt;</description><link>http://tech.gilt.com/post/49879363105</link><guid>http://tech.gilt.com/post/49879363105</guid><pubDate>Tue, 07 May 2013 17:15:00 -0400</pubDate><dc:creator>giltquinn</dc:creator></item><item><title>Mobile Web How-To: Detect Samsung S4 Device On Your Mac</title><description>&lt;p&gt;This hasn&amp;#8217;t been very well documented on the internet just yet so I thought I&amp;#8217;d share how you need to connect your Samsung S4 device to a Mac. When you connect this device to your Mac, it (most likely at the time of this writing) will not be recognized.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/181ffa62ffadcf95569ce1557c2471f0/tumblr_inline_mmdxa08cCQ1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;To have your Mac detect your Samsung S4, you have to do some magic on your device. Click on into SETTINGS and then click on ABOUT DEVICE. If you scroll to the bottom, you will see a line entitled BUILD NUMBER.&lt;/p&gt;
&lt;p&gt;Tap on the build number 7 times. I&amp;#8217;m not kidding.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/02609a8044f2cf7848e3d27be931f1c4/tumblr_inline_mmdxmslipY1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/a27facf5becec4828ce2b678cc9cbe6a/tumblr_inline_mmdxn96RIR1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;When you are now &amp;#8220;a developer,&amp;#8221; you&amp;#8217;ll see a new menu option in SETTINGS -&amp;gt; MORE entitled DEVELOPER OPTIONS. In this option, you need to check USB DEBUGGING.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/29203580db74edc77379b38c2daf78ca/tumblr_inline_mmdxq7ygZG1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;Then when you next connect your device to your computer, you&amp;#8217;ll see your device:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/38fbee74fba0936b071d5a077e3048cb/tumblr_inline_mmdxraGJUm1qz4rgp.png"/&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/49782127628</link><guid>http://tech.gilt.com/post/49782127628</guid><pubDate>Mon, 06 May 2013 12:48:01 -0400</pubDate><category>mobile</category><category>android</category><category>gilttech</category><dc:creator>gregorymazurek</dc:creator></item><item><title>Mobile Web How-To: Inspect Elements On Android's Internet Browser</title><description>&lt;p&gt;I&amp;#8217;m building Gilt&amp;#8217;s new Android app and a good portion of the website is an Android WebView. As you may or may not know, this WebView uses the default Android Internet Browser to render webpages. You probably know this app best by its logo in the lower right hand corner of this screenshot:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/d0cc9227c0849764b6b8351a71ed0d36/tumblr_inline_mm8jrq83x71qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;When you use Google Chrome on the Android device, inspection is very straightforward &amp;#8212; I&amp;#8217;ll cover this in a later post. But for Android Internet Browser, there is not to my knowledge a good way to inspect and manipulate the DOM.&lt;/p&gt;
&lt;p&gt;I needed to inspect the DOM because I inherited a JavaScript file that allows us to mimic scrolling events on mobile devices via webpages. The scrolling library works as expected in all other browsers on all other devices. So, I needed to better understand what was happening in the Android Internet Browser.&lt;/p&gt;
&lt;p&gt;The tool that bridged my device to an inspector tool is Adobe Inspect. To get going, you have to install 3 components:&lt;/p&gt;
&lt;p&gt;1. Adobe Inspect on your computer: &lt;a href="http://html.adobe.com/edge/inspect/" target="_blank"&gt;http://html.adobe.com/edge/inspect/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;2. Google Chrome Extension Adobe Inspect: &lt;a href="https://chrome.google.com/webstore/detail/adobe-edge-inspect/ijoeapleklopieoejahbpdnhkjjgddem?hl=en" target="_blank"&gt;https://chrome.google.com/webstore/detail/adobe-edge-inspect/ijoeapleklopieoejahbpdnhkjjgddem?hl=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;3. Google Play Store Adobe Inspect: &lt;a href="https://play.google.com/store/apps/details?id=com.adobe.shadow.android&amp;amp;hl=en" target="_blank"&gt;https://play.google.com/store/apps/details?id=com.adobe.shadow.android&amp;amp;hl=en&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br/&gt;Once you have installed everything, connect your Android device to your computer and make sure you&amp;#8217;re on the same WiFi. On your Android Device, open Adobe Inspect and click the plus sign in the upper-right hand corner to get to this screen:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/fda48c40beb23751e754a6a79b6f1357/tumblr_inline_mm8ljthmcp1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Get your ip address from your computer and enter it in Adobe Inspect on your Android Device. If you skip ahead, you can find your ip address on your computer by opening Google Chrome and clicking on the Adobe Inspect icon in the nav bar &amp;#8212; you&amp;#8217;ll see it there as well. After you input your ip address into the Android device, you&amp;#8217;ll receive this screen:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/6b90065e6ea6f656fb9e8d1d18734e22/tumblr_inline_mm8llt9jO51qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;Now, open Google Chrome and open the url of your choice with the Adobe Inspect extension enabled. In the upper right hand corner, you&amp;#8217;ll see the Adobe Inspect icon with a green plus sign.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/aa1372ef8231b5f58784b5035421e7a8/tumblr_inline_mm8lpbX2vy1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;Click on this icon to reveal a menu that displays your computer, your IP address, and your device name.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/57239b254253b27bb109ee528ed63171/tumblr_inline_mm8luaEiSV1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Enter the Passcode you received from your Android device.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/1a009ea0d879f7c7b5e086da92607ee1/tumblr_inline_mm8lvkMD7f1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Now that you&amp;#8217;re connected, click on this button next to your device name:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/d4667cb55c1de520e089e5c775ea4d3a/tumblr_inline_mm8ly7S3uv1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Then, a new window should open that looks like this:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/f3c0b20192397b9135c399bcf50099b7/tumblr_inline_mm8lyzVzQI1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;You can see that this is a standard Google Chrome inspector with the name of your device and the url that is currently being inspected. Click on this link and then click on Elements.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/5a66d0cfaa9799e150c3983c879995be/tumblr_inline_mm8m17w50P1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Here, you have a standard inspection workflow similar to what you would use for the full screen experience. You can use the console and other features in a more limited manner to what you would use on the full screen experience. And, Adobe Inspect will highlight what DOM elements are being inspected on the device:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/ecabef28d465f9f7f66acaada3f2b71e/tumblr_inline_mm8m4mPBq21qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;There is much more you can do but, hopefully, you&amp;#8217;re now set up to debug the Android Internet Browser (not that you needed to debug anything in the first place).&lt;/p&gt;</description><link>http://tech.gilt.com/post/49530971053</link><guid>http://tech.gilt.com/post/49530971053</guid><pubDate>Fri, 03 May 2013 15:51:34 -0400</pubDate><category>gilt</category><category>mobile</category><category>android</category><category>frontend</category><dc:creator>gregorymazurek</dc:creator></item><item><title>Offsite</title><description>&lt;p&gt;&lt;a href="http://www.flickr.com/photos/brianballantine/sets/72157633331150961/" target="_blank"&gt;&lt;img alt="image" src="http://media.tumblr.com/ef93dfbb0803b5eb06f5725af088ae5d/tumblr_inline_mm4fj0ACON1qz4rgp.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A few of us took some time to get to know each other a little better, hug trees and talk shop.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/c478342b4553733397ef3a04611e10f6/tumblr_inline_mm4fndwqkS1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/49356942816</link><guid>http://tech.gilt.com/post/49356942816</guid><pubDate>Wed, 01 May 2013 09:19:00 -0400</pubDate><dc:creator>giltquinn</dc:creator></item><item><title>ade-trenaman:

Erlang, Distributed Systems and Sierra Nevada...</title><description>&lt;img src="http://24.media.tumblr.com/8608eca095e25dc0a9b30190a5343f30/tumblr_mm3fyaxKdB1rcx1n4o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a class="tumblr_blog" href="http://ade-trenaman.tumblr.com/post/49317601193/erlang-distributed-systems-and-sierra-nevada-pale" target="_blank"&gt;ade-trenaman&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Erlang, Distributed Systems and Sierra Nevada Pale Ale&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Found this photo on my phone - a real moment in time at Gilt New York! Steve Vinoski, who worked with Gregor and I back in the days of the seminal Irish tech startup IONA Technologies, came to Gilt one cold February night to give a talk on how Riak is implemented in Erlang - it’s a great talk, and a super introduction to Erlang. From left to right: Eric Bowman, Steve Vinoski, Gregor Heine, me, and Mike Bryzek. Too. Much. Fun. &lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://tech.gilt.com/post/49317644392</link><guid>http://tech.gilt.com/post/49317644392</guid><pubDate>Tue, 30 Apr 2013 20:28:19 -0400</pubDate><dc:creator>ade-trenaman</dc:creator></item><item><title>Ade Trenaman: Why Java 8 doesn't rock my Scala</title><description>&lt;a href="http://ade-trenaman.tumblr.com/post/48851882212/why-java-8-doesnt-rock-my-scala"&gt;Ade Trenaman: Why Java 8 doesn't rock my Scala&lt;/a&gt;: &lt;p&gt;&lt;a class="tumblr_blog" href="http://ade-trenaman.tumblr.com/post/48851882212/why-java-8-doesnt-rock-my-scala" target="_blank"&gt;ade-trenaman&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I was looking through an &lt;a href="http://www.techempower.com/blog/2013/03/26/everything-about-java-8" target="_blank"&gt;article&lt;/a&gt; on Java 8, . We’re using Scala heavily at Gilt and I was toying with the heretical notion that Java 8 might create a compelling reason to go back to Java. Sacrilige! I am of course biased in this matter as I’ve really enjoyed the last two years of Scala coding at…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://tech.gilt.com/post/48855205017</link><guid>http://tech.gilt.com/post/48855205017</guid><pubDate>Thu, 25 Apr 2013 10:55:04 -0400</pubDate><dc:creator>ade-trenaman</dc:creator></item><item><title>Gilt Mobile Web Nav Redesigned</title><description>&lt;p&gt;Hello!&lt;/p&gt;
&lt;p&gt;Yesterday (April 23, 2013), I sent to production the third phase of the Gilt Mobile Web (m.gilt.com) redesign. In this phase, I updated the primary and secondary nav on the mobile web so that there is (hopefully!) a much better user experience. And like the first and second phase of the redesign, the goal with the m.gilt.com nav redesign was to incorporate learnings taken from the Gilt iPhone App experience.&lt;/p&gt;
&lt;p&gt;Here are some before and after screenshots:&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/976905bac6ac6a5d142e45b942819ac0/tumblr_inline_mlrjyms9bu1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;On the Sales Listing Page, you&amp;#8217;ll see that I moved the stores menu from above the primary nav to below it. This gives the overall navigation a hierarchy that was not present earlier. You&amp;#8217;ll also notice that the nav feels less busy because the buttons in the primary nav are more concise.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/34a037b2b4200f1fba2f746ccec20a0f/tumblr_inline_mlrjyt6yLU1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;In the Product Listing Page, you&amp;#8217;ll see that the back button was changed and that the title of the sale occupies the secondary nav. This allows the user to easily know in which store she is. In the future, the secondary nav on the product listing page will disappear as the user scrolls down.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/bf131ff891c61b1b5b22811d7ab39890/tumblr_inline_mlrjyya0wP1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;On the Product Detail Page, I tightened the primary nav a little more and there is still no secondary nav.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/39e215f47fd3c0f5f3f477bea322ff9f/tumblr_inline_mlrjz37A671qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/bcda513cf7f8a709757751a130ad8312/tumblr_inline_mlrjz7aNPL1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;On the checkout page, I changed the styling of the Cart and Submit button. The colors now match the style that persists throughout the entire Gilt Mobile Web experience. And, the lock is gone. Our site is still secure regardless whether the lock is there or not.&lt;/p&gt;
&lt;p&gt;Let me know what you think!&lt;/p&gt;
&lt;p&gt;Greg&lt;/p&gt;</description><link>http://tech.gilt.com/post/48776249106</link><guid>http://tech.gilt.com/post/48776249106</guid><pubDate>Wed, 24 Apr 2013 11:00:37 -0400</pubDate><category>mobile</category><category>gilt</category><category>gilt-mobile-web</category><category>ux</category><dc:creator>gregmazurek</dc:creator></item><item><title>Up &amp; Running with Play 2

Last night, Gilt hosted the second...</title><description>&lt;img src="http://25.media.tumblr.com/5943d60e15dd39af35267a114eabc74a/tumblr_mlgshlEV5H1qgexq2o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;h1&gt;Up &amp; Running with Play 2&lt;/h1&gt;

&lt;p&gt;Last night, Gilt hosted the second &lt;a href="http://www.meetup.com/Play-NYC/" target="_blank"&gt;Play NYC&lt;/a&gt; meetup, after nearly a year since the first. This meetup was dedicated to introducing people to the Play Framework.&lt;/p&gt;

&lt;p&gt;I gave a presentation that briefly touched on the reasons why Gilt chose the Play Framework for some of its recent projects and then jumped right into code. Over the course of the talk, I walked through constructing a Play app with Scala connecting to &lt;a href="https://dev.gilt.com/" target="_blank"&gt;Gilt’s API&lt;/a&gt;. Starting with some functional tests, we covered:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;routing, &lt;/li&gt;
&lt;li&gt;controllers, &lt;/li&gt;
&lt;li&gt;Play Actions, &lt;/li&gt;
&lt;li&gt;making a request to a web service,&lt;/li&gt;
&lt;li&gt;Play’s configuration&lt;/li&gt;
&lt;li&gt;&lt;a href="http://docs.scala-lang.org/overviews/core/futures.html" target="_blank"&gt;Futures&lt;/a&gt; and asynchronous behavior, &lt;/li&gt;
&lt;li&gt;unmarshaling JSON,&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.playframework.com/documentation/2.1.1/ScalaTemplates" target="_blank"&gt;Play’s templating language&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;compiling Assets,&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;And finally, and most importantly, deploying our application to production (with Heroku). Along the way we touched on some tenets of functional programming&lt;sup id="fnref:p48301645551-1"&gt;&lt;a href="#fn:p48301645551-1" rel="footnote" target="_blank"&gt;1&lt;/a&gt;&lt;/sup&gt; and Scala’s powerful &lt;code&gt;for&lt;/code&gt; comprehensions.  We covered a lot of ground and in the end only ended up with one route: listing active sales by store.&lt;/p&gt;

&lt;p&gt;The slides for the talk are available &lt;a href="https://speakerdeck.com/mwunsch/play2-up-and-running" target="_blank"&gt;on SpeakerDeck&lt;/a&gt;, the application built is &lt;a href="http://play-gilt.herokuapp.com/women" target="_blank"&gt;currently running in production&lt;/a&gt;, and the application code is &lt;a href="https://github.com/play-nyc/play-gilt" target="_blank"&gt;available on GitHub&lt;/a&gt; for anyone to fork and experiment on.&lt;/p&gt;

&lt;p&gt;I had a blast. Our next meetup isn’t scheduled yet, but we definitely won’t allow such a long delay between meetups again. &lt;a href="http://www.meetup.com/Play-NYC/" target="_blank"&gt;Join the group&lt;/a&gt; to be the first to hear about upcoming events. Thank you to everybody who came out. I am looking forward to the next one.&lt;/p&gt;

&lt;p&gt;— Mark&lt;/p&gt;

&lt;div class="footnotes"&gt;
&lt;hr&gt;&lt;ol&gt;&lt;li id="fn:p48301645551-1"&gt;
&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Monad_(functional_programming)" target="_blank"&gt;“What’s a monad?”&lt;/a&gt; &lt;a href="#fnref:p48301645551-1" rev="footnote" target="_blank"&gt;↩&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;

&lt;/ol&gt;&lt;/div&gt;</description><link>http://tech.gilt.com/post/48301645551</link><guid>http://tech.gilt.com/post/48301645551</guid><pubDate>Thu, 18 Apr 2013 17:02:54 -0400</pubDate><category>PlayFramework</category><category>Scala</category><category>heroku</category><category>λ</category><dc:creator>mwunsch</dc:creator></item><item><title>Working with Time Series Data</title><description>&lt;p&gt;Life in Gilt Tech involves much &lt;a href="http://tech.gilt.com/post/44792645000/scaling-agile-at-gilt-with-teams-ingredients" target="_blank"&gt;lively discussion on KPIs&lt;/a&gt;, consequently we spend a lot of time looking at &lt;a href="http://en.wikipedia.org/wiki/Time_series" target="_blank"&gt;time series data&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;span&gt;We use a variety of tools to manipulate and present this type of data, including &lt;/span&gt;&lt;a href="http://www.r-project.org/" target="_blank"&gt;&lt;span&gt;R&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, &lt;/span&gt;&lt;span&gt;a language and environment for statistical computing and graphics.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;To help us through the process of standardizing the way we represent our KPIs we have developed a simple, R based open-source utility for easily representing time series data originating from a variety of sources.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;If you think you might find this useful, or you’d like to contribute, &lt;/span&gt;&lt;span&gt;&lt;a href="https://github.com/doofdoofsf/plotTimeSeries" target="_blank"&gt;check out the time series project on github&lt;/a&gt;&lt;/span&gt;, and the examples below.&lt;/p&gt;
&lt;h2&gt;&lt;span&gt; &lt;/span&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;span&gt;Example: a thumbnail showing acme revenue by time:&lt;/span&gt;&lt;/h2&gt;

&lt;pre&gt;plot_time_series --width=500 --height=400 --x_spacing="2 months" --csv_filename=test_data/acme_revenue.csv --point_color=gray80 --sunday_point_color=gray80  --remove_outliers --smoothness=0.8 --y_line="35000:Target" --y_prefix="$"&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;strong&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;img alt="image" height="400px;" src="https://lh3.googleusercontent.com/dv33rxVH5m0DPaSsW8RZOc26v23LV-u8jmeFOpQgikxLIWNDKb6qWVilnmKEuyGypKOocGs0RbkRewk-ZneBv0uDOJvL3h-cCxrKO9hbmGY3PeUqJRP-fTQ41g" width="500px;"/&gt;&lt;span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Example: the same revenue data shown in more detail&lt;/span&gt;&lt;/h2&gt;

&lt;pre&gt;plot_time_series --width=1200 --height=700 --x_spacing=week --csv_filename=test_data/acme_revenue.csv --title="Acme Revenue: %s to %s" --remove_outliers --y_line="25000:Target for 2012:gold3!36000:Target for 2013:gold2!42000:Target for 2014:gold1" --y_prefix="$"&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;img alt="image" height="389px;" src="https://lh6.googleusercontent.com/NAKKiKJptearN77gI-nBX5tnPgdYr6cvxmsRUGpW8_D4TBOPWiuDb78cQQhn9OKTx2Q2IzKlxRil_cH389WRF3J5SS2Trs6rwjsjXKf0PurgPRC4RhyqyvK9Zw" width="666px;"/&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/doofdoofsf/plotTimeSeries" target="_blank"&gt;More plot time series examples and documentation &amp;#8230;&lt;/a&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/47462339043</link><guid>http://tech.gilt.com/post/47462339043</guid><pubDate>Mon, 08 Apr 2013 12:08:00 -0400</pubDate><dc:creator>giltquinn</dc:creator></item><item><title>Gilt Mobile Web Redesigned - 10 Views Compared</title><description>&lt;p&gt;Over the last three months, we overhauled the front end (jsp, html, handlebars, less/css, javascript, zepto) for Gilt&amp;#8217;s mobile web experience (&lt;a href="http://m.gilt.com" target="_blank"&gt;http://m.gilt.com&lt;/a&gt;). The redesign was inspired by learnings acquired from our iPhone App and the design is meant to replicate a lot of those features.&lt;/p&gt;
&lt;p&gt;Here are 10 side by side comparisons with notes inline and at the bottom. Let us know what you think!&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/82e9b41a804cac5b423c676fa4468fdd/tumblr_inline_mksr1hcIHr1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;In the previous design, there was an assumption that the Gilt shopper uses the mobile experience quickly and wants to see as many sales as possible in a short amount of space and time. But according to our iPhone App results, our users want to see larger pictures. Having two sales on the first view compared to four has resulted in increased sales, largely due to our amazing imagery.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/62bb161b50103424115779b504550eb7/tumblr_inline_mksr1lpiRe1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;We dropped the black background on the product details because most of our imagery adopted a white background.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/e1dff40ac378c0bf72d707176dba0693/tumblr_inline_mksr1pHRab1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;A nice feature of the redesign is that the add to cart button is visible on the bottom while scrolling on the product detail page. If you are shopping on m.gilt.com and want to purchase an item, you should have the add to cart accessible at all times. But, this doesn&amp;#8217;t always work on all devices.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/fbdb2823d0345bb85325760b669b86d0/tumblr_inline_mksr1uK8d31qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;We created a more streamlined view for our sign in and registration pages by simplifying the experience.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/e35bf7f89023b573a20e31283d81ead7/tumblr_inline_mksr1xF64e1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Our cart page features a similar button to what existed on the product detail page. Again, we are trying to make it as easy as possible to shop on a mobile device.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/85f325ed5984a9a5fca7bed66904b379/tumblr_inline_mksr20ZVdU1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;The checkout experience mimics the iPhone App experience while trying to keep a style that is more generic so that it looks great on Android as well.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/79b952f7ab996e0215b72c749598a2b5/tumblr_inline_mksr249mtb1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;While scrolling to the bottom of the checkout page, the submit order button stays fixed. In our older version, the user had to scroll to the button to checkout.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/71693ce3d675a15a0c967f0764f47a75/tumblr_inline_mksr27mHsG1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;We are reusing elements in our account page that we used in the checkout flow.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/6f7c7b995b64c42fd1b9e1efe4a4bd76/tumblr_inline_mksr2acsxT1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;Our footer introduces more spacing as well as elements that were previously found in the checkout and account flow.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/e8cfec1bea3ab7841b22421ae7e3b86a/tumblr_inline_mksr2dgS7E1qz4rgp.png"/&gt;&lt;/p&gt;
&lt;p&gt;We have an amazing customer service team.&lt;/p&gt;

&lt;p&gt;Here are 5 learnings from redesigning the Gilt Mobile Web experience.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;1. Visual Components:&lt;/strong&gt; Abstract away visual components that can be reused throughout the mobile experience. For example, the buttons in the footer are also used in the account page as well as in checkout. We only need to supply text and an optional image to create one.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;2. Cross-Browser Compatibility:&lt;/strong&gt; Handle browser-specific issues like fixed-positioning on a per-device basis. The fixed &amp;#8220;submit button&amp;#8221; appears at the bottom of the screen on the product detail page, cart, and checkout page for modern browsers. But for early versions of Android, for example, the buttons appear inline.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;3. Iterating:&lt;/strong&gt; Gilt Mobile Web is a complete experience in that it includes everything from the sales listing page through account and checkout. When trying to roll releases out to production, we searched for places where the old and new designs could coexist for a limited period of time. With this strategy, we didn&amp;#8217;t have to redesign everything at once.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;4. Cross-Device Compatibility:&lt;/strong&gt; We tested m.gilt.com against several android and apple devices (as well as ie6 and ie7) to make sure it looked good on many different screen sizes. In many instances, DOM element sizes are determined as a percentage of the viewable screen. But since the majority of our users are accessing us from Safari on iPhone, development starts on the iOS Simulator.&lt;br/&gt;&lt;br/&gt;&lt;strong&gt;5. If it doesn&amp;#8217;t work, roll it back:&lt;/strong&gt; I deployed our second phase to production and immediately upon doing so realized that &amp;#8220;sold out&amp;#8221; hover states were not&amp;#8230; hovering. It was something that we missed and instead of making a quick fix, we rolled it back and spent a little more time testing. We pushed to production again a few days later with bug fixes in place and confidence that the experience was stable. Sometimes, we can&amp;#8217;t catch it all on staging environments.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/47211899408</link><guid>http://tech.gilt.com/post/47211899408</guid><pubDate>Fri, 05 Apr 2013 15:54:16 -0400</pubDate><category>mobile</category><category>gilt</category><category>gilttech</category><category>ios</category><category>web development</category><dc:creator>gregmazurek</dc:creator></item><item><title>26/3/13: Today's Noon Outage - and what we're doing to make sure This Never Happens Again.</title><description>&lt;p&gt;&lt;span&gt;At Gilt we try to move as fast as we can getting code - be it fixes or awesome new features - to production as quickly and safely as possible. Sometimes we make mistakes, and, today was such a day. Around noon, a commit on one of our flagship applications ran riot: allocating native threads; consuming memory and CPU; and bringing down all other applications collocated on the same set of servers. Our customers were affected and for this the tech team at Gilt are truly sorry. There have been a ton of tweets from concerned members, and we were keen to explain what went wrong.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Some interesting things arose in the aftermath of this outage (we take all our outages very, very seriously). First and foremost, this was largely a people problem: our process around code-review and performance testing failed - a commit that was not fully peer-reviewed was moved to production, and deployed -after- our morning performance run. Under normal load, everything looked ‘just fine’ - under our noon rush, everything fell apart. I estimate there’s about a 60% chance that a good code-review would have caught the issue - however, I’m 99.999% confident that our rigorous load tests would have caught the issue. &lt;/span&gt;&lt;span&gt;We use Gerrit for code review, and have automated load tests every morning; this was a late change for which we were hoping to gather some real life data related to load - ironically to debug a smaller performance issue we’ve been seeing in one of our applications - and we rushed the change.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;A positive we can take out of this as a tech organization is that we already have a number of initiatives in progress at Gilt that will prevent this kind of thing from happening. The more we use code-review, the more we see opportunities to automate the veracity of any release: you can imagine a script that says “this release contains a commit that was not reviewed and was +2’d by the author - abort!”. From a performance perspective, we’re working on incorporating performance testing into a continuous integration system we call ‘ION Cannon’; again, any release would be performance tested and rolled back automatically. These are areas where we can take human error out of the process, and I know that I (as the engineer who didn’t run the load test) am keen that we double our efforts in this regard. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;One of the other things we’re doing is making all of the applications that run gilt.com smaller and more isolated, an initiative we call ‘LOSA’ (Lots of Small Apps). LOSA is the mantra that lets us break up some of our large web applications into smaller chunks. The outcome? Stronger ownership of each part of gilt.com by the engineering teams; simpler code, with better sharing of assets and commons functionality;  and, better isolation - in the event that one of our applications serving a part of gilt.com goes awry, other apps should not be impacted. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong id="internal-source-marker_0.33266754099167883"&gt;&lt;br/&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Today we made a mistake - and we feel pretty bad about it. We feel good though about what we’re doing to make gilt.com better.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/46359463184</link><guid>http://tech.gilt.com/post/46359463184</guid><pubDate>Tue, 26 Mar 2013 16:28:00 -0400</pubDate><dc:creator>ade-trenaman</dc:creator></item><item><title>Intro to AngularJS + Gilt API</title><description>&lt;a href="http://blog.dewmap.com/post/51353fa6717c080200000001"&gt;Intro to AngularJS + Gilt API&lt;/a&gt;: &lt;p&gt;&lt;a href="http://dewmap.com/" target="_blank"&gt;Brett Coffin&lt;/a&gt; explains how to build a &lt;a href="http://dewmap.com/experiment/gilt/index.html#/sale/women" target="_blank"&gt;super slick web application&lt;/a&gt; that shows off what you can do with the &lt;a href="http://dev.gilt.com" target="_blank"&gt;Gilt API&lt;/a&gt;.&lt;/p&gt;</description><link>http://tech.gilt.com/post/45674428493</link><guid>http://tech.gilt.com/post/45674428493</guid><pubDate>Mon, 18 Mar 2013 10:55:16 -0400</pubDate><category>API</category><category>angularjs</category><category>gilt</category><category>javascript</category><dc:creator>ffglt</dc:creator></item><item><title>SXSW 2013 Recap</title><description>&lt;a href="http://ux.gilt.com/tagged/sxsw"&gt;SXSW 2013 Recap&lt;/a&gt;: &lt;p&gt;&lt;img alt="" src="http://sxsw.com/sites/all/themes/sxsw-2013/imgs/logo-interactive.png"/&gt;&lt;/p&gt;
&lt;p&gt;The Gilt UX team was at the SXSW Interactive conference this year, and we &lt;a href="http://ux.gilt.com/tagged/sxsw" target="_blank"&gt;live blogged&lt;/a&gt; all of the sessions we went to. Click in to see our notes on Google’s innovation group and their Glass demo, the future of Foursquare and location, the emergence of tech in fashion, and more!&lt;/p&gt;</description><link>http://tech.gilt.com/post/45347323104</link><guid>http://tech.gilt.com/post/45347323104</guid><pubDate>Thu, 14 Mar 2013 11:43:18 -0400</pubDate><category>sxsw</category><category>interactive</category><category>ux</category><dc:creator>parkd</dc:creator></item><item><title>Scaling Agile at Gilt
With teams, ingredients, initiatives and KPIs
Spotify recently documented...</title><description>&lt;h1&gt;Scaling Agile at Gilt&lt;/h1&gt;
&lt;h5&gt;&lt;em&gt;With teams, ingredients, initiatives and KPIs&lt;/em&gt;&lt;/h5&gt;
&lt;p&gt;&lt;strong&gt;&lt;br/&gt;&lt;/strong&gt;&lt;a href="http://en.youscribe.com/catalogue/studies-and-statistics/professional-resources/it-systems/scaling-agile-spotify-1911920" target="_blank"&gt;Spotify recently documented&lt;/a&gt; their progressive approach to scaling Agile development with a fairly large team. Gilt’s approach has many similarities, but since some Spotify best practices are Gilt anti-patterns, it’s worth a closer look.&lt;br/&gt;&lt;br/&gt;The Gilt tech team is about 100 strong. Most of our development is done in Manhattan. We’ve also got a small team in Portland, Oregon and a larger one in Dublin, Ireland.&lt;strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Initiatives&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;The cornerstone of the Gilt process is the initiative. We define an initiative as “a project we expect to work on for the foreseeable future.” Our foreseeable future is typically 3-12 months, depending on the area. An initiative might be to increase organic search traffic to the site.&lt;br/&gt;&lt;br/&gt;We work on the order of 10 initiatives in parallel. The decision to green light an initiative depends on a number of factors. The most significant factor is a mathematical model of how we expect the initiative to perform, but we also consider softer factors like direct customer happiness and innovation.&lt;br/&gt;&lt;br/&gt;Prioritizing a set of initiatives focuses the technology group on an initiative portfolio. This portfolio makes a clear statement on what is important, and indirectly, what is not. This has had a profound effect, halting our previously unending feature level prioritization discussions. This change has made not only our team happier and more productive, but also our stakeholders.&lt;br/&gt;&lt;br/&gt;Unlike Spotify, we don’t maintain a roadmap document. Our roadmap is simply the sum of active initiatives. We revisit the set of prioritised initiatives every few months.&lt;strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;KPIs&lt;/h2&gt;
&lt;p&gt;Initiatives are defined in terms of the key performance indicators (KPIs) used to measure them. We define two types of KPIs. Strategic KPIs measure the success of the initiative’s strategy and last as long as the initiative. Tactical KPIs measure the performance of the initiative’s tactics and come and go as tactics evolve. All tactical KPIs must drive  a strategic KPI.&lt;br/&gt;&lt;br/&gt;For example, our SEO initiative might be defined by the strategic KPI: “Number of organic visitors in the last 30 days.” If current tactics involve stimulating inbound link creation a tactical KPI might be: “New inbound links in the last 30 days.” That tactical KPI would be abandoned when the initiative no longer employed that tactic, either because the team no longer thought they could get more out of that tactic or the team discovered a new tactic that could drive their strategic kpi faster.&lt;br/&gt;&lt;br/&gt;We consider initiative mission statements an anti-pattern. “To be great at Organic search!” is simply a more subjective, and less useful denormalization of the strategic KPI.&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;Teams&lt;/h2&gt;
&lt;p&gt;&lt;span&gt;We organize ourselves into teams (Squads in Spotify parlance) of around 4-10 cross functional members who sit together. Teams focus on a single initiative but may own others that are less active. Team members have a lot of input in selecting the initiatives their team works on.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Team dynamics take a while to form and stabilize. Consequently we favor long running teams, surviving generations of initiatives. However mobility between teams is encouraged and takes two forms. Teams self-organize to swap engineers periodically to manage skills deficits or unexpected workloads, in a practice affectionately called “horse trading.” When teams take on new initiatives it’s not unusual for an engineer with a particular interest to permanently switch teams to work on that initiative.&lt;br/&gt;&lt;br/&gt;Unlike Spotify Squads, teams are not tied to Initiatives. We anticipate teams outliving initiatives, and being able to handle concurrent initiatives. This doesn’t preclude a team having a single initiative for it’s lifetime.&lt;strong&gt;&lt;br/&gt;&lt;img alt="image" height="404px;" src="https://lh5.googleusercontent.com/q4JdkY5MBz4TZq_28EZffqtlMUWRXr1s8xuTU2ZEqqS38m0PKfkPA4g8ragtpYJ5coC4lA78-f4UTbkHcJlpss47c-W3UjbXo4Ja0cCUlL9uVEDhe-he94_G" width="637px;"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;Like Spotify, we strive to make a team operate and feel like a startup. Our teams have a strong identity and are empowered and independent. Teams are self organizing and self prioritizing. &lt;br/&gt;&lt;br/&gt;Teams select their own development methodology. Agile methodologies are strongly encouraged and most teams have backlogs, stand-ups, sprints and retrospectives. Some adopt more rigorous Agile methodologies.&lt;br/&gt;&lt;br/&gt;Strong team code stewardship is encouraged. We use stewardship to describe an ownership model where one team owns repositories of code and takes responsibility to encourage, review and approve modifications made by other teams. &lt;a href="https://code.google.com/p/gerrit/" target="_blank"&gt;Gerrit&lt;/a&gt; is used to facilitate the review process.&lt;br/&gt;&lt;br/&gt;Unlike Spotify, teams have no product owners or business owners. Some teams include business partners. Ownership is considered an anti-pattern since it implies disempowerment of the team members who are not owners. KPIs and collaboration are king. Also unlike Spotify, we don’t appoint different individuals to the doing and prioritizing of work, believing these concepts are fundamentally indivisible. Prioritization happens by the team vigorously debating hypotheses and coming to agreement on the next hypotheses to test, factoring in both impact and feasibility.&lt;br/&gt;&lt;br/&gt;Teams release early and often. “Minimum Viable Product” is a Gilt mantra.&lt;br/&gt;&lt;br/&gt;Teams are encouraged to be highly analytical. We a/b test almost everything and discourage making decisions based on gut instinct. However, we respect intuition and encourage broad hypothesising to ensure we optimize towards global rather than local maximas.&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;span&gt;Ingredients&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;Teams are organizationally flat and cross functional. To increase the likelihood they’ll execute successfully on their initiatives we use a palette of team ingredients as a guide to ensuring the team is appropriately staffed.&lt;br/&gt;&lt;br/&gt;For a team to be successful at Gilt they need some combination of the ingredients: product visionary, coder, presenter, visual designer, business thinker, organizer, motivator, quality manager, coach, analyst, architect, writer, visual designer and ux specialist.&lt;br/&gt;&lt;br/&gt;Rather than filling a narrow role, team members add a set of ingredients. This expectation both pushes and nurtures each team member. We don’t consider “It’s not my job to &amp;#8230;” an acceptable way to start a sentence.&lt;br/&gt;&lt;br/&gt;Depending on each team’s initiative, a different blend of these ingredients is optimal. One person might provide several ingredients, for example, a member who conducts tests, writes feature code and collects and analyses data.&lt;br/&gt;&lt;br/&gt;Teams lacking key ingredients are assisted either by adding additional members or by external coaching.&lt;strong&gt;&lt;br/&gt;&lt;img alt="image" height="280px;" src="https://lh6.googleusercontent.com/0Q8z-QbM6uk10oOXloLIX4mDrbNuClQ0v5AwPI1vg_-w01mnx5EnLG8DCT3Otd9PLg0LMRz0X3wHcC8PJiHloOdqBFeeneMY-GroBoNikW69PfKbP48BDPlk" width="491px;"/&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span&gt;Oversight&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;A bi-weekly check-in gives each team a regular opportunity to provide an update on their results and seek guidance on their current direction. In addition to the team, attendees to this meeting alternate between a panel of technical managers and a panel of senior executives from across the company.&lt;br/&gt;&lt;br/&gt;All check-in meetings have the same agenda. (1) a presentation of KPIs and their history (2) a presentation of recent a/b tests or other recent data and the associated learnings and insights (3) the story: a quick overview of tactics for the next few weeks. &lt;br/&gt;&lt;br/&gt;The prescriptiveness of this agenda is to encourage teams to go deep on the strategy and the data supporting it and avoid discussing feature and UX nuances. Unchecked, these discussions historically tended towards feature debate at the expense of discussing results.&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;

&lt;h2&gt;&lt;span&gt;Enabling Autonomy&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;To allow teams to operate as autonomously we encourage the decentralization of almost everything.&lt;br/&gt;&lt;br/&gt;Decentralization minimizes the dependencies teams have on other teams or systems, allowing them to develop code and release it to production with minimal external interaction.&lt;br/&gt;&lt;br/&gt;Recently we’ve made a large investment in the tools and automation to enable this decentralization. We’re well on our way to fully automated system provisioning and configuration. &lt;br/&gt;&lt;br/&gt;We’ve made a similar investment in our application architecture, moving away from monoliths and towards lots of small independent applications and lots of small independent services. This in combination with our continuous delivery pipeline allows teams to take complete control over delivering software to production. Although we’ve made a big investment here, it’s a work in progress.&lt;strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;Extra-team Communication&lt;/h2&gt;
&lt;p&gt;In addition to the bi-weekly check-in meetings, we encourage the use of several other mechanisms for cross team communication and collaboration.&lt;strong&gt;&lt;br/&gt;&lt;br/&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Tech Bytes: &lt;/strong&gt;&lt;span&gt;Monthly, each team sends out an email to a broad distribution, outlining the recent achievements of the team, framed by their KPIs.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="http://tech.gilt.com/post/3291537111/the-friday-5-5" target="_blank"&gt;Lightning Presentations&lt;/a&gt;: &lt;/strong&gt;&lt;span&gt;Teams self-organize to run a meeting with quick-fire presentations on notable pieces of technology or features that have been developed or deployed recently. Everyone is welcome at the meeting and pizza and beer serve as bait to attract a wide audience.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hack sessions: &lt;/strong&gt;&lt;span&gt;techies are encouraged to periodically take a break from their initiatives and join forces with other teams to work on things they care deeply about. Projects run the gamut from architectural changes, tools, bug squashes, a/b test infrastructure to user facing features.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stakeholder Communication: &lt;/strong&gt;&lt;span&gt;Teams self organize to communicate regularly with and get input from their various stakeholders.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Guilds: &lt;/strong&gt;&lt;span&gt;Gilt has a fairly loose implementation of the Guild concept, defined by Spotify as an &lt;/span&gt;&lt;span&gt;“organic and wide-reaching ‘community of interest’, a group of people who want to share knowledge, tools, code, and practices.”&lt;/span&gt;&lt;span&gt; We have fairly active groups that self organize around areas including front end engineering and &lt;/span&gt;&lt;a href="http://tech.gilt.com/post/42516323522/great-start-to-the-2013-gilt-groupe-architecture" target="_blank"&gt;&lt;span&gt;architecture&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;
&lt;h2&gt;Does this Process Work and Will it Work for You?&lt;/h2&gt;
&lt;p&gt;Over the years we’ve used several different approaches for managing and organizing the Gilt development team. The one described above has been in active use for about 15 months.&lt;br/&gt;&lt;br/&gt;The current approach embraces technology as a key differentiator for Gilt and serves to establish our technology department as a leadership organization rather than a service organization.&lt;br/&gt;&lt;br/&gt;Being a leadership organization sounds great, but it’s not a panacea. It creates additional demands on teams, and requires them to have a deep understanding of our business and a strong point of view, clear vision and driving ambition. We need entrepreneurs to make this model succeed.&lt;br/&gt;&lt;br/&gt;Not all technologists want to take this on. If you do, this approach might work for you.&lt;/p&gt;</description><link>http://tech.gilt.com/post/44792645000</link><guid>http://tech.gilt.com/post/44792645000</guid><pubDate>Thu, 07 Mar 2013 12:46:00 -0500</pubDate><dc:creator>giltquinn</dc:creator></item><item><title>Love the tech badge of honor stickers appearing around the...</title><description>&lt;img src="http://25.media.tumblr.com/e84559e48dd030d3fb41c23c22531a0c/tumblr_mitze9zn7M1qgexq2o1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;Love the tech badge of honor stickers appearing around the office recently&lt;/p&gt;

&lt;div&gt;Awesome Galactus Sticker design by &lt;a href="http://tim-flanagan.com" target="_blank"&gt;Tim Flanagan&lt;/a&gt;&lt;/div&gt;</description><link>http://tech.gilt.com/post/44061704231</link><guid>http://tech.gilt.com/post/44061704231</guid><pubDate>Tue, 26 Feb 2013 09:10:00 -0500</pubDate><dc:creator>giltquinn</dc:creator></item><item><title>Gilt at the Fashion Hackathon</title><description>&lt;p&gt;Hello there!&lt;/p&gt;
&lt;p&gt;&lt;span&gt;I’m Miguel Fajardo, an engineer at Gilt. I want to share a great experience I had with fellow Gilt engineers Jose Sanchez and Patrick Losco at the recent Fashion Hack during New York Fashion Week.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Hearst Corporation hosted the event in their New York City headquarters, the Hearst Tower. The building is easily identified by its diamond-patterned façade. Many other companies co-sponsored the event, including Microsoft, Spotify, Okta, HTC, and of course, Gilt.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/15b343feabaadbee64cdea9b72e5a44a/tumblr_inline_mi4vmyisMm1qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;The two-day event kicked off on Saturday morning in the auditorium where Hearst explained the rules of the competition. The goal was to build a web or mobile application that would interact with the APIs of some of the sponsoring companies, that included Gilt. &lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/cd22b18df4eb5bbfcc69c471acc718cb/tumblr_inline_mi4w26jrN71qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;As one of the companies exposing the APIs to be used as part of the competition, we presented our developer portal and showed some examples to illustrate how to use the Gilt API. Anyone can query our systems to retrieve information about current or future sales, including what products will be included and a ton of info about them (price, current availablity, checkout URL, etc). If you are interested, you can find more info &lt;a href="https://betadev.gilt.com" title="Gilt developer portal" target="_blank"&gt;in our developer portal&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/5e15e51eaf459dec888ee0b11345f642/tumblr_inline_mi4w3sYfnF1qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;Here you can see the team once dinner was served at 7pm:&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/a72c29a5f6c75dfa56c2dd188f8b3fa9/tumblr_inline_mi4w2r4Bse1qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;From left to right: Miguel, Jose, Patrick, and Dalia (she joined our team as application designer and front end developer).&lt;/p&gt;

&lt;p&gt;Our idea was to use a city selected by the user and the current local weather to show trends in the form of relevant clothing and accessories from Hearst media. When the user chooses an image, the application recommends similar products available on Gilt. We built it using the Play framework with Java and Twitter Bootstrap.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;By midnight, we had the retrieval of content from the APIs completed and started focusing on the front end. Time flies in this kind of event, where you are trying to design and build an entire application in such a short period of time!&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/d125ba719abcf1f3c47c515e7c33fd46/tumblr_inline_mi4w460WxW1qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;We had all major functionality wired up by dawn, and then it was a matter of improving the user interface and optimizing performance. We improved the algorithm to select what images from Hearst to show and how to link these to the Gilt items on sale. We decided to fetch the weather at runtime, but cached other API calls that were taking up to a minute. The submission deadline was Sunday at 1pm and we made it just in time. There was no time to rest before all the teams presented their work.&lt;/p&gt;
&lt;p&gt;The presentations took place on the 44th floor of the amazing Hearst Tower.&lt;/p&gt;
&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/fbfc5dc0fc5c6fbdc70f03ea19cc21df/tumblr_inline_mi4x25FsJX1qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;The views were stunning, especially with fresh snow from the previous day&amp;#8217;s blizzard covering the city.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/09d596b5bde33d21afce2de22986b923/tumblr_inline_mi4w4upouH1qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;Our presentation went smoothly and we even appeared in a tweet from Hearst president David Carey.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/9484322d9ef7d01d569c86c0dc2d7728/tumblr_inline_mi4w54jPoq1qz4rgp.png"/&gt;&lt;/p&gt;

&lt;p&gt;In the end we got a special mention as one of the top 5 applications.&lt;/p&gt;

&lt;p&gt;&lt;img alt="image" src="http://media.tumblr.com/6da204335a2afa9605f2950898bc6769/tumblr_inline_mi4w5mkjHr1qz4rgp.jpg"/&gt;&lt;/p&gt;

&lt;p&gt;Jose was already asleep by the time we got to the prizes.&lt;/p&gt;
&lt;p&gt;The Hearst Fashion Hack was a great experience. Not only did we learn a lot about the APIs, but we had a lot of fun together. You can view a demonstration of the application &lt;a href="http://youtu.be/1hviIAxlTOM" title="Application Demo" target="_blank"&gt;in this video&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Hope you enjoyed the post!&lt;/span&gt;&lt;/p&gt;</description><link>http://tech.gilt.com/post/43599790886</link><guid>http://tech.gilt.com/post/43599790886</guid><pubDate>Wed, 20 Feb 2013 18:45:18 -0500</pubDate><dc:creator>frutafresca</dc:creator></item></channel></rss>
