Jaką składnią posługiwać się przy wpisywaniu wzorca?

Wyrażenia regularne wpisuje się w formie separator{wyrażenie}separator, np. /^([a-z]*)$/i lub @^(?:http://)?([^/]+)@i. Stosować można wszelkie formy zgodne z funkcjami sprawdzającymi poprawność wyrażeń regularnych w PHP (przykład).

Dlaczego wyrażenie regularne powinno być wpisywane z separatorami?

Dzieje się tak dlatego, że wpisywanie wzorca z uwzględnieniem separatorów pozwala na dodanie modyfikatorów do niego. W wypadku ich braku skrypt domyślnie doda / na początku wyrażenia i / na jego końcu.

Czy mogę dodawać jakąkolwiek treść do testera?

Generalnie to użytkownik wyznacza jaką treść i pod jakim kątem chce testować. Musi on jednak posiadać pełne prawa do publikacji testowanej treści, gdyż będzie ona dostępna dla innych internautów. Należy także unikać wpisywania zwrotów obscenicznych, wulgarnych, czy wskazujących zasoby niezgodne z polskim prawem. Użytkownik ponosi pełną odpowiedzialność za treści publikowane przez niego w serwisie. Na uzasadnioną prośbę osób trzecich poszczególne wpisy mogą zostać usunięte z serwisu.

Czym są wyrażenia regularne?

Wyrażeniami regularnymi nazywami wzorce opisujące ciąg znaków.

  1. wikipedia.org - definicja wyrażeń regularnych
  2. regular-expressions.info - kompendium wiedzy
  3. php.net - użycie w PHP

Gdzie można znaleźć przykładowe wzorce?

W sieci znajduje się całe morze przykładowych wyrażeń. Warto zainteresować się przykładowo:

  1. 15 przydatnych wyrażeń regularnych w PHP
  2. regexlib.com - biblioteka wzorców

Znalazłem błąd w serwisie. Gdzie mogę go zgłosić?

Zauważone błędy proszę zgłaszać w komentarzach pod tym artykułem.

Jestem użytkownikiem forum. Czy mogę jakoś pokazać wyniki testu wyrażenia?

Tak. Przy każdym sprawdzonym wzorcu, w kolumnie identyfikatora, znajduje się odnośnik do strony testowanego wyrażenia. Wystarczy skopiować odnośnik i podzielić się nim ze znajomymi.

W jaki sposób mogę pomóc w rozwoju serwisu?

Osoby chętne do pomocy mogą jej udzielić w następujący sposób:

  1. Poprzez dobrowoloną dotację PayPal.
  2. Poprzez wykonanie tłumaczenia serwisu. Aktualnie poszukiwane są tłumaczenia na języki: niemiecki, hiszpański, francuski, włoski i rosyjski. Jeżeli jesteś zainteresowany zapraszam do korespondencji.
  3. Poprzez dodanie serwisu do ulubionych na serwisach społecznościowych.

Polityka używania cookies i podobnych technologii.

Cookies wykorzystywane są na następujących zasadach:

  1. W związku z udostępnianiem funkcji testowania wyrażeń regularnych i personalizacją regexp.pl (w dalszej części zwanego „Serwisem”) stosuje cookies (tzw. ciasteczka), tj. informacje zapisywane przez serwery na urządzeniu końcowym użytkownika. Serwery mogą odczytać informacje przy każdorazowym połączeniu się z tego urządzenia końcowego lub używać innych technologii o funkcjach tożsamych z ciasteczkami. W niniejszym dokumencie, informacje dotyczące cookies mają zastosowanie również do innych podobnych technologii stosowanych w ramach Serwisu. Pliki cookies stanowią dane informatyczne, w szczególności pliki tekstowe, które przechowywane są w urządzeniu końcowym użytkownika serwisu internetowego. Cookies zazwyczaj zawierają nazwę domeny serwisu internetowego, z którego pochodzą, czas przechowywania ich na urządzeniu końcowym oraz unikalny numer.
  2. Pliki cookies wykorzystywane są w celu:
    • dostosowania zawartości Serwisu do preferencji użytkownika oraz optymalizacji korzystania z niej; w szczególności pliki te pozwalają rozpoznać urządzenie użytkownika serwisu internetowego i odpowiednio wyświetlić stronę internetową, dostosowaną do jego indywidualnych potrzeb,
    • tworzenia statystyk, które pomagają zrozumieć, w jaki sposób użytkownicy serwisu korzystają ze stron internetowych, co umożliwia ulepszanie ich struktury i zawartości,
    • utrzymania sesji użytkownika serwisu internetowego (po zalogowaniu), dzięki której użytkownik nie musi na każdej podstronie serwisu ponownie wpisywać loginu i hasła,
    • dostarczania użytkownikom treści reklamowych bardziej dostosowanych do ich zainteresowań.
  3. W ramach naszych serwisów internetowych możemy stosować następujące rodzaje plików cookies:
    • „niezbędne” pliki cookies, umożliwiające korzystanie z usług dostępnych w ramach serwisu internetowego, np. uwierzytelniające pliki cookies wykorzystywane do usług wymagających uwierzytelniania w ramach Serwisu,
    • pliki cookies służące do zapewnienia bezpieczeństwa, np. wykorzystywane do wykrywania nadużyć w zakresie uwierzytelniania w ramach serwisu,
    • pliki cookies, umożliwiające zbieranie informacji o sposobie korzystania ze stron internetowych serwisu,
    • „funkcjonalne” pliki cookies, umożliwiające „zapamiętanie” wybranych przez użytkownika ustawień i personalizację interfejsu użytkownika, np. w zakresie wybranego języka lub regionu, z którego pochodzi użytkownik, rozmiaru czcionki, wyglądu strony internetowej itp.,
    • „reklamowe” pliki cookies, umożliwiające dostarczanie użytkownikom treści reklamowych bardziej dostosowanych do ich zainteresowań.
  4. W wielu przypadkach oprogramowanie służące do przeglądania stron internetowych (przeglądarka internetowa) domyślnie dopuszcza przechowywanie plików cookies w urządzeniu końcowym użytkownika. Użytkownicy serwisu mogą dokonać w każdym czasie zmiany ustawień dotyczących plików cookies. Ustawienia te mogą zostać zmienione w szczególności w taki sposób, aby blokować automatyczną obsługę plików cookies w ustawieniach przeglądarki internetowej bądź informować o ich każdorazowym zamieszczeniu w urządzeniu użytkownika serwisu internetowego. Szczegółowe informacje o możliwości i sposobach obsługi plików cookies dostępne są w ustawieniach oprogramowania (przeglądarki internetowej). Niedokonanie zmiany ustawień w zakresie cookies oznacza, że będą one zamieszczone w urządzeniu końcowym użytkownika, a tym samym będziemy przechowywać informacje w urządzeniu końcowym użytkownika i uzyskiwać dostęp do tych informacji.
  5. Wyłączenie stosowania cookies może spowodować utrudnienia korzystanie z niektórych usług w ramach naszych serwisów internetowych, w szczególności wymagających logowania, czy personalizacji.
  6. Pliki cookies mogą być zamieszczane w urządzeniu końcowym użytkownika serwisu internetowego, a następnie wykorzystywane przez współpracujących z Serwisem reklamodawców, przez firmy badawcze oraz dostawców aplikacji multimedialnych.

Zasady opisane przy pomocy artykułu i w zgodzie z jednoznacznym zezwoleniem jego autora do użycia podlinkowanego tam tekstu polityki cookies.

Regulamin korzystania z serwisu i przetwarzania danych.

  1. Postanowienia ogólne
    1. Niniejszy regulamin określa zasady korzystania z serwisu dostępnego pod adresem regexp.pl (zwanego dalej "serwisem"), a w tym w szczególności z mechanizmów testowania wyrażeń regularnych.
    2. Autor niniejszego serwisu określony jest w jego stopce.
    3. Przeznaczeniem głównym istnienia serwisu jest testowanie poprawności wprowadzanych danych względem wprowadzonych wyrażeń regularnych.
    4. Charakter serwisu jest osobisty, a możliwość korzystania z jego funkcjonalności została udostępniona na zasadach pro bono publico.
    5. Osoba korzystająca z serwisu nazywana jest w niniejszym regulaminie "wprowadzającym" lub "użytkownikiem", a przesyłane bezpośrednio przez użytkownika do serwisu dane "wprowadzanymi".
    6. Uzupełnieniem niniejszego regulaminu jest "Polityka używania cookies i podobnych technologii".
  2. Warunki korzystania z serwisu
    1. Działanie serwisu opiera się na weryfikowaniu danych wprowadzanych przez użytkownika.
    2. Warunkiem bezwzględnym korzystania z serwisu jest posiadanie wszelkich praw do publikowania danych, które wprowadzane są za pośrednictwem serwisu.
    3. Wprowadzając do serwisu jakiekolwiek dane zgadzasz się na ich przetwarzanie i publikację (np. w formie historii dostępnej na stronie).
    4. Zabrania się wprowadzania danych będących danymi osobowymi, wrażliwymi, stanowiących tajemnice przedsiębiorstwa, danych które mogą naruszać prawa fizycznych lub prawnych osób trzecich, co do których wprowadzający nie ma prawa do publikacji lub przetwarzania w obrębie serwisu.
    5. Wprowadzający bierze pełną odpowiedzialność za to, że dane wprowadzane są zgodne z niniejszym regulaminem oraz polskim prawem.
    6. Autor będzie reagował na zgłoszenia dotyczące naruszeń w racjonalnym czasie, po skutecznym odczytaniu zgłoszenia o potencjalnym naruszeniu.
  3. Zakres przetwarzania danych
    1. Serwis gromadzi dane niezbędne do swojego funkcjonowania zwane dalej w całości "danymi".
    2. Serwis nie profiluje użytkowników, a dane nie są gromadzone w celu identyfikacji tożsamości osób fizycznych.
    3. Z serwisu korzystają użytkownicy niezarejestrowani.
    4. W związku z przeznaczeniem działalności serwisu gromadzone są dane wprowadzane przez użytkowników, określone w warunkach korzystania z serwisu.
    5. Równolegle wraz z wprowadzaniem przez użytkownika zbierane i zapisywane są informacje o dacie wykonania akcji oraz adres IP wprowadzającego lub inne, pozyskane z ogólnodostępnych baz danych WHOIS informacje techniczne o adresie IP.
    6. Na płaszczyźnie serwerowej zbierane są logi.
    7. Ze względu na prowadzony profil działalności do danych może mieć dostęp dostawca usług internetowych zasobów serwerowych obsługujący serwis.
    8. Dane nie są automatycznie udostępniane podmiotom trzecim.
    9. Informacje wspierające zbieranie statystyk mogą być przekazywane do zewnętrznej usługi Google Statistics zgodnie z polityką prywatności firmy Google.
    10. W przypadkach prawnie uzasadnionych, np. na wniosek odpowiednich służb poszczególne dane mogą być udostępnione uprawnionym podmiotom.

regexp.pl

tester wyrażeń regularnych

Zmień język na polski.

Zmień język na angielski.

Pokaż/ukryj listę ostatnich testów.

Pokaż listę tylko moich testów.

Pokaż listę wszystkich testów.

Wyświetl zawartość kanału RSS.

Pokaż pomoc.

Rozwiń listę wyników, aby zobaczyć rezultat testu.

Tester wyrażeń regularnych pozwoli Ci w prosty sposób sprawdzić poprawność wykorzystywnego wzorca i frazy. Wystarczy, że wypełnisz poniższy formularz, a skrypt zwróci wszelkie niezbędne do walidacji dane.

Dodając wzorzec i ciąg znaków do sprawdzenia potwierdzasz, że masz pełne prawa do upubliczniania zawartych w nich treści oraz, że akceptujesz regulamin korzystania z serwisu.

ID Wyrażenie regularne Ciąg znaków Wynik Zwracane ciągi znaków Link
78473 CREATE TABLE [core].[\w]( CREATE TABLE [core].[wrk_zcs_wymiany](
[DWHIdKontraktuKonta] [int] NOT NULL,
[DataZdarzenia] [datetime] NULL,
[NumerSeryjny] [varchar](50) NULL,
[NumerDodatkowy] [varchar](50) NULL,
[NumerMSISDN] [varchar](50) NULL,
[NumerIMEI] [varchar](50) NULL,
[RodzajZdarzenia] [varchar](52) NULL,
[idDekoderKonfiguracjaModelu] [int] NULL,
[RowNumber] [bigint] NULL,
[produkt] [int] NULL
) ON [DATA_01]
fałsz
78472 [A-Z0-9]{8} 26478706 prawda
  1. 26478706
78471 [A-Z0-9]{8} AAAABBB fałsz
78470 [A-Z0-9]{8} AAAABBBBC prawda
  1. AAAABBBB
78469 [A-Z0-9]{8} AAAABBBB prawda
  1. AAAABBBB
78468 [A-Z0-9]{8} A fałsz
78467 (.\..)? dev6.pl.comarch.clm.web.common.StartupListener prawda
78466 .\.. dev6.pl.comarch.clm.web.common.StartupListener prawda
  1. .
  2. .
  3. .
  4. .
  5. .
  6. .
78465 .\.\. dev6.pl.comarch.clm.web.common.StartupListener fałsz
78464 .\. dev6.pl.comarch.clm.web.common.StartupListener prawda
  1. 6.
  2. l.
  3. h.
  4. m.
  5. b.
  6. n.
78463 (.\.)?. dev6.pl.comarch.clm.web.common.StartupListener prawda
  1. d
  2. e
  3. v
  4. 6.p
    • 6.
  5. l.c
    • l.
  6. o
  7. m
  8. a
  9. r
  10. c
  11. h.c
    • h.
  12. l
  13. m.w
    • m.
  14. e
  15. b.c
    • b.
  16. o
  17. m
  18. m
  19. o
  20. n.S
    • n.
  21. t
  22. a
  23. r
  24. t
  25. u
  26. p
  27. L
  28. i
  29. s
  30. t
  31. e
  32. n
  33. e
  34. r
78462 ^*$ 2011-01-01 01:43:32 fałsz
78461 ^[0-9]{4}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9](,[0-9]{3})?$ 2011-01-01 01:43:32,999 prawda
  1. 2011-01-01 01:43:32,999
    • ,999
78460 ^[0-9]{4}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9](,[0-9]{3})?$ 2011-01-01 01:43:32 prawda
  1. 2011-01-01 01:43:32
78459 ^[0-9]{4}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9](,[0-9]{3})$ 2011-01-01 01:43:32 fałsz
78458 ^[0-9]{4}-[0-1][0-9]-[0-3][0-9] [0-2][0-9]:[0-5][0-9]:[0-5][0-9](,[0-9]{3})$ 2011-01-01 01:43:32,999 prawda
  1. 2011-01-01 01:43:32,999
    • ,999
78457 ^[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-3]:[0-5][0-9]:[0-5][0-9],[0-9]{3}$ 2011-01-01 01:43:32,999 prawda
  1. 2011-01-01 01:43:32,999
78456 ^[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9] [0-2][0-3]:[0-5][0-9]$ 2011-01-01 01:43:32,999 fałsz
78455 ^[0-9][0-9][0-9][0-9]-[0-1][0-9]-[0-3][0-9]$ 2011-01-01 prawda
  1. 2011-01-01
78454 ^[0-9][0-9][0-9][0-9](-[0-1][0-9](-[0-3][0-9])?)?$ 2011-01-01 prawda
  1. 2011-01-01
    • -01-01
    • -01
78453 /[A-Z0-9]{8}/ <!DOCTYPE html>
<head>
spider.io — Blog





<!--[if lt IE 9]>

<![endif]-->







VideoJS.setupAllWhenReady();



</head>
<body>
<nav>
<ol>
<li><a href="http://spider.io/about/">About</a></li>
<li><a href="http://spider.io/careers/">Careers</a></li>
<li><a href="http://challenge.spider.io">Challenge</a></li>
<li><a href="/blog">Blog</a></li>

<li class="last"><a href="https://dashboard.spider.io/">Dashboard</a></li>
</ol>
</nav>
<header>
<div id="logobox">
<h1><a href="/" class="logo">spider.io</a></h1>
<div class="top">
</div>

<div class="middle">
</div>
<div class="bottom"></div>
</div>
</header>

<article class="post">
<div class="top"></div>
<div class="middle">

<!-- blog post -->

<h1><a href="http://spider.io/blog/2011/11/silicon-milkroundabout-30-10-2010/" rel="bookmark" title="Permanent Link to Silicon Milkroundabout, 30.10.2010">Silicon Milkroundabout, 30.10.2010</a></h1>
<h2 style="text-align: justify;">Thank you</h2>
<p style="text-align: justify;">Many, many thanks to Ian, Pete, Anaïs and their <a href="http://songkick.com/">SongKick</a> team for Sunday’s <a href="http://siliconmilkroundabout.com/">Silicon Milkroundabout</a>. A stupendous event, much enjoyed.</p>
<p style="text-align: justify;">And thank you to everyone who came to banter with us at the spider.io gazebo. In particular, a white hat tip to some of the visiting <a href="http://challenge.spider.io">challenge</a> hackers: <a href="https://twitter.com/#!/tackers">@tackers</a>, <a href="https://twitter.com/#!/Petespider">@PeteSpider</a>, <a href="https://twitter.com/#!/chrisdarby89">@chrisdarby89</a>, <a href="https://twitter.com/#!/alol">@alol</a> and <a href="https://twitter.com/#!/spidery_tweet">@spidery_tweet</a>.</p>

<p style="text-align: justify;">We’re looking forward to having many of you visit us at Spider Towers. As mentioned, we’ve put some details up <a href="http://spider.io/careers/">here</a>.</p>
<h2 style="text-align: left;">Our one-minute pitch on the day</h2>
<p style="text-align: justify;">For those who didn’t get to hear our one-minute pitch, this is what we had to say on the day:</p>
<p style="text-align: justify;"><em>At spider.io, we look to catch bad people doing very bad things. </em></p>
<p style="text-align: justify;"><em> We catch botnets, browser emulators, clickjackers, traffic launderers, bots that probe for weakness, bots that learn. At spider.io, our business is to distinguish legitimate human website visitors from nefarious automated traffic. </em></p>
<p style="text-align: justify;"><em> How do we do it? </em></p>

<p style="text-align: justify;"><em> It’s a hard engineering problem. It would be a hard problem at toy levels of traffic. We need reverse Turing tests. We need to analyse from the application layer to below the TCP layer. We need clever stateful classifiers, that classify information based on previously received information. And if this isn’t hard enough, imagine doing this across four times the number of messages each day than the number of tweets received by Twitter each day. This is where we’ll be before the year is out. And for us this is just the beginning.</em></p>
<p style="text-align: justify;"><em> If you’d like to work at the very edge of what is technically possible, come say, “Hi,” at the spider.io gazebo.</em></p>
<h2 style="text-align: justify;">Arts and crafts in a gazebo… in a brewery</h2>
<p style="text-align: justify;">We had a lot of fun preparing for the day. Simon, who has a rather admirable <a href="http://spider.io/wp-content/uploads/2011/11/buildingqualification.png">building qualification from Cambridge</a>, showed off his skills and built us some suitably excellent whiteboard stands. Ben, not to be outdone by the Cantabrigian, whipped up a rather fabulous stencil. And how best to show off their creations? Stick them in an all-weather gazebo, of course, in the <a href="http://www.trumanbrewery.com/">Truman Brewery</a>.</p>

<p style="text-align: justify;"><img class="alignleft size-full wp-image-1441" style="float: left; padding-bottom: 10px;" title="stands" src="http://spider.io/wp-content/uploads/2011/11/stands.jpg" alt="" width="436" /><img class="alignright size-full wp-image-1446" style="float: right; padding-left: 5px; padding-bottom: 10px;" title="stencil" src="http://spider.io/wp-content/uploads/2011/11/stencil.jpeg" alt="" width="436" /></p>
<div class='clear'></div>
<p><img class="alignleft size-full wp-image-1465" style="float: left; padding-bottom: 10px;" title="gazebo" src="http://spider.io/wp-content/uploads/2011/11/gazebo.jpeg" alt="" width="436" /><img class="alignright size-full wp-image-1466" style="float: right; padding-left: 5px; padding-bottom: 10px;" title="up" src="http://spider.io/wp-content/uploads/2011/11/up.jpeg" alt="" width="436" /></p>
<div class='clear'></div>
<p><img class="alignright size-full wp-image-1184" style="float: right; padding-left: 5px; padding-bottom: 10px;" title="smr2" src="http://spider.io/wp-content/uploads/2011/11/smr2.png" alt="" width="436" /><img class="alignleft size-full wp-image-1183" style="float: left; padding-bottom: 10px;" title="smr" src="http://spider.io/wp-content/uploads/2011/11/smr.png" alt="" width="436" /></p>
<!-- end blog post -->

<div class="post-meta">
Posted on <time pubdate="pubdate" datetime="2011-11-01T16:22:30+00:00">November 1, 2011 at 4:22pm</time>
</div>

<footer>

<a href="http://twitter.com/share" data-count="none"
data-text="spider.io: Silicon Milkroundabout, 30.10.2010" data-url="http://spider.io/blog/2011/11/silicon-milkroundabout-30-10-2010/"
class="twitter-share-button">Tweet</a>
</footer>

</div>
<div class="bottom"></div>
</article>


<article class="post">
<div class="top"></div>
<div class="middle">


<!-- blog post -->
<h1><a href="http://spider.io/blog/2011/10/extreme-architecting/" rel="bookmark" title="Permanent Link to Extreme Architecting">Extreme Architecting</a></h1>
<p style="text-align: justify;">As Simon covered in <a title="How To Catch A Bot" href="http://spider.io/blog/2011/09/how-to-catch-a-bot/">our first blog post</a>, our quest is to detect web bots that are up to no good. Of course, this includes bots pretending to be real people, not just those with bot user agents! Otherwise it would be pretty easy, wouldn’t it?</p>
<p style="text-align: justify;">To help our customers, we need to receive and analyse requests from their websites, making a real-time judgement as to the nature and intentions of an “actor” (a person or bot making requests to the website). Then we need to push our real-time classifications into an analytics dashboard/API. This would be tricky enough, if we were only analysing low levels of traffic. But, before the year is out, we’re expecting that we’ll be analysing over a billion events per day (which would be four times the number of tweets currently sent each day). Due to the volumes of traffic we process, and our customers’ mitigation requirements, we need our systems to be highly available and massively scalable.</p>

<h2 style="text-align: justify;">Don’t get attached</h2>
<p style="text-align: justify;">As a startup, we have very little technological baggage, but we do also have lots of systems to build and grow very quickly. As a result, we’re constantly watching the tech landscape for new or improved ‘off-the-shelf’ (or ‘straight-from-github’) software. We have a strong preference for open source wherever possible, so we are free to make changes that we can contribute back to the community. Sometimes, this means throwing away a home-grown system in the early stages of its life, to replace it with a recently-released community alternative. We aren’t afraid to do this. Just because something looked right 3 months ago, doesn’t mean it’s still right now. It’s all too easy to get attached to the current way of doing things, which is something that must be overcome when a better solution presents itself.</p>
<p style="text-align: justify;">The key to this ‘extreme architecting’ is to keep systems separated as far as possible, so they are freely interchangeable. The common pattern of abstraction used in software (with Java interfaces, for example) can easily be overlooked when building large but tightly-coupled computer systems that require high performance. In a stream based architecture it’s fairly easy to add components to message queuing servers, running systems in parallel to compare results and performance, before selecting the best for the job.</p>

<h2 style="text-align: justify;">Storm</h2>
<p style="text-align: justify;">A recent example of this is <a href="https://github.com/nathanmarz/storm">Storm</a>, released by <a href="http://twitter.com/nathanmarz">Nathan Marz of Twitter</a>. Storm is a distributed stream-processing framework, and something we’d been <a href="http://engineering.twitter.com/2011/08/storm-is-coming-more-details-and-plans.html">keeping an eye on for some time</a>. One look at the <a href="http://www.slideshare.net/nathanmarz/storm-distributed-and-faulttolerant-realtime-computation">slides</a> showed the architecture that led to the creation of Storm was the same architecture we had internally—in fact, we’d recently started our own project to create something similar to Storm in light of our experiences. We were well aware that in the coming months our load was going to move from a few hundred requests a second to potentially tens of thousands (and more!). As a result, we needed to ensure our new system was reliable and massively scalable.</p>
<p style="text-align: justify;">When the Storm project was open-sourced, I spent a few hours seeing how our system could make use of it. We had parts of our system converted to it in a matter of days. This was due to a combination of excellent documentation, but also that our system was configured in a similar way, so we did not have to take a great conceptual leap. Rather than spending months writing our own code, we were able to spend weeks adapting our existing systems to its framework and carry out exploratory testing work—we like to know how our systems will respond under heavy (and crushing) loads. It’s better than being surprised when something goes wrong!</p>

<p style="text-align: justify;"><img class="size-full wp-image-1123 alignright" style="float: right; padding-left: 20px;" title="StormBlog-Diagram" src="http://spider.io/wp-content/uploads/2011/10/StormBlog-Diagram.png" alt="" width="391" height="647" /></p>
<p style="text-align: justify;">We’ve been running Storm on production loads in our test environment for a couple of weeks now, and are preparing to roll out to our full production environment—one of the first companies to do so outside of Twitter. We’re really excited about the project and hope to contribute back to it. There’s a growing community already making contributions to the ecosystem, and we’re grateful to Nathan for all his hard work.</p>
<h2 style="text-align: justify;">Storm – Uses</h2>
<p style="text-align: justify;">Our new Storm cluster provides the base for a several components in our system. Our stateful classifiers consume multiple streams of information about incoming requests and join them together to identify bot and user behaviours. We use the <a href="http://esper.codehaus.org/">Esper</a> stream processing engine to perform the analysis, while Storm provides the fault-tolerance and message distribution layer required to make Esper scale. We also have a set of stateless classifiers to make decisions based on single requests. These are manually scaled (and written in Python) at present, but will be moved under Storm’s management using its ‘multilang’ feature.</p>

<p style="text-align: justify;">Storm is also finding uses within our database architecture, providing first-line aggregation to reduce the frequency of writes to the HBase cluster that runs our analytics dashboard. In time, we plan to take advantage of Storm’s distributed RPC (remote procedure call) features to enhance our customer-facing APIs.</p>
<p style="text-align: justify;"> </p>
<h2 style="text-align: justify;">At the cutting edge</h2>
<p style="text-align: justify;">We came to the realisation that most of our systems run “0.x” version software. With proper testing, and with a focus on ensuring graceful service degradation in the face of component failure, we don’t consider this a problem—more, a necessary part of using community software at the cutting edge of data processing. If you want to work with big data, using some technologies you’ll have heard of and some you won’t, why not have a look at our <a href="http://spider.io/careers">careers page</a>?</p>
<!-- end blog post -->


<div class="post-meta">
Posted on <time pubdate="pubdate" datetime="2011-10-28T12:43:51+00:00">October 28, 2011 at 12:43pm</time>
</div>

<footer>
<a href="http://twitter.com/share" data-count="none"
data-text="spider.io: Extreme Architecting" data-url="http://spider.io/blog/2011/10/extreme-architecting/"
class="twitter-share-button">Tweet</a>
</footer>

</div>

<div class="bottom"></div>
</article>


<article class="post">
<div class="top"></div>
<div class="middle">

<!-- blog post -->
<h1><a href="http://spider.io/blog/2011/10/testing-javascript-with-mturk/" rel="bookmark" title="Permanent Link to Testing JavaScript with Amazon’s Mechanical Turk">Testing JavaScript with Amazon’s Mechanical Turk</a></h1>
<p >

<h2 >
<p >
<p style="text-align: justify;"><em>Most companies would stop there and push to production. We don’t.</em></p>
<p style="text-align: justify;">There are a great many subtle effects and unexplained artifacts that occur in the wild that just don’t happen in a testing environment:</p>
<ul style="text-align: justify;">
<li>People using strange hardware configurations,</li>
<li>New, unusual or badly written plugins,</li>
<li>Bad or intermittent connections,</li>

<li>Hundreds of browser windows open simultaneously for days,</li>
<li>the list continues.</li>
</ul>
<p style="text-align: justify;">Creating every possible combination of these in a test environment is not tractable. In this situation we take a statistical approach and take a sample from the population (users of the Internet).</p>
<h2 style="text-align: justify;">Amazon’s Mechanical Turk</h2>
<p style="text-align: justify;">If you haven’t come across <a href="https://www.mturk.com/mturk/welcome">Amazon’s Mechanical Turk</a>, or MTurk for short, we highly recommend <a href="http://en.wikipedia.org/wiki/Amazon_Mechanical_Turk">researching</a> <a href="http://mturkishdelight.blogspot.com/">it</a>. Essentially it is a crowd-sourcing platform. You pay lots of people (Workers) small amounts of money to work on simple tasks (Human Intelligence Tasks or HITs).</p>

<p style="text-align: justify;"><em>Workers form our sample of real world users.</em></p>
<p style="text-align: justify;">We have two types of HIT:</p>
<ul style="text-align: justify;">
<li>A scripted task, where the worker follows a series of predefined steps mimicking our selenium setup, and</li>
<li>A realistic task where the worker has to accomplish the sort of task they would typically tackle on a web page (information seeking, navigating etc.).</li>
</ul>
<p >
<h2 style="text-align: justify;">Handling bias</h2>
<p style="text-align: justify;">Clearly the pool of MTurk workers are not strictly representative of our customer’s users. To handle this we split our tasks into two pools:</p>

<ul style="text-align: justify;">
<li>Random HITs, where anyone can take part, and</li>
<li>Stratified HITs, where we specify the worker’s browser and operating system.</li>
</ul>
<p style="text-align: justify;">HITs requiring a specific setup are common on MTurk as many of the tasks require esoteric applets, environments, or settings. Stratified HITs are assigned in the ratio that we see users (with a browser–operating system pair making a stratum).</p>
<h2 style="text-align: justify;">Continuous testing</h2>
<p style="text-align: justify;">As well as being a good pre-production test, MTurk is fantastic for continuous testing. As new browsers are released, browsers and operating systems are updated and environments change, this is reflected in your diverse pool of workers. Changes in browsers and operating systems can automatically feed back into your strata for Stratified HITs. This lets you spot problems early and isn’t reliant on updating your in-house test setup.</p>
<h2 style="text-align: justify;">How it fits together</h2>
<p >

<p >
<p style="text-align: justify;"> </p>
<p style="text-align: center;"><a href="http://spider.io/wp-content/uploads/2011/10/MTurkBlogPost.png"><img class="aligncenter size-full wp-image-1104" title="MTurkBlogPost" src="http://spider.io/wp-content/uploads/2011/10/MTurkBlogPost.png" alt="" width="556" height="473" /></a></p>
<h2 style="text-align: justify;">Cost vs value</h2>
<p >
<p style="text-align: justify;">Put this in contrast with our test box, a £400 Mac mini running OS X with 3 Windows Virtual Machines giving us a total of 13 browser–operating system pairs, on one connection, one set of hardware and under constant load.</p>
<p ></p>
<!-- end blog post -->

<div class="post-meta">

Posted on <time pubdate="pubdate" datetime="2011-10-26T16:01:39+00:00">October 26, 2011 at 4:01pm</time>
</div>

<footer>
<a href="http://twitter.com/share" data-count="none"
data-text="spider.io: Testing JavaScript with Amazon’s Mechanical Turk" data-url="http://spider.io/blog/2011/10/testing-javascript-with-mturk/"
class="twitter-share-button">Tweet</a>
</footer>

</div>
<div class="bottom"></div>

</article>


<article class="post">
<div class="top"></div>
<div class="middle">

<!-- blog post -->
<h1><a href="http://spider.io/blog/2011/10/demonstration-screencast-verifying-that-display-ads-are-visible-from-within-iframes/" rel="bookmark" title="Permanent Link to Demonstration Screencast: Verifying that Display Ads are Visible from within Iframes">Demonstration Screencast: Verifying that Display Ads are Visible from within Iframes</a></h1>
<p style="text-align: justify;">In the world of online display advertising, “iframe” is a dirty word. There are many reasons for this. One of the more significant reasons is that iframes make it difficult for advertisers to verify that their online display ads are visible—within a visitor’s active browser window or tab.</p>

<h2 style="text-align: justify;">When things are easy</h2>
<p style="text-align: justify;">The task of verifying that ads are visible when they are <em>not</em> served in iframes is relatively straight forward. The verifier collects four sets of numbers (though this would be optimised in practice):</p>
<ol style="text-align: justify;">
<li>the scroll position of the viewport (the position of the top left corner of the viewport relative to the top left corner of the page);</li>
<li>the height and width of the viewport;</li>
<li>the position of the top left corner of the ad relative to the top left corner of the page; and</li>
<li>the height and width of the ad.</li>
</ol>

<p style="text-align: justify;">Taken together, these numbers allow us to determine whether an ad is visible.</p>
<p style="text-align: center;"><img title="position" src="http://spider.io/wp-content/uploads/2011/10/position2.png" alt="" width="700" height="800" /></p>
<h2 style="text-align: justify;">Complications</h2>
<p style="text-align: justify;">Recent studies have suggested that about 70% of ad impressions are currently delivered via cross-domain iframes.</p>
<p >
<ol style="text-align: justify;">
<li>the scroll position of the viewport;</li>
<li>the height and width of the viewport; and</li>

<li>the position of the top left corner of the ad relative to the top left corner of the page.</li>
</ol>
<h2>A Probabilistic Solution</h2>
<p style="text-align: justify;">Most visibility verifiers simply ignore ad impressions that are delivered in iframes. Ignoring 70% of ad impressions is clearly not ideal, but what’s one to do?</p>
<p >
<p style="text-align: justify;">How well does this probabilistic solution perform in practice—without access to scroll information; without actual browser dimensions; without information about whether pages are requested in background tabs; without any notion of whether the page being visited is at all similar to the crawled page; sometimes without having page-level URLs? It would make an interesting study.</p>

<p style="text-align: justify;">(Note: these crawlers announce to the websites being crawled that they aren’t human visitors. They do this in the User-Agent headers that they provide. So, to make matters even trickier than they already are, it would trivially easy for nefarious publishers to serve very different content to the crawlers than they serve to human visitors.)</p>
<h2 style="text-align: justify;">A New (Patent-Pending) Solution</h2>
<p style="text-align: justify;">In the following screencast we introduce a new approach to verifying that ads served from cross-domain iframes are visible. The approach works across all mainstream browsers.</p>
<p style="text-align: justify;">If you’d like to find out more, please get in touch at <a href="mailto:[email protected]">[email protected]</a>.</p>
<div style="margin: 0 auto; width: 880px; position: relative;">

<!-- Begin VideoJS -->
<div class="video-js-box">

<!-- Using the Video for Everybody Embed Code http://camendesign.com/code/video_for_everybody -->
<video class="video-js" width="880" height="495" poster="http://spider.io/wp-content/uploads/2011/07/ad-visibility-video-poster.png" controls preload="auto" >
<source src="http://spider.io/wp-content/uploads/2011/07/display-ad-visibility.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />

<source src="http://spider.io/wp-content/uploads/2011/07/display-ad-visibility.theora.ogv" type='video/ogg; codecs="theora, vorbis"' />
<!-- Flash Fallback. Use any flash video player here. Make sure to keep the vjs-flash-fallback class. -->

<param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
<param name="allowfullscreen" value="true" />
<param name="flashvars" value='config={"playlist":["http://spider.io/wp-content/uploads/2011/07/ad-visibility-video-poster.png", {"url": "http://spider.io/wp-content/uploads/2011/07/display-ad-visibility.mp4" ,"autoPlay":false ,"autoBuffering":true }]}' />

<!-- Image Fallback -->
<img src="http://spider.io/wp-content/uploads/2011/07/ad-visibility-video-poster.png" width="880" height="495" alt="Poster Image" title="No video playback capabilities." />

</video>
<!-- Download links provided for devices that can't play video in the browser. -->
<p class="vjs-no-video"><strong>Download Video:</strong>
<a href="http://spider.io/wp-content/uploads/2011/07/display-ad-visibility.mp4">MP4</a>

<a href="http://spider.io/wp-content/uploads/2011/07/display-ad-visibility.theora.ogv">Ogg</a>

<br>
<!-- Support VideoJS by keeping this link. -->
<a href="http://videojs.com">HTML5 Video Player</a> by <a href="http://videojs.com">VideoJS</a>
</p>
</div>
<!-- End VideoJS -->

<p> </p>
</div>
<!-- end blog post -->

<div class="post-meta">
Posted on <time pubdate="pubdate" datetime="2011-10-26T15:25:35+00:00">October 26, 2011 at 3:25pm</time>
</div>

<footer>
<a href="http://twitter.com/share" data-count="none"
data-text="spider.io: Demonstration Screencast: Verifying that Display Ads are Visible from within Iframes" data-url="http://spider.io/blog/2011/10/demonstration-screencast-verifying-that-display-ads-are-visible-from-within-iframes/"
class="twitter-share-button">Tweet</a>

</footer>

</div>
<div class="bottom"></div>
</article>


<article class="post">
<div class="top"></div>
<div class="middle">

<!-- blog post -->
<h1><a href="http://spider.io/blog/2011/10/silicon-milkroundabout-and-the-spider-io-challenge/" rel="bookmark" title="Permanent Link to Silicon Milkroundabout and the Spider.io Challenge">Silicon Milkroundabout and the Spider.io Challenge</a></h1>

<p style="text-align: justify;">To celebrate spider.io’s attendance at <a href="http://siliconmilkroundabout.com/">Silicon Milkroundabout</a>, the recruitment fair for startups, we’ve launched the <a href="http://challenge.spider.io">Spider.io Challenge</a>.</p>
<h2 style="text-align: justify;">Can you hack it?</h2>
<p style="text-align: justify;">The <a href="http://challenge.spider.io">Spider.io Challenge</a> is a treasure hunt for hackers.</p>
<p style="text-align: justify;">We’ve hidden fourteen codes in and around <a href="http://challenge.spider.io">challenge.spider.io</a>. With each code that you find, we’ll give you a clue to help you find the next code. As soon as you sign in to the challenge, the clock starts ticking. It’s a race against time. It’s a race against other hackers. Best of luck!</p>

<p style="text-align: justify;">Searching for clues across the web stack is a lot like what we’re doing when we’re searching for web robots. Clues as to the true nature of a website visitor can be hidden anywhere. It’s our job to work as detectives, to solve the visitor puzzle.</p>
<h2 style="text-align: justify;">Silicon Milkroundabout</h2>
<p style="text-align: justify;">Spider.io will have a stand at the <a href="http://siliconmilkroundabout.com/">Silicon Milkroundabout</a> careers fair on Sunday, 30 October. If you’re interested in helping us catch bad people doing bad things, come over to our stand and have a chat.</p>
<!-- end blog post -->

<div class="post-meta">

Posted on <time pubdate="pubdate" datetime="2011-10-24T17:32:49+00:00">October 24, 2011 at 5:32pm</time>
</div>

<footer>
<a href="http://twitter.com/share" data-count="none"
data-text="spider.io: Silicon Milkroundabout and the Spider.io Challenge" data-url="http://spider.io/blog/2011/10/silicon-milkroundabout-and-the-spider-io-challenge/"
class="twitter-share-button">Tweet</a>
</footer>

</div>
<div class="bottom"></div>

</article>

<article class="post">
<div class="top"></div>
<div class="middle index-navigation">
<div class="left"></div>
<div class="right"><a href="http://spider.io/blog/page/2/" >More »</a></div>
<div class="clear"></div>
</div>
</div>

<div class="bottom"></div>
</article>
<footer>
<p>
© spider.io 2011 </p>
</footer>

<img src="http://cst-sc.cleananalytics.com/img?eid=SC-5d814701a8780e9" height="1" width="1" alt="" />




var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-26478706-2']);
_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);
})();


</body>
</html>

<!-- Dynamic page generated in 0.159 seconds. -->
<!-- Cached page generated by WP-Super-Cache >
<!-- super cache -->
prawda
  1. 26478706
78452 /[A-Z0-9]{8}/ <!DOCTYPE html>
<head>
spider.io — Careers





<!--[if lt IE 9]>

<![endif]-->








VideoJS.setupAllWhenReady();



</head>
<body>
<nav>
<ol>
<li><a href="http://spider.io/about/">About</a></li>
<li><a href="http://spider.io/careers/">Careers</a></li>
<li><a href="http://challenge.spider.io">Challenge</a></li>
<li><a href="/blog">Blog</a></li>

<li class="last"><a href="https://dashboard.spider.io/">Dashboard</a></li>
</ol>
</nav>
<header>
<div id="logobox">
<h1><a href="/" class="logo">spider.io</a></h1>
<div class="top">
</div>

<div class="middle">
</div>
<div class="bottom"></div>
</div>
</header>

<article class="post">
<div class="top"></div>
<div class="middle">

<!-- blog post -->

<h1>Getting In Touch</h1>
<p>As part of the spider.io team you will use and develop cutting-edge algorithms and technologies to outwit extremely talented, extremely devious, extremely motivated engineers. Each and every day you will face new challenges, new puzzles. You will have a competitive salary; and you will be based in London’s West End. If you are capable of a leading <a href="http://community.topcoder.com/tc?module=AlgoRank">TopCoder</a> rating, and you are keen on a dynamic, challenging environment, then:</p>
<ul>
<li>try our treasure hunt for hackers, <a href="http://challenge.spider.io">challenge.spider.io</a>;</li>
<li>try your hand at these <a href="http://spider.io/wp-content/uploads/2010/12/questions.pdf">questions</a>; and</li>

<li>please get in touch with us at <a href="mailto:[email protected]">[email protected]</a>.</li>
</ul>
<p> </p>
<h1 style="text-align: justify;">Software Engineer</h1>
<h2 style="text-align: justify;">Who are you?</h2>
<p style="text-align: justify;">You are an exceptional engineer, and you want to roll your sleeves up and get stuff done. You want to challenge yourself against a hard engineering problem. You want to work in a small company where your input will make a material difference to both the company’s direction and ultimate success. You are not just a cog in a machine: you do not want to be a nameless suit, and you do not want that you are simply told what to do. You get excited about building new things and taking projects from conception to production.</p>
<h2 style="text-align: justify;">What will you be working on?</h2>
<p style="text-align: justify;">You will be responsible for designing, implementing and advancing an architecture that will allow us to catch botnets, browser emulators, clickjackers, traffic launderers, web robots that probe for weakness, web robots that learn.</p>

<p style="text-align: justify;">You will work on a broad range of projects. You will throw hundreds of billions of monthly events at NoSQL databases and distributed Complex Event Processing engines: HBase, VoltDB, Storm, Esper, etc. You will work on test, configuration and monitoring systems that allow for a Chaos Monkey to try wreak havoc. You will be encouraged to review and discuss advances in the field, to rapidly produce proof of concept solutions, and to select the most appropriate technologies and approaches for each new challenge.</p>
<p> </p>
<h1 style="text-align: justify;">More Details</h1>
<h2>The One-Minute Pitch <span style="font-size: 13px; font-weight: normal;">(as given at </span><a style="font-size: 13px; font-weight: normal;" href="http://siliconmilkroundabout.com/">Silicon Milkroundabout</a><span style="font-size: 13px; font-weight: normal;">)</span></h2>
<p> </p>
<div align="center">
<!-- Begin VideoJS -->
<div class="video-js-box">
<!-- Using the Video for Everybody Embed Code http://camendesign.com/code/video_for_everybody -->

<video class="video-js" width="626" height="352" poster="http://spider.io/wp-content/uploads/2011/11/spiderIO_oneminute.poster.jpg" controls preload="auto" >
<source src="http://spider.io/wp-content/uploads/2011/11/spiderIO_oneminute.mp4" type='video/mp4; codecs="avc1.42E01E, mp4a.40.2"' />

<source src="http://spider.io/wp-content/uploads/2011/1/spiderIO_oneminute.theora.ogv" type='video/ogg; codecs="theora, vorbis"' />
<!-- Flash Fallback. Use any flash video player here. Make sure to keep the vjs-flash-fallback class. -->

<param name="movie" value="http://releases.flowplayer.org/swf/flowplayer-3.2.1.swf" />
<param name="allowfullscreen" value="true" />
<param name="flashvars" value='config={"playlist":["http://spider.io/wp-content/uploads/2011/11/spiderIO_oneminute.poster.jpg", {"url": "http://spider.io/wp-content/uploads/2011/11/spiderIO_oneminute.mp4" ,"autoPlay":false ,"autoBuffering":true }]}' />
<!-- Image Fallback -->

<img src="http://spider.io/wp-content/uploads/2011/11/spiderIO_oneminute.poster.jpg" width="626" height="352" alt="Poster Image" title="No video playback capabilities." />

</video>
<!-- Download links provided for devices that can't play video in the browser. -->
<p class="vjs-no-video"><strong>Download Video:</strong>
<a href="http://spider.io/wp-content/uploads/2011/11/spiderIO_oneminute.mp4">MP4</a>

<a href="http://spider.io/wp-content/uploads/2011/1/spiderIO_oneminute.theora.ogv">Ogg</a>

<br>
<!-- Support VideoJS by keeping this link. -->
<a href="http://videojs.com">HTML5 Video Player</a> by <a href="http://videojs.com">VideoJS</a>
</p>
</div>
<!-- End VideoJS -->
</div>

<p> <br />
<em>Video Transcript:</em></p>
<blockquote>
<p style="text-align: justify;">At spider.io, we look to catch bad people doing very bad things.</p>
<p style="text-align: justify;">We catch botnets, browser emulators, clickjackers, traffic launderers, bots that probe for weakness, bots that learn. At spider.io, our business is to distinguish legitimate human website visitors from nefarious automated traffic.</p>
<p style="text-align: justify;">How do we do it?</p>
<p style="text-align: justify;">It’s a hard engineering problem. It would be a hard problem at toy levels of traffic. We need reverse Turing tests. We need to analyse from the application layer to below the TCP layer. We need clever stateful classifiers, that classify information based on previously received information. And if this isn’t hard enough, imagine doing this across four times the number of messages each day than the number of tweets received by Twitter each day. This is where we’ll be before the year is out. And for us this is just the beginning.</p>
<p style="text-align: justify;">If you’d like to work at the very edge of what is technically possible, come say, “Hi,” at the spider.io gazebo.</p>
</blockquote>
<p> </p>
<h2>Career Headlines</h2>

<p style="text-align: center;"><img class="aligncenter size-full wp-image-1553" title="smr" src="http://spider.io/wp-content/uploads/2011/11/smr1.png" alt="" width="880" /></p>
<!-- end blog post -->

<footer>
<a href="http://twitter.com/share" data-count="none"
data-text="spider.io: Careers" data-url="http://spider.io/careers/"
class="twitter-share-button">Tweet</a>
</footer>

</div>
<div class="bottom"></div>
</article>


<footer>

<p>
© spider.io 2011 </p>
</footer>

<img src="http://cst-sc.cleananalytics.com/img?eid=SC-d927fce9c3a934d" height="1" width="1" alt="" />



var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-26478706-2']);
_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);
})();


</body>

</html>

<!-- Dynamic page generated in 0.133 seconds. -->
<!-- Cached page generated by WP-Super-Cache >
<!-- super cache -->
prawda
  1. 26478706
78451 /[A-Z0-9]{8}/ <!DOCTYPE html>
<head>
spider.io — About





<!--[if lt IE 9]>

<![endif]-->








VideoJS.setupAllWhenReady();



</head>
<body>
<nav>
<ol>
<li><a href="http://spider.io/about/">About</a></li>
<li><a href="http://spider.io/careers/">Careers</a></li>
<li><a href="http://challenge.spider.io">Challenge</a></li>
<li><a href="/blog">Blog</a></li>

<li class="last"><a href="https://dashboard.spider.io/">Dashboard</a></li>
</ol>
</nav>
<header>
<div id="logobox">
<h1><a href="/" class="logo">spider.io</a></h1>
<div class="top">
</div>

<div class="middle">
</div>
<div class="bottom"></div>
</div>
</header>

<article class="post">
<div class="top"></div>
<div class="middle">

<!-- blog post -->

<h1>Distinguish Web Robots from Human Website Visitors</h1>
<p style="text-align: justify;">Spider.io provides the only hosted platform that allows you to identify automated attacks on your web content with impression-level precision. The platform is being used by some of today’s leading web companies to protect websites, display marketing channels, and PPC marketing channels.</p>
<p style="text-align: justify;">For more information about how spider.io can help you, for example case studies, and access to live demonstration dashboards, please get in touch at: <a href="mailto:[email protected]">[email protected]</a></p>
<p style="text-align: justify;"><img src="http://spider.io/wp-content/uploads/2010/12/spiderboard1.png" alt="" title="spiderboard" width="888" class="aligncenter size-full wp-image-1180" /></p>
<h1 style="text-align: justify;">Founding Architects</h1>
<p style="text-align: justify;"><strong>Dr Douglas de Jager </strong>is a poacher turned gamekeeper. He previously founded BytePlay Ltd, a venture backed software company which provided content scraping as a service to clients including: DMGT, Trinity Mirror, Archant Media, Zoopla, Fish4 and the Evening Standard. He has been invited to speak at the offices of both Google and Microsoft. He has published papers on performance analysis, Web information retrieval and asynchronous algorithms. He received his PhD in Computing from Imperial College London, following an MSc in Computing (Imperial) and an MA in Mathematics and Philosophy (Oxford).</p>

<p style="text-align: justify;"><strong>Dr Simon Overell </strong>is a specialist in Web mining and classification techniques. He previously led the Web Mining and Natural Language Processing projects at True Knowledge; before this worked for Yahoo! Research Barcelona on supervised classification of Wikipedia articles and Flickr tags. He has published papers on how people use place names in context, place name disambiguation, classifying articles and geographic IR. He has been a committee member of the BCS Information Retrieval Specialist Group since 2006. He received his PhD in Computing from Imperial College London, following a first class MEng in Artificial Intelligence (Imperial).</p>
<p style="text-align: justify;"><strong>Dr Ashley Brown </strong>is a systems architect specialising in performance optimisation. He has previously worked on quantum chemical modelling, pipeline inspection robots and a control system for newspaper presses. He has published papers on the use of speculative hardware optimisations to accelerate key kernels for scientific computations. He received his PhD in Computing from Imperial College London, following a first class MEng in Computing (Imperial).</p>
<p >
<p style="text-align: justify;"> </p>
<!-- end blog post -->

<footer>

<a href="http://twitter.com/share" data-count="none"
data-text="spider.io: About" data-url="http://spider.io/about/"
class="twitter-share-button">Tweet</a>
</footer>

</div>
<div class="bottom"></div>
</article>


<footer>
<p>
© spider.io 2011 </p>

</footer>

<img src="http://cst-sc.cleananalytics.com/img?eid=SC-a1cbf93af7796c1" height="1" width="1" alt="" />



var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-26478706-2']);
_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);
})();


</body>
</html>

<!-- Dynamic page generated in 0.137 seconds. -->
<!-- Cached page generated by WP-Super-Cache >
<!-- super cache -->
prawda
  1. 26478706
78450 ^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$ 2011-01-01 fałsz
78449 ^(19|20)\d\d([- /.])(0[1-9]|1[012])\2(0[1-9]|[12][0-9]|3[01])$ 2011 fałsz

« poprzednia 1 218016 18017 18018 18019 18020 18021 18022 18023 18024 18025 1802621017 21018 następna »