January 14, 2010
@ 05:13 AM

I am happy to say that we (xsights) are looking to add a few more developers to our team. If you are interested ping me or send your CV to jobs at xsights dot com.

Please note that all the openings are  in Israel (in the Natanya vicinity)

Server Side Developer

Position Description and Responsibilities:

We are looking for a motivated developer, a team player, who can improve and add features 
to our product, focusing on a distributed environment with technology challenges. 
Improve performance of existing components by clustering, messaging, caching etc. 
Integrate with external services.

Requirements:
  • At least 2 years experience in C#/Scala, understanding OOP principles - must
  • Experience in concurrent programming - must
  • Experience with communication protocols (TCP, UDP, WCF) - an advantage
  • Experience in Unit Testing - an advantage
  • Knowledge in Distributed Services and Technologies, such as Hadoop, ActiveMQ - an advantage

Web Developer

Position Description:

We are looking for a motivated web developer for our distributed system, to improve and add new features to the inner admin site and to the company’s public beta site.

Responsibilities:

Web site development and deployment Server side programming in a distributed, challenging environment, in C#/Python/Ruby

Requirements:

At least 1 year experience in C#/Python/Ruby - a must 
At least 2 years in web development with full understanding of development and deployment process: 
Client Side: HTML, CSS, JS, upload using a Flash Uploader (such as SWFUpload), Ajax, jQuery. 
Server Side: IIS and ASP.Net or other web server and technology Django/Rails/ASP.Net MVC - a big advantage FTP deployment - an advantage DNS settings - an advantage.

Junior Developer

Position Description:

We are looking for a motivated developer, a team player, who can program tools and tests in C#/Python, for acceptance/system tests of our distributed system. A creative and responsible person, with broad thinking.

Responsibilities:

Create an automated testing environment 
Find and pinpoint problems 
Code solutions

Requirements:

Experience in C#/Python - must 
Experience with HTTP protocol - must 
Experience in monitoring tools (WireShark, Fiddler) - an advantage 
Experience in Unit Testing - an advantage 
Knowledge in Distributed Services and Technologies, such as Hadoop, ActiveMQ - an advantage



 
Tags: xsights

When we added our iPhone application xsights-light to the appstore about a month ago we intended it as a demo application we can use to showcase potential clients what we can do (with the aim of providing a white-label service). We activated a few images (3 on the site and a few others) and forgot about it.

We were very surprised to find out that even though we didn’t publicized it anywhere or anything like that, hundreds of people found it interesting, downloaded the app and tried it on just about anything. Here are just a few examples:

image image image image image image image image image image image image image image image image

As I mentioned above, we only had a few images activated, so naturally, people weren’t very happy and we got some “rave” reviews like “would be nice if it worked as advertized”, “only identifies 3 images” and  others that used less refined language :)

Anyway, we’re listening – and we decided to make xsights-light a little more useful. For one we are adding content, we started with movie posters of movies playing in the US and we intend to add more in the future. What’s more interesting, is that we’re opening up the platform for general use i.e. you can upload (almost) any image you like (such as the images above), add a URL and activate anything you like be that a Pepsi can, an wedding invitation or whatnot (if you’d take a look at @xsightspulse on twitter, you can see what others are activating)

Apparently, we’re not the only ones who think this is interesting, as we also got a nice mention on Tech-Crunch. We agreed to let Tech-Crunch readers be the first users of our service so head over to the article for an invite, we hope to open it for general use in a week or so.


 
Tags: xsights

I begun writing SOA patterns a long time ago. I was making nice progress when suddenly  xsights happened and my free time evaporated. Now,  2 years or so later, we’re finally in production. Since the progress on the book has, hmm how shall I put it, been hampered by xsights,   I thought it would, at least, be appropriate to share a some details on how the ideas presented in the book (written, half-written and yet-to-be-written) are being put to use. As it happens, this also coincided with  Jan Van Ryswyck & Colin Jack  asking me if I’d be interested to in presenting something to the European Virtual Alt.Net group (E-VAN).

So here we are. Next week, I am going to be talking about SOA patterns. I am going to present a few common SOA challenges (availability, flexibility, Reporting, multi-tenancy.) and discuss the patterns and implementation we are using to meet them.  I am still finalizing the presentation so if you have any questions you’d like me to answer, feel free to send them to me (either my email or a comment here) and I’ll do my best to address as many of the questions as possible

Hope to see you there.

Start Time: Monday, October 05, 2009 07:00 PM GMT*

End Time: Monday, October 05, 2009 08:30 PM GMT

Attendee URL: http://snipr.com/virtualaltnet (Live Meeting)

VAN Calendar: http://www.virtualaltnet.com/Home/Calendar

(*) 08:00 PM UK, 09:00 PM Brussels/Israel, 02:00 PM EST and 11:00 AM PST


 
Tags: .NET | SOA | SOA Patterns | xsights

April 28, 2009
@ 10:01 PM

I didn’t blog for the past month – well, I didn’t really had time to breath either :). However as of last week we (xsights) moved our system from demos and testing into production with our first client – Maariv, israel’s second largest newspaper.

In case you don’t know what xsights does – we hyperlink the real world using the mobile as your mouse (sort of like barcodes e.g. microsoft tag – but without the barcode;) )

Anyway, our first product (actually service) is for printed newspapers/magazines (see video above) and we are now in the dry-run phase were we make sure all the interfaces (specifying content, links etc.) work ( With the official launch planned in a few weeks) – but already each newspaper coming out has a few links which are marked by a small “mem” : imagefor instance, Today’s (independence day) paper has 6 different links (in the Sports, signon and Asakim). Currently only us and Maariv’s employees use the system but we thought it would be nice to start getting some more feedback from more objective parties so if you are interested in trying new technologies before others, live in Israel, read Maariv and have a video call  capable 3G phone drop me an email (arnon at xsights dot com). Note that there is no software to install, we use the video call capabilities of the phone (we are working on a client for phones that don’t support video calls like the iPhone etc. but that’s another story)

Other related good news  (I hope that’s how you’d see that anyway) is that I feel I can go back to my regular blogging schedule. Some of the posts in queue include nano-services anti-pattern, aggregated reporting pattern, blogjecting watchdog pattern and two interesting questions I received which are related to it, post on twitter integration for reporting  etc.


 
Tags: General | xsights

March 18, 2009
@ 07:35 PM

Image via Wikipedia
You might have noticed my blogging is slowing down a little,  in case you're wondering the culprit is xsights - As we're getting closer to
production (2-3 weeks if all goes well) everything else slows down...

We all know about continuous integration (CI). We (xsights) are seeing a lot of ROI on the investments we made into signing up to CI esp. when we augmented by automated testing. Everyday we can and do actually release several versions and run load tests on them on different server seeking the best release to  "freeze". Where "freezing" means the  system that will be used in production.  That's the way it is done, right? You work on a release for x months (sometimes years..) and after an integration period at the client's site you go live and forget about them (save for show-stopping bugs) until the next major update several months later. For instance, setting up our "methodology" I figured a 6 months release cycles for major versions plus 1 month releases of minor version would suffice.

These days, however the more I think about it, The more I believe this approach is not the right one for our situation. We are going to go with Continous Deployment. There are many reasons for that  primarily:
  • The requirements stream (new reqs and changes) is still pouring in - and in increased rate.
  • We are building a service platform not an installable product -  This means we get to control where how it is run so there's less overhead in
    streamlining updates
  • It would be our first public installation - were going to roll out bug fixes anyway (I personally never write bugs... but you know ;) ). We'll need a proper procedure for updates anyway
  • We are doing this anyway - every new demo/internal run we have is using the "stablest" latest and greatest :)
What does  Continuous Deployment means? It means we'll be rolling out new production versions on a daily basis (or even more frequently!)
How that's going to work? Well, First there are the prerequisites:

  • Version control - something that can track and tag versions...
  • Continous integration which is set up and running. You cannot release continously if every new development offer breaks the system. An automated smoke test is
  • Automates tests that provide a good approximation of real usage
    (.e.g. usage patterns, loads etc.) - You need to be able to have a high
    confidence level that whatever you have.
  • Staging environment - An environment as close as possible to the production system (just like you'd have for a web-site)
  • Monitoring and alert system - You need to be able to identify problems quickly - the running

Then there's the process:
  1. identify a baseline Stable release -The "fallback".
  2. pick the most promising build of the day
  3. run it through more extensive tests (at least burn-down and load - which means a release maybe 1-2 days old by the time it hits the production system)
  4. if everyhting is cool deploy to staging - else fix bugs and repeat from 2
  5. repeat tests in staging environment
  6. Update system (This is a point that still needs work so we can support a version hot-swap i.e. without a shutdown)..
  7. If the monitoring system alerts unforeseen bugs (i.e. problems with the release) - roll back to stable release, try to add test for the problematic behavior and repeat from 2
  8. if the release worked good enough - mark it as the next Stable release

That's the plan. However as we all know, talk is cheap so be sure to check in here in 2-3 months to hear how did we fare :)

Reblog this post [with Zemanta]



 
Tags: Agile | Project Management | xsights

October 18, 2008
@ 10:58 PM
As I mentioned in a couple of previous posts (like "Using REST along with other architectural ), I've been spending the last few weeks writing an Event system over WCF (probably also explains posts on  WCF gotchas like this;) ). Being a communication infrastructure it is still a long way from being completed, but it seems to be stabilizing and I think it turned out nicely so I thought I'd share a few details.

Let's start with the simple part - the usage.
The eventing is built on the idea of a bus (i.e. no centralized components) and the resources/services that want to use eventing have to use a library which I call EventBroker.  There are two modes for using the EventBroker. one is "regular" events which are contexless. This means that consecutive events can reach different services, and there is no context that flows from event to event:

bool raisedEvent = eb.RaiseEvent<SampleEvent>(new SampleEvent());
The second type of events are Sagas, which represent long running interactions. Sagas does have a "best effort" guarantee to reach the same recipients over consecutive calls. Also you can also End sagas (sucessful termination), Force End Saga (successful termination by a service that didn't initiate the saga) and Abot Saga (unsuccessful termination): Here is how you raise a saga event.
var evnt = new SampleEvent { data = somevalue};
var SagaId = Guid.NewGuid();
eb.RaiseSagaEvent<SampleEvent>(SagaId, evnt);
if you use the same Saga Id, the events are handled as part of the same saga, if you use a Saga Id that wasn't previously defined it will initialize a new saga.
The eventbroker translates events to the relevant contract and dispatches the events over to the different subscribers. Which brings us to to the next part which I  guess,   is also a little more interesting. How subscriptions are defined.

The first thing to do is to define the event itself.
    public class SampleClassEvent :ImEvent
{
public string DataMember1 {set;get;}
public int DataMember2 { set; get;}
}
There aren't any real constraints on the event, except that it has to "implement" the ImEvent interface. Which is really an empty interface but it marks the event as one for the event broker.
Then you have to define an interface for handling the event. The event broker, builds on the idea of convention rather than configuration (an idea popularized by the rails framework) so it is easier to generate the interface (something I do with a resharper template)
    [ServiceContract]
public interface IHandleSampleClass
{
[OperationContract]
int SampleClass(SampleClassEvent eventOccured);

}
The convention is that the interface will have a IHandle prefix followed by the name of the event. It will hold a single operation named like the event (without the Event suffix) and will recieve a single parameter which is the event data. Currently  events do return a value (int) but I am thinking about changing it to void and have everything marked as OneWay for added performance

Now, when we create a service which needs to handle events it will do that by specifing which events it handles. E.g.
    [ServiceContract]
public interface ImSampelResource : ImContract, IHandleSampleClass, IHandleSomeOtherThing
 {
}
So each contract declares all its subscriptions (by a list of IHandleXXX). It should also include the ImContract interface which holds all the service operation used by the eventbroker (e.g. ending sagas etc.).
Services that want to raise events should inherit from a ControlEdge class (base class Edge component that delegates control events to the event broker)

There's still the question of how does the event broker knows where to find other services. There are several ways this can be done (e.g. a service repository) but since we have  blogjecting watchdogs in place anyway, we use them to propagate liveliness (and location ) of services.

This sums up this post. It is basically just a little context for several planned posts where I hope to talk about some of the challenges, alternatives and design decisions that led me to the current design. Meanwhile, I'd also be happy to hear any comments, ideas or reactions you may have
 
Tags: .NET | Design | OO | SOA | SOA Patterns | Software Architecture | WCF | xsights

June 16, 2008
@ 06:23 PM

This is what I've been working on for the past year or so :)


 
Tags: PaperLnx | xsights