<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-36430695</atom:id><lastBuildDate>Wed, 21 Oct 2009 20:02:40 +0000</lastBuildDate><title>Alive and stirring data</title><description>Правильная постановка вопроса содержит большую часть ответа. Здесь нет готовых решений, только достаточно хорошие вопросы чтобы найти ответ самостоятельно.</description><link>http://miroff.blogspot.com/</link><managingEditor>noreply@blogger.com (Miroff)</managingEditor><generator>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/AliveAndStirringData" type="application/rss+xml" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-984977334147489288</guid><pubDate>Fri, 30 Jan 2009 07:00:00 +0000</pubDate><atom:updated>2009-01-30T13:35:27.821+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;The validation problem&lt;/h2&gt;

&lt;p&gt;Сложно найти программиста, который бы никогда не сталкивался с задачей проверки пользовательских данных. Буквально на первой же лабе в институте, преподаватель "ломает" программу некорректным вводом. Почти все через это прошли и признают, что относится к входным данным нужно со здоровой паранойей. Вопрос лишь в том, где именно проверять входные данные. Возбужденные сторонники ООП поднимают на щит инкапсуляцию и провозглашают немедленную валидацию на уровне классов бизнес-сущностей, бородатые DBA ратуют за проверки на уровне БД, очкастые архитекторы стоят на вынесении валидаторов в отдельную сущность, аппелируя к SRP. Разумеется, все они правы по-своему.&lt;/p&gt;

&lt;p&gt;Есть такая штука, которая называется &lt;strong&gt;инвариантом системы&lt;/strong&gt;. Это такой набор утверждений, истинных в любом ее состоянии. Хороший пример такого инварианта -- бухгалтерский баланс. Сумма активов равна сумме пассивов. Если это не так, значит где-то произошла серьезная ошибка. Для отдельных компонентов могут быть свои инварианты, попроще. Например, &lt;em&gt;для любого счета всегда известна валюта&lt;/em&gt; или &lt;em&gt;метод никогда не возвращает null&lt;/em&gt;. В первую очередь инварианты нужны внутри самой системы. Если мы знаем, что для всех счетов всегда известна валюта, мы можем обращаться к ней без проверки не рискуя получить NullPointerException. Кто же ответсвенен за консистентное состояние системы? Очевидно, сама система. Технически это можно сделать разными способами. Годятся простые проверки, вынос обязательных полей в конструкторы, констрейнты на базе, ассерты, современные средства контрактного программирования и все прочее, что придет в голову. Однако у инварианта есть side effect в том, что каждое дополнительное утверждение снижает гибкость системы. Если какое-то состояние системы нарушает инвариант, оно невозможно, независимо от желаний программиста. Избыточность в инварианте системы приводит к тому, что вместо простых действий устраиваются танцы вприсядку с целью обойти инвариант.&lt;/p&gt;

&lt;p&gt;Чтобы избежать этой опасности, инвариант следует тщательно оберегать от распухания. Для того утверждения не влияющие на целостность системы целесообразно выделить в отдельный слой. Например, в системе никому не требуется номер паспорта клиента, но с точки зрения бизнеса это поле относится к обязательным, потому что по закону положено. Более того, часто возникают ситуации, когда в одних случаях поле является обязательным, а в других опциональным. Например, паспортные данные требуется от клиента клиент собирается получить деньги и небязательны если он принес деньги отдать.&lt;/p&gt;

&lt;p&gt;Проверки, которые не входят в инвариант стоит собирать в одном месте, что значительно упрощает внесение изменений. Тут хорошо годятся и отдельные классы *Validator, валидаторы на основе XML правил и т.п. Если правила меняются неприлично часто, хорошо помогает вообще отдать настройку правил валидации админу. Пусть он в рантайме поднимает галочки. Пользователи будут довольны.&lt;/p&gt;

&lt;p&gt;Почему бы инвариант системы тоже не оформить в виде набора отдельных валидаторов? Для внешних данных это имеет смысл, но проверки только внешних данных недостаточно. Любое изменение данных крайне желательно проверять на соответствие инварианту. Поэтому от дополнительных средств контроля целостности никуда не деться. Надеюсь, проблема валидации стала немного яснее.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-984977334147489288?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2009/01/validation-problem.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-8192769328625065120</guid><pubDate>Sun, 11 Jan 2009 07:00:00 +0000</pubDate><atom:updated>2009-01-11T12:58:43.916+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">usability</category><category domain="http://www.blogger.com/atom/ns#">metadata</category><category domain="http://www.blogger.com/atom/ns#">semantic_web</category><title /><description>&lt;h2&gt;Chinese classification&lt;/h2&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Z-sGuwkoyTw/SWmX5TL0UCI/AAAAAAAAACg/upcCNmKT45Q/s1600-h/Nine-Dragons1.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 174px;" src="http://1.bp.blogspot.com/_Z-sGuwkoyTw/SWmX5TL0UCI/AAAAAAAAACg/upcCNmKT45Q/s320/Nine-Dragons1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5289926247981535266" /&gt;&lt;/a&gt;

&lt;p&gt;Среди людей занимающихся семантикой распространен мем "китайская классификация" -- таксономия с "плавающим" основанием. Корни этого термина растут из эссе Борхеса "Аналитический язык Джона Уилкинса" в котором он упоминает некую китайскую энциклопедию под названием  "Небесная империя  благодетельных знаний". На ее древних страницах написано, что животные делятся на:
&lt;/p&gt;
&lt;blockquote&gt;  
&lt;ol&gt;
&lt;li&gt;принадлежащих императору;&lt;/li&gt;
&lt;li&gt;бальзамированных;&lt;/li&gt;
&lt;li&gt;домашних;&lt;/li&gt;
&lt;li&gt;молочных поросят;&lt;/li&gt;
&lt;li&gt;сирен;&lt;/li&gt;
&lt;li&gt;сказочных;&lt;/li&gt;
&lt;li&gt;бродячих псов;&lt;/li&gt;
&lt;li&gt;включённых в эту классификацию;&lt;/li&gt;
&lt;li&gt;бешеных;&lt;/li&gt;
&lt;li&gt;бессчетных;&lt;/li&gt;
&lt;li&gt;нарисованных тончайшей кистью из верблюжьей шерсти;&lt;/li&gt;
&lt;li&gt;прочих;&lt;/li&gt;
&lt;li&gt;только что разбивших кувшин;&lt;/li&gt;
&lt;li&gt;издалека кажущихся мухами.&lt;/li&gt;
&lt;/ol&gt;
&lt;/blockquote&gt;

&lt;p&gt;С точки зрения современного образованного человека китайская классификация выглядит дико. С другой стороны такие классификации встречаются повсеместно, достаточной вспомнить классификатор жанров FB2, библиотечный каталог, или классификатор МКБ-10. &lt;a href="http://ailev.livejournal.com/"&gt;ailev&lt;/a&gt; вообще высказал мысль о том, что &lt;a href="http://ailev.livejournal.com/633904.html"&gt;все онтологии -- это замаскированные китайские классификации, ибо именно таковые классификации лежат в основе мира, именно к таким классификациям привыкли люди.&lt;/a&gt; Если это так, возникает вопрос, откуда берутся "китайские классификации" и почему люди охотнее создают и пользуются ими вместо строгих таксономий?&lt;/p&gt;

&lt;p&gt;Не смотря на кажущуюся сумбурность, "китайская классификация" подчинена определенной внутренней логике. Строгая таксономия делит мир на классы согласно некоторого рационального критерия: принадлежит животное императору или нет; домашнее оно или дикое; существует оно в реальности или же оно вымышленное и т.п. Для "китайской" классификации в качестве основания выступает не рациональный критерий а степень важности некоторого класса. В каноническом примере, создателя классификации равно интересуют, как животные императора, так и домашние животные, независимо от того, кому они принадлежат. Если бы автор пожелал создать на тех же критериях строгую рациональную классификацию, она получилась бы в несколько раз больше и многие ее классы оказались бы невостребованными. "Китайские классификации" стоит рассматривать как оптимизации строгих таксономий под конкретные способы использования.&lt;/p&gt;

&lt;p&gt;Очевидно, что любую строгую иерархическую классификацицию можно сделать китайской. Достаточно присвоить классам разные веса и сгруппировать на одном уровне классы с одинаковым весом. Некоторый аналог такого приема в дизайне интерфейсов -- быстрые закладки для часто используемых функций. К сожалению, простого способа обратного преобразования не существует, поскольку невозможно автоматически выделить рациональные критерии из мешанины классов. Единственный достоверный способ на сегодня, это кропотливая ручная обработка. Неудивительно, что инициатива semantic web продвигается с таким скрипом. "Китайские" классификации это объективная часть природы человека, и хотим мы этого или нет, нам придется учиться с ними справляться.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-8192769328625065120?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/12/chinese-classification.html</link><author>noreply@blogger.com (Miroff)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_Z-sGuwkoyTw/SWmX5TL0UCI/AAAAAAAAACg/upcCNmKT45Q/s72-c/Nine-Dragons1.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-2145435291779315282</guid><pubDate>Fri, 19 Dec 2008 14:00:00 +0000</pubDate><atom:updated>2008-12-19T20:25:40.802+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">metadata</category><category domain="http://www.blogger.com/atom/ns#">software_design</category><category domain="http://www.blogger.com/atom/ns#">semantic_web</category><title /><description>&lt;h2&gt;Data about data&lt;/h2&gt;

&lt;p&gt;Если открыть спецификацию какого-нибудь формата данных, в ней скорее всего обнаружится раздей посвященный метаданным. Иногда, такой раздел превышает остальную спецификацию в несколько раз по объему и по сложности. В то же время, на практике метаданные используют весьма и весьма нечасто. Существуют даже форматы, которые никто так  полностью и не имплементировал, по причине невостребованности. Например, тот же &lt;a href="http://www.id3.org"&gt;ID3v2&lt;/a&gt; (метаданные для MP3) с его несколькими сотнями тегов начиная от автора песни и заканчивая переводами лирики. Или &lt;a href="http://exif.org/"&gt;EXIF&lt;/a&gt;, которым пользуются ровно потому, что все современные камры пишут в него параметры съемки. Еще ни разу не видел, чтобы из него кто-нибудь использовал разделы описания или копирайта. Или &lt;a href="http://fictionbook.org/index.php/FictionBook"&gt;FB2&lt;/a&gt;, по поводу метаданных которого регулярно возникают споры на форумах о том, как их заполнять. Или MARC, с правильным заполнением которого проблемы даже у профессиональных библиотекарей, хотя им-то сам бог велел прекрасно разбираться в предметной области. И какой формат ни возьми, с метаданными будет плохо. Или мало, или много, или в самый раз, но совсем не то, что нужно.&lt;/p&gt;

&lt;p&gt;Для того чтобы понять почему так происходит, нужно определить, что такое метаданные. Лаконичное определение из заголовка, конечно, прекрасно, но оно ничего не говорит о том, какие это данные. Почти все факты о данных можно представить в виде утверждений &lt;code&gt;&amp;lt;субъект, свойство, значение&amp;gt;&lt;/code&gt;. А набор свойств из предметной области и доменов для значений суть онтология. Например, &lt;em&gt;фокусное расстояние&lt;/em&gt; это свойство, которое может принимать значение типа &lt;em&gt;длина&lt;/em&gt; (а не угол или скорость). В большинстве форматов онтология жестко зафиксирована, так что не бросается в глаза, но она всегда присутствует.&lt;/p&gt;

&lt;p&gt;Вернемся к проблеме. Разработчик формата всегда держит в голове какой-то способ использования этого формата. Иначе он в принципе не смог бы разработать ничего полезного. Однако, как только он фиксируеется на способе он начинает представлять себе предметную область с одной, узкой, точки зрения. В результате получается онтология, описывающая каую-то узкую область, которую разработчик считает верной. Однако, у пользователей совсем другое мнение на этот счет. Почти наверняка кто-то будет использовать формат по другому. ID3 созвался для музыки, но его можно использовать для кучи разных вещей: от записи телефонных разговоров, до калибровочных сигналов дефект-детекторов. EXIF хорошо описывает метаданные съемки, но не годится для описания преобразований, проделанных с оригинальным изображением. Проблема в том, что невоможно предусмотреть все способы использования метаданных и разработать всеобъемлющую онтологию. Более того, такие попытки почти всегда приводят либо к излишней общности либо к излишней сложности. И то и другое отталкивает пользователей от использования метаданных. Хуже, когда появляются несколько стандартов метаданных для одного формата. В итоге каждый софт какие-то форматы метаданных поддерживает, а какие-то нет, что еще сильнее отвращает пользователей. Никому не хочется описывать файл, если при следующей обработке или конвертации эти сведения потеряются.&lt;/p&gt;

&lt;p&gt;Как можно с этой проблемой справиться? Если вы разработчик формата, не пытайтесь думать за пользователей -- все равно не выйдет. Дайте им возможность определять собственные онтологии и снабдите их парой убедительных примеров для конкретных узких областей. Хороший пример движения в нужном направлении &lt;a href="http://www.adobe.com/products/xmp/"&gt;Adobe XMP&lt;/a&gt; основанный на RDF. Нельзя сказать, что этот формат идеален, но хоть что-то.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-2145435291779315282?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/12/data-about-data.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-6732853911453907537</guid><pubDate>Fri, 28 Nov 2008 10:30:00 +0000</pubDate><atom:updated>2008-12-11T19:50:12.481+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">management</category><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Time to live&lt;/h2&gt;

У каждого предмета есть определенное время жизни. Рано или поздно он устареет, износится и потребует замены новым. Или просто исчезнет проблема, ради решения которой этот предмет создавался, как исчезли мундштуки, подстаканники, пресс-папье и буфеты. Это касается не только материальных объектов, но и информации, в том числе  и информационных систем. У каждой строчки кода, у каждого килобайта данных есть собственное время жизни. Время жизни есть даже у таких неосязаемых сущностей, как идеи или соглашения. Для того, чтобы научиться оценивать характерное время жизни, нужно хорошо понимать механизмы разрушения объектов. Например, автомобиль может разрушится в результате аварии, физического износа или морального устаревания. Если известно, что автомобиль морально устареет через 10 лет, нецелесообразно обеспечивать его надежную работу в течение большего срока. Все равно к тому времени он уже окажется под прессом. Знание характерного времени жизни позволяет поддерживать качество на необходимом уровне, не больше и не меньше. Зачем делать автомобиль надежным, если через 10 лет он все равно окажется на помойке, где не важно работает он или нет. 

&lt;h3&gt;Данные&lt;/h3&gt;
Оставим за скобками временные данные, которые на то и временные, что их время жизни невелико. Для данных постоянных время жизни составляет от 25 лет до бесконечности. Данные редко становятся не нужны, a накопленные за долгие годы данные невозможно ничем заменить. Например снимки допоптопных аппаратов советской серии Венера, несмотря на отвратительное качество будут жить еще долго. Сперва в качестве основного источника информации, затем для сравнения с современными снимками и анализа изменений. Обычно, вменяемые люди стараются не уничтожать данные, мало ли что еще пригодится. Вдруг завтра из них удастся извлечь новую информацию. Мне доводилось работать с базами, которые пережили три поколения бизнес-кода и переживут еще как минимум столько же. Поэтому к проектированию баз данных нужно относиться особо внимально. Любое ваше сиюминутное решение в угоду производительности или простоте кодирования будут с матюками вспоминать через много лет. Изменить что-то в унаследованной базе, в которой уже накопились гигабайты данных нереально сложно. 

&lt;h3&gt;Протоколы и стандарты&lt;/h3&gt;
Две причины, по которым устаревают стандарты и протоколы: они перестают отвечать изменившимся требованиям или появляется способ сделать то же самое проще. Поскольку технологии непрерывно меняются и то, что раньше требовало дестятка PhD, сегодня доступно школьнику, редкий стандарт проживет больше 10 -- 15 лет. Затем, если представится возможность, он отправится на помойку истории. К сожалению это происходит не всегда. Очень часто изменения уже внедренного стандарта, процесс настолько болезненный, что стандарт активно используется не смотря на то, что они окончательно устарели. В качестве вопиющих примеров можно вспомнить Z39.50, SMTP, FTP и HTTP. К проектированию стандартов имеет смысл относиться даже более внимательно, чем к проектированию баз данных. "Внимательно" в данном случае означает не "предусмотреть все возможные случаи", а обеспечить возможность изменений. Все равно предусмотреть все не удастся, а если и удастся, то этим все равно не станут пользоваться из за непомерной сложности. 

&lt;h3&gt;Код&lt;/h3&gt;
Срок жизни кода определяется сроком жизни требований и сроком жизни платформы. В любом случае, срок жизни прикладного кода составляет 5 -- 10 лет. К этому моменту он оказывается практически полнотью переписанным с нуля. Часто, код преписывают весь сразу, одновременно с переходом на современную платформу. Конечно, бывают и исключения. Чаще всего они связаны либо с неизменными в течение десятилетий требованиями, либо с очень высокой ценой апгрейда. Например, связанного с высокой ценой миграции данных. 

Код ядра живет дольше в силу того, что зависит не от зыбких пользовательских требований, а от технических ограничений. Однако и технические ограничения меняются: если раньше несколько процессоров встречались только в серьезных серверах, то теперь многоядерные процессоры добрались до ноутбуков. Даже если завтра ваши алгоритмы и не изменятся, не исключено, что им придется работать совсем в другой среде, что влечет за собой переписывание кода. 

&lt;h3&gt;Абстракции и модели данных&lt;/h3&gt;
Абстракции живут от нескольких минут до тех пор, пока их помнят или пока не придумают что-то получше. Двойная бухгалтерская запись была изобретена в XV веке, а используется по сей день, несмотря на то, что в эпоху компьютеров без нее легко можно обойтись. Даже если абстракция хреновая, она все равно не умирает. Слишком много всего от нее зависит. Тут и код, и привычки людей, и их внутрення картина мира. Если вы предложите бухгатерам отказаться от двойной записи, они вас съедят. Будьте осторожны, если ваша абстракция получит распространение, вы ее уже не остановите. 

&lt;h3&gt;Пользовательский интерфейс&lt;/h3&gt;
Пользовательский интерфейс протухает за 3-5 лет. Он подвержен тем же изменениям требований что и код, вдобавок новые интерфейсные технологии появляются ничуть не реже программных. Даже отличный интерфейс пятилетней давности выглядит малость устаревышим, а десятилетним интерфейсом современному человеку пользоваться неудобно, да и глаз режет. Метафоры за 10 лет успели сильно измениться. Если пользователи не могут сбежать, устаревший интерфейс удается сохранить два-три срока. Затем начинаются проблемы уже с поиском операторов, способных работать на таком старье.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-6732853911453907537?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/10/time-to-live.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-581699639375430362</guid><pubDate>Thu, 25 Sep 2008 11:02:00 +0000</pubDate><atom:updated>2008-09-25T18:39:26.405+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ICFP Contest</category><title /><description>&lt;h2&gt;ICFP Contest '08 Final results&lt;/h2&gt;
&lt;p&gt;На официальной странице &lt;a href="http://icfpcontest.org/results/final/"&gt;ICFP Contest&lt;/a&gt; выложены результаты, которые так долго ждали большевики. Было проведено 11 заездов, в результате которых был определен один победитель (Team Smartass) и 297 неудачников, которым не так повезло. К сожалению финальные карты еще не выложены, поэтому трудно сказать что пошло не так, но финалисты предыдущего чекпойнта "вылетели за ограждение". Как в прошлый раз, я подготовил таблицу с суммарными результатами. Команды отсортированы по количеству раундов, в которых они приняли участие независимо от результата. Команды, прошедшие одинаковое число раундов отсортированы по рейтингу. Напоминаю, чем меньше рейтинг, тем круче. Для каждой команды приведена статистика исходов по всем пяти заездам каждого раунда. В общем, можно меряться. Get it and use it well.
&lt;/p&gt;
&lt;p&gt;Моя команда называется Mosquito. Каким чудом она попала на 11 место, оставив позади страшных монстров, сам не понимаю. Видимо, новичкам везет.&lt;/p&gt;


&lt;table&gt;&lt;tr&gt;&lt;th&gt;#&lt;/th&gt;&lt;th&gt;Team&lt;/th&gt;&lt;th&gt;Rounds&lt;/th&gt;&lt;th&gt;Score&lt;/th&gt;&lt;th&gt;Home&lt;/th&gt;&lt;th&gt;Martian&lt;/th&gt;&lt;th&gt;Crater&lt;/th&gt;&lt;th&gt;Timeout&lt;/th&gt;&lt;th&gt;Error&lt;/th&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Team Smartass&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;512510&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;shinh&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;515370&lt;/td&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Error 404&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;541960&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;UBE&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;546000&lt;/td&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;LazyBear&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;556870&lt;/td&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;SzM&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;608630&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;souris aveugle&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;611620&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;frank324&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;643610&lt;/td&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;kstm.org&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;674530&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;fireinthedisco2&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;689400&lt;/td&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;strong&gt;11&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Mosquito&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;11&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;730040&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;41&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;5&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;1&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;Om Nom Nom Nom&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;743140&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;Giantslalom&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;748550&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;epriestley&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;765090&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;intelliarts&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;609050&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;cw&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;617070&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;The B-Team: 25/26ths as good as the A-Team&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;619280&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;Blue Iris&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;626860&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;Spore Sept 7th, only $49.99! Play Bejeweled @ popcap.com!&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;631580&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;team_bruno&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;649780&lt;/td&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;Hands Solo&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;652200&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;jabber.ru&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;654310&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;Celestial Dire Badger&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;659590&lt;/td&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;Side Effects May Include...&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;660740&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;Apathy Kings&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;665890&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;CNaml&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;672810&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;Cup&amp;lt;'t&amp;gt;&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;695250&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;TC2&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;703310&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;Team Meh&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;710430&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;Yeahbut&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;712870&lt;/td&gt;&lt;td&gt;43&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;td&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;716950&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;Purple Pointer Eaters&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;719560&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;TeamDJ&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;721200&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;ur 67P&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;723350&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;NMSU&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;732770&lt;/td&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;Actua&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;739020&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;Eger a Marson&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;739540&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;EdFred&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;742580&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;Arekuma&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;748030&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;little lemon&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;784960&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;Order of the Fridge&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;805310&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;HackerDom_1&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;442150&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;43&lt;/td&gt;&lt;td&gt;ais523&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;442380&lt;/td&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;ILL martians&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;448300&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;Sir Bedevere the Wise&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;450780&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;46&lt;/td&gt;&lt;td&gt;Kee&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;455360&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;Urxae&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;465070&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;Heklers&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;465790&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;Malfunctional Programmer&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;470250&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;477900&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;Slow&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;478020&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;LUHPI&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;484290&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;53&lt;/td&gt;&lt;td&gt;tidder&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;486570&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;54&lt;/td&gt;&lt;td&gt;elbereth@utmc&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;487230&lt;/td&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;Wile E.&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;492300&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;12a0&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;494180&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;PurelyFunctionalInfrastructure&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;501520&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;RHZ&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;501570&lt;/td&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;m1-speedygonzalez&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;515180&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;Five of Six&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;516800&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;61&lt;/td&gt;&lt;td&gt;Bobry&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;543260&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;a1k0n&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;553370&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;63&lt;/td&gt;&lt;td&gt;Team Sampou&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;572500&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;taxi driver&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;398800&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;65&lt;/td&gt;&lt;td&gt;BugbearR&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;411060&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;66&lt;/td&gt;&lt;td&gt;Dee Mon&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;428540&lt;/td&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;67&lt;/td&gt;&lt;td&gt;ayatuki&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;433350&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;68&lt;/td&gt;&lt;td&gt;HackerDom&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;434210&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;69&lt;/td&gt;&lt;td&gt;Too Simplicity and Beyond!&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;438920&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;I-cons-a-lot&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;448770&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;71&lt;/td&gt;&lt;td&gt;The Dibbies&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;448860&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;72&lt;/td&gt;&lt;td&gt;Hacking in the Rain&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;454330&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;73&lt;/td&gt;&lt;td&gt;Altair&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;462550&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;74&lt;/td&gt;&lt;td&gt;lazymonkeys&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;468020&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;75&lt;/td&gt;&lt;td&gt;'a infvec&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;471290&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;76&lt;/td&gt;&lt;td&gt;protocolocon&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;472150&lt;/td&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;77&lt;/td&gt;&lt;td&gt;Kharkiv MIND&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;479810&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;78&lt;/td&gt;&lt;td&gt;Begot&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;501070&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;79&lt;/td&gt;&lt;td&gt;Lazy elf&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;509630&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;astsmtl&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;313950&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;81&lt;/td&gt;&lt;td&gt;shitamachi no ue&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;319560&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;82&lt;/td&gt;&lt;td&gt;kounoike&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;323950&lt;/td&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;83&lt;/td&gt;&lt;td&gt;Java Jones and the Kingdom of the Crystal Crater&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;331520&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;84&lt;/td&gt;&lt;td&gt;TBD&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;331980&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;85&lt;/td&gt;&lt;td&gt;lepidum&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;333640&lt;/td&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;86&lt;/td&gt;&lt;td&gt;ktkr-cpp&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;339090&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;87&lt;/td&gt;&lt;td&gt;miyu&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;341220&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;88&lt;/td&gt;&lt;td&gt;Gcup&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;341560&lt;/td&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;89&lt;/td&gt;&lt;td&gt;Epsilon&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;353250&lt;/td&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;90&lt;/td&gt;&lt;td&gt;nanndemoiidesu&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;355670&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;91&lt;/td&gt;&lt;td&gt;pirapira&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;357200&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;92&lt;/td&gt;&lt;td&gt;barry, our driver, is reckless&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;366510&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;93&lt;/td&gt;&lt;td&gt;NAU ACM&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;372490&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;94&lt;/td&gt;&lt;td&gt;TheRoverers&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;373210&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;95&lt;/td&gt;&lt;td&gt;DotWeb&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;403330&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;96&lt;/td&gt;&lt;td&gt;SwtPl&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;403430&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;97&lt;/td&gt;&lt;td&gt;7-15&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;416680&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;Beer:Thirty&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;263510&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;Team DumbAss&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;278530&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;inforfun&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;278540&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;101&lt;/td&gt;&lt;td&gt;Team Lolemnity&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;284370&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;102&lt;/td&gt;&lt;td&gt;ntua 67P&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;285500&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;103&lt;/td&gt;&lt;td&gt;jan nasa&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;295270&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;104&lt;/td&gt;&lt;td&gt;Pear Programmers&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;295850&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;105&lt;/td&gt;&lt;td&gt;Christoph Breitkopf&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;297470&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;106&lt;/td&gt;&lt;td&gt;spotrover&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;297980&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;107&lt;/td&gt;&lt;td&gt;cashto&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;298450&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;108&lt;/td&gt;&lt;td&gt;The Weyburn Expatriates&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;299910&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;109&lt;/td&gt;&lt;td&gt;ORBIT&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;301320&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;110&lt;/td&gt;&lt;td&gt;Rhope Burn&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;301820&lt;/td&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;111&lt;/td&gt;&lt;td&gt;aruhimorinonaka&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;302020&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;112&lt;/td&gt;&lt;td&gt;green_tea&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;303570&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;113&lt;/td&gt;&lt;td&gt;Bob's Store&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;305870&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;114&lt;/td&gt;&lt;td&gt;WindowMakers &lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;307600&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;115&lt;/td&gt;&lt;td&gt;The Blind Hen&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;307990&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;116&lt;/td&gt;&lt;td&gt;bmm team&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;309570&lt;/td&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;117&lt;/td&gt;&lt;td&gt;Grasshoppers&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;309860&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;118&lt;/td&gt;&lt;td&gt;The Tcler&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;320610&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;119&lt;/td&gt;&lt;td&gt;ksk&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;321500&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;120&lt;/td&gt;&lt;td&gt;MIMUW 4060&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;325260&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;121&lt;/td&gt;&lt;td&gt;Florida Institute of Technology&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;325410&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;122&lt;/td&gt;&lt;td&gt;D&amp;D&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;327400&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;123&lt;/td&gt;&lt;td&gt;wjdogs&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;328260&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;124&lt;/td&gt;&lt;td&gt;Kerochan&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;329180&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;125&lt;/td&gt;&lt;td&gt;The Unchecked Exceptions&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;329930&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;126&lt;/td&gt;&lt;td&gt;In dumb we trust&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;335040&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;127&lt;/td&gt;&lt;td&gt;Curry On!&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;335190&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;128&lt;/td&gt;&lt;td&gt;KFL&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;335540&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;129&lt;/td&gt;&lt;td&gt;hibi@utmc.or.jp&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;336640&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;130&lt;/td&gt;&lt;td&gt;YBuzz&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;338630&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;131&lt;/td&gt;&lt;td&gt;Dragons&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;339210&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;132&lt;/td&gt;&lt;td&gt;Q42/Xopus&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;341840&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;133&lt;/td&gt;&lt;td&gt;Team Guyford&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;342030&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;134&lt;/td&gt;&lt;td&gt;Arsbit&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;351210&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;135&lt;/td&gt;&lt;td&gt;one canuck&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;354510&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;136&lt;/td&gt;&lt;td&gt;Chouser&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;355910&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;137&lt;/td&gt;&lt;td&gt;uguu.org&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;356690&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;138&lt;/td&gt;&lt;td&gt;midoj&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;367820&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;139&lt;/td&gt;&lt;td&gt;The Tweezer Minstrels&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;370960&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;140&lt;/td&gt;&lt;td&gt;bens&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;373000&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;141&lt;/td&gt;&lt;td&gt;apple2gs&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;378790&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;142&lt;/td&gt;&lt;td&gt;yarunee&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;381880&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;143&lt;/td&gt;&lt;td&gt;The Usual Suspects&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;382080&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;144&lt;/td&gt;&lt;td&gt;Ramen Holiday&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;383550&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;145&lt;/td&gt;&lt;td&gt;The Code Alchemists&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;384790&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;146&lt;/td&gt;&lt;td&gt;Team Rocket&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;389320&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;147&lt;/td&gt;&lt;td&gt;nekoneko &lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;393150&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;148&lt;/td&gt;&lt;td&gt;The Inmates&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;393770&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;149&lt;/td&gt;&lt;td&gt;camping gaz international&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;397790&lt;/td&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;solo r6&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;402650&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;151&lt;/td&gt;&lt;td&gt;GRoboCode&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;403340&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;152&lt;/td&gt;&lt;td&gt;ktkr-ocaml&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;411990&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;153&lt;/td&gt;&lt;td&gt;LazyBottoms&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;445710&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;154&lt;/td&gt;&lt;td&gt;spbsunt&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;176870&lt;/td&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;155&lt;/td&gt;&lt;td&gt;It's all about the Pentiums.&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;183290&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;156&lt;/td&gt;&lt;td&gt;Emory PChem&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;184270&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;157&lt;/td&gt;&lt;td&gt;Toasted Monkeys&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;186140&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;158&lt;/td&gt;&lt;td&gt;Le club des 5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;188750&lt;/td&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;159&lt;/td&gt;&lt;td&gt;suihan_jar&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;193440&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;160&lt;/td&gt;&lt;td&gt;Wobbla Team&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;193980&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;161&lt;/td&gt;&lt;td&gt;__ufo42&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;205480&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;162&lt;/td&gt;&lt;td&gt;Dis Functional&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;209550&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;163&lt;/td&gt;&lt;td&gt;POSTECH-PL&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;210090&lt;/td&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;164&lt;/td&gt;&lt;td&gt;The Higher Order Of Zeuxis&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;212910&lt;/td&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;165&lt;/td&gt;&lt;td&gt;Unary Operator&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;214170&lt;/td&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;166&lt;/td&gt;&lt;td&gt;POSCAT@POSTECH&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;222830&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;167&lt;/td&gt;&lt;td&gt;suzumiyaharuhiko&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;224050&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;168&lt;/td&gt;&lt;td&gt;Hidden Agenda&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;147770&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;169&lt;/td&gt;&lt;td&gt;Incompetent Design&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;148210&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;170&lt;/td&gt;&lt;td&gt;OCamlCore&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;153050&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;171&lt;/td&gt;&lt;td&gt;Knights of Cydonia&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;159050&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;172&lt;/td&gt;&lt;td&gt;Marcin Simonides&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;160540&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;173&lt;/td&gt;&lt;td&gt;td2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;160620&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;174&lt;/td&gt;&lt;td&gt;efg&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;161220&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;175&lt;/td&gt;&lt;td&gt;AntiCylonDefenseTeamImpersonator&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;161650&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;176&lt;/td&gt;&lt;td&gt;ikon&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;162730&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;177&lt;/td&gt;&lt;td&gt;o(ry&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;164470&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;178&lt;/td&gt;&lt;td&gt;bucchigiri&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;165230&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;179&lt;/td&gt;&lt;td&gt;Dylan Hackers&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;165310&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;180&lt;/td&gt;&lt;td&gt;Team Gales&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;165700&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;181&lt;/td&gt;&lt;td&gt;The Rover Routers&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;166900&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;182&lt;/td&gt;&lt;td&gt;Anairiats&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;167190&lt;/td&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;183&lt;/td&gt;&lt;td&gt;Tigerfunk&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;170840&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;184&lt;/td&gt;&lt;td&gt;dot-emacs&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;173780&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;185&lt;/td&gt;&lt;td&gt;Fly (Yaroslavl)&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;175800&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;186&lt;/td&gt;&lt;td&gt;K&amp;R&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;175840&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;187&lt;/td&gt;&lt;td&gt;Mostly Harmless&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;178490&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;188&lt;/td&gt;&lt;td&gt;AyaCFP&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;178530&lt;/td&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;189&lt;/td&gt;&lt;td&gt;putzen along&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;178740&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;190&lt;/td&gt;&lt;td&gt;Enoch Root&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;179780&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;191&lt;/td&gt;&lt;td&gt;futurelabs&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;180990&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;192&lt;/td&gt;&lt;td&gt;Molotov Mocktail&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;186430&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;193&lt;/td&gt;&lt;td&gt;Servants of Barsoom&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;187290&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;194&lt;/td&gt;&lt;td&gt;NetHack&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;187550&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;195&lt;/td&gt;&lt;td&gt;Ruby Team&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;187930&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;196&lt;/td&gt;&lt;td&gt;Almaya&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;188130&lt;/td&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;197&lt;/td&gt;&lt;td&gt;gassa &amp; toxa&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;193000&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;198&lt;/td&gt;&lt;td&gt;(defun friends)&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;107180&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;199&lt;/td&gt;&lt;td&gt;The Lone TeXnician&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;107700&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;hogelog&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;108370&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;201&lt;/td&gt;&lt;td&gt;Insane Closure Posse&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;111800&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;202&lt;/td&gt;&lt;td&gt;Macrott&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;113310&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;203&lt;/td&gt;&lt;td&gt;Blazing Saddles&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;115370&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;204&lt;/td&gt;&lt;td&gt;yet another team&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;115550&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;205&lt;/td&gt;&lt;td&gt;honey_rooibos&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;116140&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;206&lt;/td&gt;&lt;td&gt;Evil Geniuses For a Better Tomorrow&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;117360&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;207&lt;/td&gt;&lt;td&gt;TeamNewshamBros&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;117630&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;208&lt;/td&gt;&lt;td&gt;Illudium Q-36 Explosive Space Modulator&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;118060&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;209&lt;/td&gt;&lt;td&gt;Giver&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;118500&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;210&lt;/td&gt;&lt;td&gt;rmathew&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;119120&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;211&lt;/td&gt;&lt;td&gt;SIMAP&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;119570&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;212&lt;/td&gt;&lt;td&gt;eugene_jeff&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;122240&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;213&lt;/td&gt;&lt;td&gt;polka&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;124300&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;214&lt;/td&gt;&lt;td&gt;Func-n-stein&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;125140&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;215&lt;/td&gt;&lt;td&gt;EddieHasNoPreferenceForName &lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;126480&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;216&lt;/td&gt;&lt;td&gt;Xebia&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;128110&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;217&lt;/td&gt;&lt;td&gt;Bad Science&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;129430&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;218&lt;/td&gt;&lt;td&gt;Stern Types &lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;130400&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;219&lt;/td&gt;&lt;td&gt;siti&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;132470&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;220&lt;/td&gt;&lt;td&gt;panard_groumpf&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;134380&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;221&lt;/td&gt;&lt;td&gt;SugarSun&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;134660&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;222&lt;/td&gt;&lt;td&gt;mfp&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;135860&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;223&lt;/td&gt;&lt;td&gt;NCSU ARC Alums&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;136960&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;224&lt;/td&gt;&lt;td&gt;The Bobcat Hackers&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;138980&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;225&lt;/td&gt;&lt;td&gt;Knights of the Crescent Moon&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;140250&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;226&lt;/td&gt;&lt;td&gt;isobe&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;140660&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;227&lt;/td&gt;&lt;td&gt;EarthFusion&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;144310&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;228&lt;/td&gt;&lt;td&gt;Epic Fail&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;146750&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;229&lt;/td&gt;&lt;td&gt;plai&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;147620&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;230&lt;/td&gt;&lt;td&gt;ozy4dm&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;157370&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;231&lt;/td&gt;&lt;td&gt;wheezards&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;57930&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;232&lt;/td&gt;&lt;td&gt;Soul Trader&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;77580&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;233&lt;/td&gt;&lt;td&gt;404 NOT FOUND&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;78470&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;234&lt;/td&gt;&lt;td&gt;WE NEED A TEAM NAME&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;78540&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;235&lt;/td&gt;&lt;td&gt;Not a Number&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;78910&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;236&lt;/td&gt;&lt;td&gt;Stanfy&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;79440&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;237&lt;/td&gt;&lt;td&gt;Bloody Camls&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;79500&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;238&lt;/td&gt;&lt;td&gt;Team Sparrow&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;79740&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;239&lt;/td&gt;&lt;td&gt;Too much free time&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;80430&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;240&lt;/td&gt;&lt;td&gt;Linkage Failure&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;80660&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;241&lt;/td&gt;&lt;td&gt;kt3k&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;81230&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;242&lt;/td&gt;&lt;td&gt;Suzumiya Haruhiko wo Ooini Shizumeru Fullbocco-dan&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;81960&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;243&lt;/td&gt;&lt;td&gt;University of Western Australia&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;83980&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;244&lt;/td&gt;&lt;td&gt;Littlechina&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;84830&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;245&lt;/td&gt;&lt;td&gt;Drifter's Revenge&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;85150&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;246&lt;/td&gt;&lt;td&gt;Erraen&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;85860&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;247&lt;/td&gt;&lt;td&gt;cthulhuivore&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;86940&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;248&lt;/td&gt;&lt;td&gt;ktkr-java&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;89390&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;249&lt;/td&gt;&lt;td&gt;Ocamlman&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;89500&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;250&lt;/td&gt;&lt;td&gt;Team Cow&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;90130&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;251&lt;/td&gt;&lt;td&gt;Rhinos&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;90200&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;252&lt;/td&gt;&lt;td&gt;Cup&amp;lt;T&amp;gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92040&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;253&lt;/td&gt;&lt;td&gt;The Chun Council&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92340&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;254&lt;/td&gt;&lt;td&gt;FUN&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92460&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;255&lt;/td&gt;&lt;td&gt;ICSkies of Blue and F(P)&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92550&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;Felspar&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92560&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;257&lt;/td&gt;&lt;td&gt;Happy Camels&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92670&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;258&lt;/td&gt;&lt;td&gt;The Teddyborg&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92850&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;259&lt;/td&gt;&lt;td&gt;drunken ants&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92860&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;260&lt;/td&gt;&lt;td&gt;foognostic&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;92950&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;261&lt;/td&gt;&lt;td&gt;Marti&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;93070&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;262&lt;/td&gt;&lt;td&gt;StreetMagic&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;94650&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;263&lt;/td&gt;&lt;td&gt;Cal Poly Pomona Computer Science Society&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;97530&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;264&lt;/td&gt;&lt;td&gt;nishiohirokazu&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;98510&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;265&lt;/td&gt;&lt;td&gt;United Coding Team&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;98880&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;266&lt;/td&gt;&lt;td&gt;KuntbucketsAndKuntrags&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;100630&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;267&lt;/td&gt;&lt;td&gt;Turn Right Left&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;100670&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;268&lt;/td&gt;&lt;td&gt;mazeSolver@UTMC&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;102330&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;269&lt;/td&gt;&lt;td&gt;Schwarzschild&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;107120&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;270&lt;/td&gt;&lt;td&gt;gpfault id-alex &lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;107250&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;271&lt;/td&gt;&lt;td&gt;aalto high school&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;115320&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;272&lt;/td&gt;&lt;td&gt;The Dudes&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;115510&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;273&lt;/td&gt;&lt;td&gt;Engineers Without Boulders&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;116710&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;274&lt;/td&gt;&lt;td&gt;The Al-Gore-Rhythms AKA The Doug Boat&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;117700&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;275&lt;/td&gt;&lt;td&gt;Team_XIII &lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;119200&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;276&lt;/td&gt;&lt;td&gt;The Armstrongs&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;124310&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;277&lt;/td&gt;&lt;td&gt;casillero del diablo&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;125570&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;278&lt;/td&gt;&lt;td&gt;gzoluble&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;130690&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;279&lt;/td&gt;&lt;td&gt;Chvex Stucture&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;148470&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;280&lt;/td&gt;&lt;td&gt;SATiriker&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;36160&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;281&lt;/td&gt;&lt;td&gt;The unmoving notogawa&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;282&lt;/td&gt;&lt;td&gt;Monkeyget&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;283&lt;/td&gt;&lt;td&gt;Sim&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;284&lt;/td&gt;&lt;td&gt;P Squared&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;285&lt;/td&gt;&lt;td&gt;gb&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;286&lt;/td&gt;&lt;td&gt;mokehehe &lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;287&lt;/td&gt;&lt;td&gt;ocaml users anonymous&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;288&lt;/td&gt;&lt;td&gt;LISA~HackLab-FI&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;289&lt;/td&gt;&lt;td&gt;zetafish&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;290&lt;/td&gt;&lt;td&gt;Puddingforce&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;291&lt;/td&gt;&lt;td&gt;Chicago Blubs&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;42300&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;292&lt;/td&gt;&lt;td&gt;Nodal Asymmetry&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;84000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;293&lt;/td&gt;&lt;td&gt;incognito&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;84000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;294&lt;/td&gt;&lt;td&gt;Monadic Cows&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;84000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;295&lt;/td&gt;&lt;td&gt;Late Ocamler&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;84000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;296&lt;/td&gt;&lt;td&gt;Rufus2&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;84000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;297&lt;/td&gt;&lt;td&gt;greedy&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;84000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;298&lt;/td&gt;&lt;td&gt;The Shiniest of Heisenbugs&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;84000&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-581699639375430362?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/09/icfp-contest-08-final-results-icfp.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-6112544087976407966</guid><pubDate>Mon, 08 Sep 2008 07:45:00 +0000</pubDate><atom:updated>2008-09-08T14:42:56.374+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Закон больших&amp;nbsp;чисел&lt;/h2&gt;
&lt;p&gt;В&amp;nbsp;теории вероятностей есть такая штука, которую математики называют законом больших чисел. Штука эта фундаментальная, поскольку устанавливает связь между теоретическими расчетами и&amp;nbsp;экспериментом. Для программистов у&amp;nbsp;этого закона есть одно важное следствие, не&amp;nbsp;менее&amp;nbsp;фундаментальное:&lt;/p&gt;
&lt;blockquote&gt;На&amp;nbsp;большой выборке даже маловероятные события становятся&amp;nbsp;наблюдаемыми.&lt;/blockquote&gt;
&lt;p&gt;На&amp;nbsp;практике этот закон означает полную неприменимость &amp;laquo;наивной&amp;raquo; аналитики и, как следствие, &amp;laquo;наивного&amp;raquo; тестирования при проектировании информационных систем. Если не&amp;nbsp;предусмотреть редкие случаи ещё при проектировании они больно стукнут на&amp;nbsp;стадии эксплуатации, причем далеко не&amp;nbsp;сразу, а&amp;nbsp;лишь по&amp;nbsp;прошествии некоторого инкубационного периода. Это чревато хотя&amp;nbsp;бы тем, что багфиксинг на&amp;nbsp;внедренной системе, в&amp;nbsp;которой уже накоплен значительный объем данных&amp;nbsp;&amp;mdash; отдельное&amp;nbsp;развлечение.&lt;/p&gt;
&lt;p&gt;Ещё одно проявление Закона больших чисел в&amp;nbsp;том, что невозможно построить информационную систему гарантированно не&amp;nbsp;содержащую ошибок в&amp;nbsp;данных. Простой пример: Оператор вводит данные вручную. Оператор не&amp;nbsp;идеален, поэтому он&amp;nbsp;делает одну ошибку на&amp;nbsp;100 записей. Это означает, что на&amp;nbsp;1&amp;nbsp;000&amp;nbsp;000 введенных записей будет порядка 10&amp;nbsp;000 ошибок. Поскольку такое количество ошибок нас не&amp;nbsp;устраивает, мы&amp;nbsp;садим поверх оператора контроллера, который будет проверять правильность ввода. Пусть контроллер более внимателен и&amp;nbsp;продуктивен, однако и&amp;nbsp;он&amp;nbsp;не&amp;nbsp;идеален, поэтому допускает одну ошибку на&amp;nbsp;1000 записей. Тогда вероятность ошибки снижается&amp;nbsp;до&amp;nbsp;10&lt;sup&gt;-5&lt;/sup&gt; на&amp;nbsp;запись. Однако, на&amp;nbsp;миллионе записей это даст примерно 10 ошибок. Если количество данных неограниченно растет, а&amp;nbsp;так бывает почти всегда, никаким контролем не&amp;nbsp;добиться гарантированного отсутствия ошибок. Даже оценить вероятность ошибки и&amp;nbsp;то&amp;nbsp;не&amp;nbsp;всегда возможно. Люди не&amp;nbsp;механические приборы, к&amp;nbsp;ним паспортов точности&amp;nbsp;не&amp;nbsp;полагается.&lt;/p&gt;
&lt;p&gt;&lt;nobr&gt;По-хорошему&lt;/nobr&gt;, при проектировании хоть &lt;nobr&gt;сколько-то&lt;/nobr&gt; сложных информационных систем нужно анализировать источники ошибок и&amp;nbsp;оценивать их&amp;nbsp;количество в&amp;nbsp;накопленных данных, однако я&amp;nbsp;не&amp;nbsp;слышал, чтобы &lt;nobr&gt;кто-нибудь&lt;/nobr&gt; всерьез этим заботился. Поэтому, используя чужие данные, вы&amp;nbsp;чаще всего ничего не&amp;nbsp;можете сказать об&amp;nbsp;их&amp;nbsp;качестве. С&amp;nbsp;этой проблемой поступают одним из&amp;nbsp;трех&amp;nbsp;способов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Признают, что качество данных не&amp;nbsp;имеет значения для&amp;nbsp;бизнеса;&lt;/li&gt;
&lt;li&gt;Контролируют качество собственными&amp;nbsp;силами;&lt;/li&gt;
&lt;li&gt;Выбирают один из&amp;nbsp;наборов данных и&amp;nbsp;признают его&amp;nbsp;эталонным.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Это всего лишь частные эффекты. На&amp;nbsp;практике достаточно хорошо осознавать, что чем больше данных, тем сильнее проявляется Закон больших чисел, влияние которого нужно учитывать при проектировании, в&amp;nbsp;разработке&amp;nbsp;и&amp;nbsp;в&amp;nbsp;тестировании.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-6112544087976407966?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/08/blog-post.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-8622135224906260646</guid><pubDate>Mon, 11 Aug 2008 11:07:00 +0000</pubDate><atom:updated>2008-08-16T11:01:36.737+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ICFP Contest</category><title /><description>&lt;h2&gt;ICFP '08&amp;nbsp;Results&lt;/h2&gt;
&lt;p&gt;Опубликованы &lt;a href="http://icfpcontest.org/results/final/"&gt;результыты первых восьми&amp;nbsp;заездов&lt;/a&gt;. Для удобства фаллометрии свел все в&amp;nbsp;одну табличку. Get it&amp;nbsp;and use&amp;nbsp;it&amp;nbsp;well.&lt;/p&gt;
&lt;p&gt;Score&amp;nbsp;&amp;mdash; сумма по&amp;nbsp;всем восьми&amp;nbsp;заездам.&lt;/p&gt;
&lt;p&gt;Команды не&amp;nbsp;допущенные до&amp;nbsp;девятого заезда в&amp;nbsp;табличку&amp;nbsp;не&amp;nbsp;включены.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD:&lt;/strong&gt; Добавил восьмой заезд. Плюс организаторы вернули еще 16 команд, дисквалифицированных по техническим причинам.&lt;/p&gt;
&lt;table&gt;&lt;tr&gt;&lt;th&gt;Team&lt;/th&gt;&lt;th&gt;Score&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;UBE&lt;/td&gt;&lt;td&gt;327090&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;td&lt;/td&gt;&lt;td&gt;329520&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;Celestial Dire Badger&lt;/td&gt;&lt;td&gt;330350&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Hands Solo&lt;/td&gt;&lt;td&gt;330560&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;Blue Iris&lt;/td&gt;&lt;td&gt;331800&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;Team Meh&lt;/td&gt;&lt;td&gt;332900&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;shinh&lt;/td&gt;&lt;td&gt;333270&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;NMSU&lt;/td&gt;&lt;td&gt;333390&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;team_bruno&lt;/td&gt;&lt;td&gt;333590&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;Team Smartass&lt;/td&gt;&lt;td&gt;334470&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;CNaml&lt;/td&gt;&lt;td&gt;334680&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;12&lt;/td&gt;&lt;td&gt;Error 404&lt;/td&gt;&lt;td&gt;334770&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;13&lt;/td&gt;&lt;td&gt;cw&lt;/td&gt;&lt;td&gt;336130&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;14&lt;/td&gt;&lt;td&gt;HackerDom_1&lt;/td&gt;&lt;td&gt;336740&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;Actua&lt;/td&gt;&lt;td&gt;337670&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;16&lt;/td&gt;&lt;td&gt;ILL martians&lt;/td&gt;&lt;td&gt;337870&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;17&lt;/td&gt;&lt;td&gt;Yeahbut&lt;/td&gt;&lt;td&gt;338630&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;18&lt;/td&gt;&lt;td&gt;fireinthedisco2&lt;/td&gt;&lt;td&gt;340290&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;19&lt;/td&gt;&lt;td&gt;ais523&lt;/td&gt;&lt;td&gt;340450&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;Arekuma&lt;/td&gt;&lt;td&gt;341070&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;21&lt;/td&gt;&lt;td&gt;TC2&lt;/td&gt;&lt;td&gt;341190&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;22&lt;/td&gt;&lt;td&gt;elbereth@utmc&lt;/td&gt;&lt;td&gt;341290&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;23&lt;/td&gt;&lt;td&gt;Spore Sept 7th, only $49.99! Play Bejeweled @ popcap.com!&lt;/td&gt;&lt;td&gt;341510&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;24&lt;/td&gt;&lt;td&gt;Apathy Kings&lt;/td&gt;&lt;td&gt;342900&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;LazyBear&lt;/td&gt;&lt;td&gt;347940&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;26&lt;/td&gt;&lt;td&gt;SzM&lt;/td&gt;&lt;td&gt;348090&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;27&lt;/td&gt;&lt;td&gt;Wile E.&lt;/td&gt;&lt;td&gt;352650&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;28&lt;/td&gt;&lt;td&gt;Sir Bedevere the Wise&lt;/td&gt;&lt;td&gt;353750&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;29&lt;/td&gt;&lt;td&gt;TeamDJ&lt;/td&gt;&lt;td&gt;353980&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;Kee&lt;/td&gt;&lt;td&gt;355170&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;31&lt;/td&gt;&lt;td&gt;jabber.ru&lt;/td&gt;&lt;td&gt;356170&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;frank324&lt;/td&gt;&lt;td&gt;356270&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;Urxae&lt;/td&gt;&lt;td&gt;358030&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;34&lt;/td&gt;&lt;td&gt;Malfunctional Programmer&lt;/td&gt;&lt;td&gt;358770&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;Heklers&lt;/td&gt;&lt;td&gt;359580&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;36&lt;/td&gt;&lt;td&gt;PurelyFunctionalInfrastructure&lt;/td&gt;&lt;td&gt;361340&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;37&lt;/td&gt;&lt;td&gt;Cup&lt;'t&gt;&lt;/td&gt;&lt;td&gt;362370&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;38&lt;/td&gt;&lt;td&gt;Side Effects May Include...&lt;/td&gt;&lt;td&gt;362960&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;39&lt;/td&gt;&lt;td&gt;Purple Pointer Eaters&lt;/td&gt;&lt;td&gt;363780&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;intelliarts&lt;/td&gt;&lt;td&gt;365870&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;41&lt;/td&gt;&lt;td&gt;Slow&lt;/td&gt;&lt;td&gt;366260&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;EdFred&lt;/td&gt;&lt;td&gt;367150&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;43&lt;/td&gt;&lt;td&gt;42&lt;/td&gt;&lt;td&gt;367510&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;44&lt;/td&gt;&lt;td&gt;The B-Team: 25/26ths as good as the A-Team&lt;/td&gt;&lt;td&gt;371520&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;45&lt;/td&gt;&lt;td&gt;a1k0n&lt;/td&gt;&lt;td&gt;373610&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;46&lt;/td&gt;&lt;td&gt;RHZ&lt;/td&gt;&lt;td&gt;373950&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;47&lt;/td&gt;&lt;td&gt;souris aveugle&lt;/td&gt;&lt;td&gt;374140&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;48&lt;/td&gt;&lt;td&gt;LUHPI&lt;/td&gt;&lt;td&gt;374310&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;49&lt;/td&gt;&lt;td&gt;little lemon&lt;/td&gt;&lt;td&gt;375620&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;kstm.org&lt;/td&gt;&lt;td&gt;376070&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;51&lt;/td&gt;&lt;td&gt;m1-speedygonzalez&lt;/td&gt;&lt;td&gt;377810&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;52&lt;/td&gt;&lt;td&gt;Team Sampou&lt;/td&gt;&lt;td&gt;378210&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;53&lt;/td&gt;&lt;td&gt;Five of Six&lt;/td&gt;&lt;td&gt;378920&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;54&lt;/td&gt;&lt;td&gt;Mosquito&lt;/td&gt;&lt;td&gt;381240&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;55&lt;/td&gt;&lt;td&gt;Eger a Marson&lt;/td&gt;&lt;td&gt;381530&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;56&lt;/td&gt;&lt;td&gt;ur 67P&lt;/td&gt;&lt;td&gt;385050&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;57&lt;/td&gt;&lt;td&gt;tidder&lt;/td&gt;&lt;td&gt;385790&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;58&lt;/td&gt;&lt;td&gt;12a0&lt;/td&gt;&lt;td&gt;389440&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;59&lt;/td&gt;&lt;td&gt;Giantslalom&lt;/td&gt;&lt;td&gt;390270&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;60&lt;/td&gt;&lt;td&gt;epriestley&lt;/td&gt;&lt;td&gt;408520&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;61&lt;/td&gt;&lt;td&gt;Om Nom Nom Nom&lt;/td&gt;&lt;td&gt;409070&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;62&lt;/td&gt;&lt;td&gt;Bobry&lt;/td&gt;&lt;td&gt;412030&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-8622135224906260646?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/08/icfp-08-results.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">6</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-5637543620499200992</guid><pubDate>Tue, 29 Jul 2008 11:41:00 +0000</pubDate><atom:updated>2008-08-11T18:06:51.055+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Nomen est&amp;nbsp;omen&lt;/h2&gt;
&lt;p&gt;Представим себе гипотетическую ситуацию: некий &lt;nobr&gt;юноша-с-косичкой&lt;/nobr&gt; подрядился писать программу. Ну&amp;nbsp;хотя&amp;nbsp;бы учет посетителей в&amp;nbsp;библиотеке. (Ещё ни&amp;nbsp;одной приличной не&amp;nbsp;видел) И&amp;nbsp;вот доходят у&amp;nbsp;него руки до&amp;nbsp;учета пользователей и&amp;nbsp;он&amp;nbsp;радостно создает в&amp;nbsp;базе табличку visitors {firstName, lastName, middleName}. А&amp;nbsp;что, у&amp;nbsp;всех буквально есть фамилия, имя и&amp;nbsp;отчество. Вот у&amp;nbsp;его знакомых в&amp;nbsp;родном Крыжополе точно у&amp;nbsp;всех. Да&amp;nbsp;и&amp;nbsp;&lt;nobr&gt;девочка-библиотекарь&lt;/nobr&gt;, которая заместо аналитика, говорит что так правильно. И&amp;nbsp;вот поступает такая система в&amp;nbsp;эксплуатацию. А&amp;nbsp;там кого только нет: и&amp;nbsp;&lt;nobr&gt;Александров-Погорельский&lt;/nobr&gt;,&amp;nbsp;Ли Син Цин, и&amp;nbsp;Хосе Луис Мария Педро Фернандос. И&amp;nbsp;вот мучаются библиотекари, стараясь всунуть чуждые имена в&amp;nbsp;прокрустово ложе программы, сыплются проклятья и&amp;nbsp;летят в&amp;nbsp;сторону незадачливого юноши лучики&amp;nbsp;поноса.&lt;/p&gt;
&lt;p&gt;Произошло это потому, что незадачливый программист не&amp;nbsp;разобрался в&amp;nbsp;сути моделируемых явлений. На&amp;nbsp;больших объемах данных такой подход очень редко сходит с&amp;nbsp;рук&amp;nbsp;&amp;mdash; всегда найдутся выпадающие данные, даже если на&amp;nbsp;первый взгляд их&amp;nbsp;быть не&amp;nbsp;должно. Хороший пример: тройные фамилии вроде&amp;nbsp;бы как запрещены законодательно, по&amp;nbsp;крайней мере просто так её&amp;nbsp;взять не&amp;nbsp;получится. Возникает соблазн добавить проверку, и&amp;nbsp;соблазн довольно опасный. Вероятность того, что системе попадется человек с&amp;nbsp;тройной фамилией довольно велика на&amp;nbsp;большой выборке. Аллах знает, как у&amp;nbsp;них это получается, но&amp;nbsp;сменить человеку фамилию можно только через&amp;nbsp;суд.&lt;/p&gt;
&lt;p&gt;Ещё одна распространенная ошибка&amp;nbsp;&amp;mdash; трактовать отчество как &lt;nobr&gt;middle-name&lt;/nobr&gt;. Мне попадался даже один декан, который подписывался Boris A. Gladkih, видимо, не&amp;nbsp;подозревая, что читается это как Борис Афанасий Гладких, что суть нонсенс. Второе имя это именно самостоятельное имя, которое можно использовать отдельно, пусть даже оно и&amp;nbsp;дается в&amp;nbsp;честь отца или деда. Отчество&amp;nbsp;же без имени употребляется исключительно в&amp;nbsp;качестве прозвища и&amp;nbsp;только отдельно от&amp;nbsp;фамилии: &amp;laquo;Кузмич&amp;nbsp;&amp;mdash; за&amp;nbsp;пивом пойдет&amp;raquo;. На&amp;nbsp;эти грабли качественно наступили создатели формата&amp;nbsp;fb2.&lt;/p&gt;
&lt;p&gt;В&amp;nbsp;наш век всеобщей глобализации правильнее не&amp;nbsp;задумываться над традициями присвоения имен, а&amp;nbsp;признать, что человек может сам выбрать как ему называться. Технологически, ничего сложного в&amp;nbsp;этом нет, если только вы&amp;nbsp;не&amp;nbsp;хотите поддерживать все возможные традиции именования. Зато, если завтра к&amp;nbsp;вам придет посетитель, у&amp;nbsp;которого в&amp;nbsp;паспорте написано &amp;laquo;БОЧ рВФ 260602 Вячеславович &lt;nobr&gt;Воронин-Фролов&lt;/nobr&gt;&amp;raquo; вы&amp;nbsp;будете к&amp;nbsp;этому&amp;nbsp;готовы.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-5637543620499200992?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/07/nomen-est.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-5263470648290439991</guid><pubDate>Wed, 16 Jul 2008 10:19:00 +0000</pubDate><atom:updated>2008-09-25T18:15:20.489+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ICFP Contest</category><title /><description>&lt;h2&gt;ICFP '08&amp;nbsp;Contest&lt;/h2&gt;
&lt;p&gt;Контест завершился, завалы на&amp;nbsp;работе разобраны, настало время небольшого отчета, &lt;nobr&gt;куда-ж&lt;/nobr&gt; без&amp;nbsp;него.&lt;/p&gt;
&lt;h3&gt;Preambula&lt;/h3&gt;
&lt;p&gt;Про ICFP contest я&amp;nbsp;узнал начитавшись отчетов и&amp;nbsp;сразуже захотел попробовать. Этот контест выгодно отличается от&amp;nbsp;ненавистных мне &amp;laquo;академических&amp;raquo; олимпиад и&amp;nbsp;их&amp;nbsp;идиотскими заданиями, не&amp;nbsp;имеющими ни&amp;nbsp;малейшего отношения к&amp;nbsp;реальности. Поскольку по&amp;nbsp;одним субъективными отчетам трудно достоверно оценить явление было решено потрогать воду лапкой прежде чем готовиться к&amp;nbsp;участвовать всерьез. Что и&amp;nbsp;было проделано с&amp;nbsp;величайшим удовольствием. Однако, некоторую подготовку я&amp;nbsp;все&amp;nbsp;же провел: настроил NetBeans с&amp;nbsp;Ruby, создал необходимую структуру папок для проекта, поднял на&amp;nbsp;всякий случай Linux под виртуальной машиной, скачал и&amp;nbsp;запустил&amp;nbsp;LiveCD&lt;/p&gt;
&lt;h3&gt;Day 0.&amp;nbsp;Landing&lt;/h3&gt;
&lt;p&gt;За&amp;nbsp;час до&amp;nbsp;начала вылезаю на&amp;nbsp;канал&amp;nbsp;&lt;code&gt;#&lt;nobr&gt;icfp-contest&lt;/nobr&gt;&lt;/code&gt; и&amp;nbsp;наблюдаю там больше 200 человек. С&amp;nbsp;трудом дожидаюсь публикации задания. Большого смысла в&amp;nbsp;этом нет, но&amp;nbsp;хочется уже прочесть его, составить план штурма и&amp;nbsp;отправится спать. Время &lt;nobr&gt;из-за&lt;/nobr&gt; разницы во&amp;nbsp;времени довольно позднее. В&amp;nbsp;час &amp;laquo;X&amp;raquo; вся эта толпа, коей набралось уже за&amp;nbsp;300 человек радостно тянется качать задание и&amp;nbsp;на&amp;nbsp;несколько минут роняет сервер. Наконец я&amp;nbsp;добираюсь до&amp;nbsp;нужного документа и&amp;nbsp;погружаюсь в&amp;nbsp;чтение. Итак, задача этого года, в&amp;nbsp;моем кратком&amp;nbsp;изложении&lt;/p&gt;
&lt;blockquote&gt;
Есть квадратное поле заданных размеров, представляющее поверхность Марса. На&amp;nbsp;поверхности&amp;nbsp;имеются:
&lt;ol&gt;
&lt;li&gt;кратеры, в&amp;nbsp;которые можно упасть, насмерть,&amp;nbsp;много;&lt;/li&gt;
&lt;li&gt;валуны, о&amp;nbsp;которые можно стукнуться, больно, тоже&amp;nbsp;много;&lt;/li&gt;
&lt;li&gt;марсиане, которые норовят сожрать, самоходные,&amp;nbsp;много;&lt;/li&gt;
&lt;li&gt;база, дружественная,&amp;nbsp;одна;&lt;/li&gt;
&lt;li&gt;марсоход, свой,&amp;nbsp;один.&lt;/li&gt;
&lt;/ol&gt;
На&amp;nbsp;поверхность в&amp;nbsp;произвольной точке высаживают марсоход (с&amp;nbsp;довольно реалистичной физической моделью) для которого нужно написать программу управления (общающуюся с&amp;nbsp;сервером по&amp;nbsp;TCP/IP), приводящую его к&amp;nbsp;базе в&amp;nbsp;обход кратеров, валунов и&amp;nbsp;марсиан. Соревноваться в&amp;nbsp;итоге будут программы между собой, у&amp;nbsp;кого лучше, тот&amp;nbsp;и&amp;nbsp;победитель.
В&amp;nbsp;деталях, &lt;a href="http://smlnj.org/icfp08-contest/task.html"&gt;оригинал на&amp;nbsp;12&amp;nbsp;страницах&lt;/a&gt;.
&lt;/blockquote&gt;
&lt;p&gt;Прочитав задание, понимаю, что Ruby тут не&amp;nbsp;при делах. Марсоход&amp;nbsp;&amp;mdash; железка глупая, не&amp;nbsp;станет ждать пока досчитается, укатится к&amp;nbsp;черту на&amp;nbsp;рога. Решаю применить запасной вариант и&amp;nbsp;использовать Java. Пока разворачивается IDE, лезу качать симулятор, но&amp;nbsp;его ещё не&amp;nbsp;выложили. Основных проблем в&amp;nbsp;задании видится&amp;nbsp;три:
1) Сетевой&amp;nbsp;протокол;
2) Алгоритм&amp;nbsp;управления;
3) Визуализатор для&amp;nbsp;отладки.
За&amp;nbsp;пару часов реализую сетевой протокол, описываю необходимые структуры данных и&amp;nbsp;с&amp;nbsp;чистой совестью отправляюсь&amp;nbsp;спать&lt;/p&gt;
&lt;h3&gt;Day 1. Doctrine:&amp;nbsp;Mobility&lt;/h3&gt;
&lt;p&gt;Пока я&amp;nbsp;спал, организаторы выложили симулятор, а&amp;nbsp;участники в&amp;nbsp;чате и&amp;nbsp;рассылке развели невообразимый флейм. Быстро скачав симулятор, проверяю свой код. Сетевой протокол работает без отладки. В&amp;nbsp;симуляторе оказывается встроенный визуализатор, так что от&amp;nbsp;одной задачи я&amp;nbsp;на&amp;nbsp;некоторое время избавлен. Несколько часов уходит на&amp;nbsp;то, чтобы научить марсоход ехать в&amp;nbsp;заданную точку. Дело продвигается медленно, потому как тригонометрию я&amp;nbsp;напрочь забыл, уж&amp;nbsp;слишком давно не&amp;nbsp;делал ничего подобного. Когда первая карта проходит отправляюсь кататься на&amp;nbsp;велосипеде, а&amp;nbsp;вечером принимаюсь за&amp;nbsp;объезд препятствий. Лобовое решение, отворачивать от&amp;nbsp;препятствия расположенного в&amp;nbsp;опасном угле по&amp;nbsp;курсу работает плохо. Объехав первый кратер, марсоход сослепу ухает во&amp;nbsp;второй. Мне подкидывают идею, предсказывать положение марсохода на&amp;nbsp;несколько ходов. Решаю заняться этим завтра и&amp;nbsp;отправляюсь&amp;nbsp;спать.&lt;/p&gt;
&lt;h3&gt;Day 2. Doctrine:&amp;nbsp;Flexibility&lt;/h3&gt;
&lt;p&gt;Со&amp;nbsp;вчерашнего дня обнаружилась ещё одна проблема: перерегуляция, приводящая к&amp;nbsp;том, что марсоход пролетает мимо базы. Решил сперва побороть её&amp;nbsp;и&amp;nbsp;ввел эвристики, запрещающие крутые повороты вдали от&amp;nbsp;базы для наведения на&amp;nbsp;цель. С&amp;nbsp;предсказанием все плохо, марсоход едет довольно паршиво, часто падает в&amp;nbsp;кратеры и&amp;nbsp;стукается о&amp;nbsp;валуны. Приседания с&amp;nbsp;параметрами дают немного. Это продолжается до&amp;nbsp;тех пор, пока я&amp;nbsp;не&amp;nbsp;начинаю проверять точность предсказаний в&amp;nbsp;реальном времени. Сперва обнаруживается, что я&amp;nbsp;забыл учесть трение и&amp;nbsp;предсказания скорости не&amp;nbsp;слишком точны. Добавив систему оценки трения и&amp;nbsp;ускорения, получаю точность предсказания скорости до&amp;nbsp;четвертого знака. Выглядит хорошо, но&amp;nbsp;точность предсказания расстояния не&amp;nbsp;изменилась. Проверяю расчеты калькулятором и&amp;nbsp;обнаруживаю, что &lt;code&gt;java.lang.Math&lt;/code&gt; принимает аргументы синусов и&amp;nbsp;косинусов в&amp;nbsp;радианах, а&amp;nbsp;я&amp;nbsp;считаю углы в&amp;nbsp;градусах. Правлю и&amp;nbsp;точность hgtlcrfpfybq достигает требуемой. Поскольку нет необходимости в&amp;nbsp;играх с&amp;nbsp;параметрами, устанавливаю предсказания на&amp;nbsp;5 секунд вперед. Все три тестовые карты проходятся, так что я&amp;nbsp;начинаю искать, на&amp;nbsp;чем&amp;nbsp;бы ещё протестировать. Поскольку возможности достать и&amp;nbsp;померяться прямо в&amp;nbsp;процессе организаторы не&amp;nbsp;предусмотрели народ во&amp;nbsp;всю обсуждает результаты и&amp;nbsp;выкладывает собственные карты. Пытаюсь протестировать на&amp;nbsp;чужих картах и&amp;nbsp;обнаруживаю два&amp;nbsp;факта:
а) на&amp;nbsp;рандомных картах сходных с&amp;nbsp;тесовыми все работает&amp;nbsp;идеально;
б) стенки, &amp;laquo;рюмки&amp;raquo;, &amp;laquo;бутылки&amp;raquo;, лабиринты и&amp;nbsp;прочие непрерывности вводят марсоход в&amp;nbsp;ступор. На&amp;nbsp;этой прекрасной ноте отправляюсь&amp;nbsp;спать.
&lt;/p&gt;
&lt;h3&gt;Day 3. Doctrine:&amp;nbsp;Initiative&lt;/h3&gt;
&lt;p&gt;Пенедельник&amp;nbsp;&amp;mdash; день рабочий, поэтому за&amp;nbsp;марсоход удается приняться только к&amp;nbsp;вечеру. Проверять на&amp;nbsp;каждом шаге полноценное дерево решений чтобы выбрать оптимальное мне влом. Судя по&amp;nbsp;отзывам не&amp;nbsp;меньше половины участников этим не&amp;nbsp;заморачивались, уповая на&amp;nbsp;отсутствие в&amp;nbsp;реальных тестах стенок. Так что я&amp;nbsp;решаю посвятить оставшееся время отладке и&amp;nbsp;доводке. На&amp;nbsp;марсинан также решено забить. Мой марсоход едет быстро и&amp;nbsp;непредсказуемо, так, что даже я&amp;nbsp;не&amp;nbsp;всегда могу предполагать куда он&amp;nbsp;свернет. Перехватить его марсианином, задача гораздо менее тривиальная, чем объезд препятствий, так что с&amp;nbsp;марсианином он&amp;nbsp;может столкнуться только по&amp;nbsp;чистой случайности. Вычисление радиуса поворота в&amp;nbsp;эвристиках для определения необходимого положения руля значительно помогло. Теперь марсоход едет быстро, оптимально и&amp;nbsp;опасно. Решаю оставить как есть в&amp;nbsp;надежде, что он&amp;nbsp;не&amp;nbsp;свалится в&amp;nbsp;кратер больше двух раз. Пробую ещё пару идей, но&amp;nbsp;они не&amp;nbsp;работают. Сперва пытаюсь объединить пересекающиеся препятствия в&amp;nbsp;одно большое, но&amp;nbsp;точности это не&amp;nbsp;увеличивает, зато существенно замедляет работу. Затем пытаюсь настроить москитный маневр (вместо движения прямо, рулить попеременно &lt;nobr&gt;влево-вправо&lt;/nobr&gt; для затруднения перехвата), но&amp;nbsp;это ухудшает точность предсказаний, которые на&amp;nbsp;него не&amp;nbsp;рассчитаны. Допиливать предсказания не&amp;nbsp;хочется, поэтому сабмичу, как есть. Выложат результаты, будет видно насколько мои предположения оправдались.&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Conclusions&lt;/h3&gt;
&lt;p&gt;Участвовать в&amp;nbsp;этом можно, но&amp;nbsp;одному не&amp;nbsp;это делать не&amp;nbsp;слишком приятно. Кучу побочных задач я&amp;nbsp;пропустил, так, а&amp;nbsp;они могли существенно улучшить результат. Если&amp;nbsp;бы у&amp;nbsp;меня был собственный рендерер выводящий внутренне представление, ошибка с&amp;nbsp;предсказаниями была&amp;nbsp;бы отловлена сразу&amp;nbsp;же и&amp;nbsp;хватило&amp;nbsp;бы времени на&amp;nbsp;более изощренный алгоритм. Генератор карт существенно облегчил&amp;nbsp;бы отладку. Даже ознакомиться с&amp;nbsp;достижениями конкурентов не&amp;nbsp;хватило времени. В&amp;nbsp;следующий раз, я&amp;nbsp;планирую собрать команду и&amp;nbsp;подойти к&amp;nbsp;делу&amp;nbsp;серьезно.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-5263470648290439991?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/07/icfp-08-preambula-icfp-contest.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-9051011248993360206</guid><pubDate>Thu, 03 Jul 2008 05:01:00 +0000</pubDate><atom:updated>2008-07-03T12:02:44.884+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">date/time system</category><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Date, Time, Interval, and&amp;nbsp;Duration&lt;/h2&gt;
&lt;p&gt;С&amp;nbsp;представлением времени в&amp;nbsp;большинстве систем творится полный бардак. Ладно, RDF с&amp;nbsp;OWL&amp;rsquo;ем, там и&amp;nbsp;без этого все плохо, но&amp;nbsp;даже в&amp;nbsp;стандартных библиотеках самых что ни&amp;nbsp;на&amp;nbsp;есть мейнстримных языков полный бардак. Ну&amp;nbsp;что нужно курить чтобы&amp;nbsp;в&amp;nbsp;&lt;strong&gt;стандартный&lt;/strong&gt; класс Date добавить преобразование к&amp;nbsp;Юлианскому календарю? Ни&amp;nbsp;разу не&amp;nbsp;встречал человека, которому&amp;nbsp;бы это потребовалось. Зато вычислять интервал между двумя событиями приходится вручную. Давайте попробуем спроектировать библиотеку для работы со&amp;nbsp;временем правильно. Может хоть &lt;nobr&gt;кому-нибудь&lt;/nobr&gt; живой пример вправит&amp;nbsp;мозги.&lt;/p&gt;
&lt;p&gt;Итак, что такое время для программиста? Это одна координатная прямая, на&amp;nbsp;которой определена выделенная точка &amp;laquo;сейчас&amp;raquo;, делящая прямую на&amp;nbsp;&amp;laquo;прошлое&amp;raquo; и&amp;nbsp;&amp;laquo;будущее&amp;raquo;. Примитивные племена на&amp;nbsp;этом и&amp;nbsp;останавливаются, оперируя тремя понятиями: &amp;laquo;было&amp;raquo;, &amp;laquo;есть&amp;raquo; и&amp;nbsp;&amp;laquo;будет&amp;raquo;. Современному человеку требуется больше: время должно быть&amp;nbsp;&lt;strong&gt;измеримо&lt;/strong&gt;. Это позволит производить вычисления (до&amp;nbsp;сеанса осталось полчаса) и&amp;nbsp;учитывать порядок событий ([сначала]он&amp;nbsp;мне в&amp;nbsp;глаз, а&amp;nbsp;[затем] я&amp;nbsp;ему в&amp;nbsp;ухо) от&amp;nbsp;которого и&amp;nbsp;до&amp;nbsp;&lt;nobr&gt;причинно-следственной&lt;/nobr&gt; связи недалеко. Для того чтобы сделать время измеримым на&amp;nbsp;прямую произвольным образом добавляют фиксированную выделенную точку &amp;laquo;0&amp;raquo;. Исторически сложилось так, что в&amp;nbsp;разных культурах эту точку добавляли &lt;nobr&gt;по-своему&lt;/nobr&gt;. Это мог быть день коронования императора, начало определенного года, произвольно выбранный момент времени и&amp;nbsp;даже время &amp;laquo;сотворения мира&amp;raquo;. В&amp;nbsp;мире UNIX, например, это полночь 1 января 1970&amp;nbsp;года.&lt;/p&gt;
&lt;p&gt;С&amp;nbsp;другой стороны люди привыкли к&amp;nbsp;довольно неудобной для вычислений системе предстваления времени, связанной с&amp;nbsp;циклами вращения Земли. Опять&amp;nbsp;же, в&amp;nbsp;разных культурах к&amp;nbsp;этой проблеме подходили по&amp;nbsp;разному. В&amp;nbsp;результате год начинается в&amp;nbsp;разное время и&amp;nbsp;по&amp;nbsp;разному делится на&amp;nbsp;месяцы в&amp;nbsp;зависимости от&amp;nbsp;культуры. Более того, в&amp;nbsp;разных культурах привычные способы записи времени сильно отличаются, даже если системы счисления времени совпадают. Та&amp;nbsp;же американская ММ/ДД/ГГ и&amp;nbsp;русская&amp;nbsp;ДД.ММ.ГГ.&lt;/p&gt;
&lt;p&gt;&lt;nobr&gt;Из-за&lt;/nobr&gt; привычки людей к&amp;nbsp;солнечному времени, в&amp;nbsp;один и&amp;nbsp;тот&amp;nbsp;же момент время отличается в&amp;nbsp;разных часовых&amp;nbsp;поясах. Как будто этого мало, многие страны используют летнее/зимнее время для экономного использования светового дня. В результате, вычисление времени в определенной локации становится довольно неудобной задачей, по крайней мере для человека.&lt;/p&gt;
&lt;p&gt;Поскольку продолжительность суток растет, каждые несколько лет к&amp;nbsp;UTC добавляют секунду, чтобы компенсировать замедление. Это тоже усложняет точные расчеты, однако, пока не&amp;nbsp;вызывает проблем, поскольку единой системы точного времени затрагивающую все&amp;nbsp;&amp;mdash; от&amp;nbsp;GPS приемников до&amp;nbsp;кофеварок&amp;nbsp;не&amp;nbsp;создано.&lt;/p&gt;
&lt;p&gt;Теперь, когда требования ясны, займемся проектированием. Будет удобно, если внутри системы время будет хранится единообразно, в&amp;nbsp;собственной системе координат, а&amp;nbsp;преобразоваться в&amp;nbsp;нужную будет только на&amp;nbsp;входе и&amp;nbsp;выходе. По&amp;nbsp;крайней мере это избави программиста от&amp;nbsp;ручных расчетов и&amp;nbsp;преобразований&amp;nbsp;форматов.&lt;/p&gt;
&lt;p&gt;Первое, что нам требуется, это момент времени (Timestamp) заданный с&amp;nbsp;максимальной возможной точностью в&amp;nbsp;некоторой системе отсчета, хоть UNIX time. Этот класс является платформозависимым, поскольку умеет работать с&amp;nbsp;системным таймером. Никаких преобразований или вычислений этот класс делать не&amp;nbsp;должен. Очень часто требуется работать с&amp;nbsp;моментами времени с&amp;nbsp;точностью до&amp;nbsp;минуты, дня или года, в&amp;nbsp;этом случае максимальное разрешение тут только мешает. Для некоторой частых случаев можно определить классы Date и&amp;nbsp;DateTime и&amp;nbsp;точностью, соответственно, до&amp;nbsp;дня и&amp;nbsp;до&amp;nbsp;секунды. Timestamp должен корректно поддерживать сравнение отметок времени с&amp;nbsp;максимальной и&amp;nbsp;ограниченной&amp;nbsp;точностью.&lt;/p&gt;
&lt;p&gt;Второе&amp;nbsp;&amp;mdash; интервал между двумя моментами времени (Interval) Интервал можно представить двумя моментами времени: начало интервала и&amp;nbsp;конец интервала. Интервал должен уметь вычислять свою продолжительность. Кроме того, нужна возможность зная начало или конец интервала и&amp;nbsp;продолжительность, получить&amp;nbsp;интервал.&lt;/p&gt;
&lt;p&gt;Третье&amp;nbsp;&amp;mdash; продолжительносить (Duration) Внутри продолжительность хранится в&amp;nbsp;максимально возможной системной&amp;nbsp;точностью.&lt;/p&gt;
&lt;p&gt;Для каждой из&amp;nbsp;трех сущностей потребуется два интерфейса: *Parser и&amp;nbsp;*Formatter имплементации которых служат для преобразования сущностей из&amp;nbsp;строки и&amp;nbsp;к&amp;nbsp;строке (или прочим типам). Кроме форматирования, их&amp;nbsp;зона ответственности&amp;nbsp;&amp;mdash; преобразование к&amp;nbsp;другим системам представления времени, например к&amp;nbsp;тому&amp;nbsp;же юлианскому&amp;nbsp;календарю.&lt;/p&gt;
&lt;p&gt;В&amp;nbsp;основном, этого достаточно. Естественно, в&amp;nbsp;некоторых языках можно добавить собственные удобности, например профайлинг&amp;nbsp;в&amp;nbsp;Ruby:&lt;/p&gt;
&lt;code&gt;
&lt;pre&gt;
duration = Duration.measure do
...
end
&lt;/pre&gt;
&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-9051011248993360206?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/06/date-time-interval-and.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-2675711802813794926</guid><pubDate>Tue, 24 Jun 2008 02:54:00 +0000</pubDate><atom:updated>2008-12-09T15:02:52.844+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">RuPyRu</category><category domain="http://www.blogger.com/atom/ns#">Omsk</category><title /><description>&lt;h2&gt;&lt;a href="http://www.rupy.ru/"&gt;RuPyRu&lt;/a&gt; 2008.&amp;nbsp;Конференция&lt;/h2&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBhn858Z5I/AAAAAAAAABg/2uAuBDocjms/s1600-h/Resize+of+P6211946.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBhn858Z5I/AAAAAAAAABg/2uAuBDocjms/s320/Resize+of+P6211946.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215275707486988178" /&gt;&lt;/a&gt;
&lt;p&gt;Пару слов о&amp;nbsp;самой конференции. В&amp;nbsp;целом&amp;nbsp;&lt;a href="http://www.rupy.ru/"&gt;RuPyRu&lt;/a&gt; оправдала мои ожидания: хорошая, добротная провинциальная&amp;nbsp;конференция.&lt;/p&gt;
&lt;p&gt;Техническая организация была на&amp;nbsp;высоте. Обошлось без критических задержек, технических перерывов и&amp;nbsp;прочих накладок. Во&amp;nbsp;всяком случае я&amp;nbsp;таковых&amp;nbsp;не&amp;nbsp;заметил.&lt;/p&gt;
&lt;p&gt;Качество докладов оставляет желать лучшего. Было очень много рассказов своими словами об&amp;nbsp;использовании чужих технологий, разбавленных собственным опытом. По&amp;nbsp;большому счету такие доклады бесполезны, поскольку такую информацию легко почерпнуть в&amp;nbsp;мануале, а&amp;nbsp;все, кто &amp;laquo;в&amp;nbsp;контексте&amp;raquo; давно прочитали обзорные статьи в&amp;nbsp;блогах и&amp;nbsp;форумах. Вопросы в&amp;nbsp;стиле &amp;laquo;Почему это сделано именно так?&amp;raquo; таким докладчикам тоже задавать бессмысленно, не&amp;nbsp;они технологию разрабатывали, откуда&amp;nbsp;им&amp;nbsp;знать.&lt;/p&gt;
&lt;p&gt;Познать механизм деления докладов на&amp;nbsp;&amp;laquo;общий&amp;raquo; и&amp;nbsp;&amp;laquo;специальный&amp;raquo; потоки мне не&amp;nbsp;удалось. Интересные доклады были и&amp;nbsp;там и&amp;nbsp;там. Я&amp;nbsp;бы предложил деление на&amp;nbsp;&amp;laquo;пользовательский&amp;raquo; и&amp;nbsp;&amp;laquo;авторский&amp;raquo; потоки. В&amp;nbsp;первом&amp;nbsp;&amp;mdash; краткие обзорные доклады, посвященные чужим технологиями, во&amp;nbsp;втором&amp;nbsp;&amp;mdash; доклады авторов о&amp;nbsp;собственных разработках и&amp;nbsp;доклады экспертов. Понравилось, что Ruby и&amp;nbsp;Python не&amp;nbsp;были разнесены на&amp;nbsp;отдельные потоки, что позволило познакомиться с&amp;nbsp;конкурентными&amp;nbsp;технологиями.&lt;/p&gt;
&lt;p&gt;Совершенно зря перед конференцией не&amp;nbsp;были собраны и&amp;nbsp;опубликованы тезисы. &lt;nobr&gt;Все-таки&lt;/nobr&gt; по&amp;nbsp;одному названию доклада трудно понять, стоит&amp;nbsp;ли его слушать. Впрочем, докладов было мало и&amp;nbsp;особых неудобств от&amp;nbsp;этого&amp;nbsp;не&amp;nbsp;было.&lt;/p&gt;
&lt;p&gt;Идея круглых столов с&amp;nbsp;едой, хороша, но&amp;nbsp;реализация не&amp;nbsp;слишком хорошо удалась. Стоило составить физические столы так, чтобы народ сидел лицом друг к&amp;nbsp;другу, обозначить вопросы на&amp;nbsp;обсуждение и&amp;nbsp;&lt;nobr&gt;как-то&lt;/nobr&gt; организовать дискуссию. Темы круглых столов тоже не&amp;nbsp;слишком удались. Здесь&amp;nbsp;бы стоило разнести Ruby и&amp;nbsp;Python на&amp;nbsp;разные столы, поскольку в&amp;nbsp;таком формате обычно обсуждаются довольно тонкие вопросы, пользователям конкурентной технологии&amp;nbsp;не&amp;nbsp;интересные.&lt;/p&gt;
&lt;p&gt;Из&amp;nbsp;интересного для меня оказались совершенно не&amp;nbsp;раскрыты темы развертывания Rails и&amp;nbsp;Django приложений, использования динамических языков для кодогенерации, использования Ruby и&amp;nbsp;Python в&amp;nbsp;качестве скриптовых языков внутри приложения и&amp;nbsp;создания DSL на&amp;nbsp;базе динамических&amp;nbsp;языков.&lt;/p&gt;
&lt;p&gt;Несколько раз пожалел, что приехал с&amp;nbsp;пустыми руками. Увы, времени нормально подготовиться после Алтая категорически не&amp;nbsp;было, а&amp;nbsp;докладываться экспромтом я&amp;nbsp;зарекся. Надеюсь, традиция продолжится и&amp;nbsp;в&amp;nbsp;&lt;nobr&gt;2009-ом&lt;/nobr&gt; конференция&amp;nbsp;состоится.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-2675711802813794926?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/06/rupu.html</link><author>noreply@blogger.com (Miroff)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBhn858Z5I/AAAAAAAAABg/2uAuBDocjms/s72-c/Resize+of+P6211946.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-7978467501332875985</guid><pubDate>Tue, 24 Jun 2008 02:44:00 +0000</pubDate><atom:updated>2008-12-09T15:02:54.148+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">travel</category><category domain="http://www.blogger.com/atom/ns#">Omsk</category><title /><description>&lt;h2&gt;&lt;a href="http://www.rupy.ru/"&gt;RuPyRu&lt;/a&gt; 2008. Омск&lt;/h2&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBgNVvyqTI/AAAAAAAAAAo/eIjWSbqP9J0/s1600-h/Resize+of+P6211816.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBgNVvyqTI/AAAAAAAAAAo/eIjWSbqP9J0/s320/Resize+of+P6211816.JPG" border="0" alt="памятник Ленину" id="BLOGGER_PHOTO_ID_5215274150787197234" /&gt;&lt;/a&gt;

&lt;p&gt;Дожидаясь начала конференции удалось прогуляться по Омску. Увы, было ранее субботнее утро, поэтому оценить вид города в час пик не удалось. Утром выходного дня все города выглядят одинаково хорошо. На вокзале нас встретил традиционный бронзовый Ленин, твердой рукой указующий почему-то на здание вокзала. Видимо, это должно означать: "Убирайтесь, откуда пришли".&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBgRmIyUAI/AAAAAAAAAAw/KCLEwxI-JxU/s1600-h/Resize+of+P6211829.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand; clear: right;" src="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBgRmIyUAI/AAAAAAAAAAw/KCLEwxI-JxU/s320/Resize+of+P6211829.JPG" border="0" alt="памятник Оленям" id="BLOGGER_PHOTO_ID_5215274223906476034" /&gt;&lt;/a&gt;

&lt;p&gt;Встречаются в Омске и новые скульптуры, в духе современной моды. На набережной Иртыша, великой судоходной реки, нам попался памятник Оленям, воспевающий трогательную заботу, нежность и дальновидность.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBhnPmY2NI/AAAAAAAAABY/rWKMBdxlJhk/s1600-h/Resize+of+P6211876.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBhnPmY2NI/AAAAAAAAABY/rWKMBdxlJhk/s320/Resize+of+P6211876.JPG" border="0" alt="памятник Сантехнику" id="BLOGGER_PHOTO_ID_5215275695325370578" /&gt;&lt;/a&gt;

&lt;p&gt;
В центре города нам встретился памятник &lt;s&gt;Говночерпию&lt;/s&gt; Сантехнику, из вечно актуальной серии памятников рабочему классу (памятники Электрику и Дворнику в Томске) Расположенный прямо на тротуаре, он символизирует близость рыцаря труб и задвижек к народу, а умиротворенное выражение лица убеждает в чистоте его намерений. 
&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBgRw8l3TI/AAAAAAAAAA4/ReTpSM6CwrY/s1600-h/Resize+of+P6211849.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBgRw8l3TI/AAAAAAAAAA4/ReTpSM6CwrY/s320/Resize+of+P6211849.JPG" border="0" alt="граффити" id="BLOGGER_PHOTO_ID_5215274226808118578" /&gt;&lt;/a&gt;

&lt;p&gt;Из современных форм искусства нам встретилось вот такое трафаретное граффити в стиле Fallout. Сложно сказать, что оно должно означать, но прикольно. Я всегда считал, что за трафаретным граффити будущее уличной живописи.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBhn2ilScI/AAAAAAAAABo/VdkoDbf00xg/s1600-h/Resize+of+P6211949.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_Z-sGuwkoyTw/SGBhn2ilScI/AAAAAAAAABo/VdkoDbf00xg/s320/Resize+of+P6211949.JPG" border="0" alt="мотоцикл" id="BLOGGER_PHOTO_ID_5215275705778391490" /&gt;&lt;/a&gt;

&lt;p&gt;Омские байкеры настолько суровы, что способны ездить даже на таком странном звере. К сожалению застать его едущим нам не удалось.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBgR040euI/AAAAAAAAABA/P6fshLpluBE/s1600-h/Resize+of+P6211860.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBgR040euI/AAAAAAAAABA/P6fshLpluBE/s320/Resize+of+P6211860.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215274227866041058" /&gt;&lt;/a&gt;

&lt;p&gt;Старый центр Омска похож на все прочие старые города Сибири. Те же трех-четырехэтажные здания не разваливающиеся на глазах только за счет многовекового слоя лепнины, штукатурки и краски. Те же узкие улочки. Что в Омске догадались сделать хорошо, так это отгородили тротуар с деревьями от проезжей части железной решеткой. И припарковаться на тротуаре не дает и народ где попало через улицу не бегает.&lt;/p&gt;

&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBgRx_42VI/AAAAAAAAABI/YyciSh5vhGk/s1600-h/Resize+of+P6211862.JPG"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBgRx_42VI/AAAAAAAAABI/YyciSh5vhGk/s320/Resize+of+P6211862.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5215274227090381138" /&gt;&lt;/a&gt;

&lt;p&gt;Первые этажи зданий, заняты магазинами, которые, иногда, вполне гармонично вписываются в окружающую лепнину и белую штукатурку.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-7978467501332875985?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/06/rupy.html</link><author>noreply@blogger.com (Miroff)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SGBgNVvyqTI/AAAAAAAAAAo/eIjWSbqP9J0/s72-c/Resize+of+P6211816.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-504772690106737487</guid><pubDate>Wed, 18 Jun 2008 04:32:00 +0000</pubDate><atom:updated>2008-12-09T15:02:54.579+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">travel</category><category domain="http://www.blogger.com/atom/ns#">Altai</category><title /><description>&lt;h2&gt;Just few&amp;nbsp;photos&lt;/h2&gt;
Вернулись со&amp;nbsp;сплава по&amp;nbsp;Средней Катуни. Выяснилось несколько забавных&amp;nbsp;вещей:
&lt;ul&gt;&lt;li&gt;Камера &lt;a href="http://www.olympus.com.ru/consumer/29_mju_770_sw.htm"&gt;&amp;micro; 770&amp;nbsp;SW&lt;/a&gt; + запасной аккумулятор + 2Гб флешка категорически рулят. Мочить камеру водой не&amp;nbsp;страшно, поэтому вдохновившись радостно наснимали 1.5Гб фотографий, из&amp;nbsp;которых, правда, половина&amp;nbsp;&amp;mdash; &lt;nobr&gt;чье-то&lt;/nobr&gt; весло или&amp;nbsp;каска.&lt;/li&gt;
&lt;li&gt;С&amp;nbsp;каждым годом количество крупных вещей уменьшается, а&amp;nbsp;мелких&amp;nbsp;&amp;mdash; растет приближаясь к&amp;nbsp;стандарту &amp;laquo;все необходимое можно распихать&amp;nbsp;по&amp;nbsp;карманам&amp;raquo;&lt;/li&gt;
&lt;li&gt;В&amp;nbsp;следующий раз в&amp;nbsp;качестве полезной вещи нужно брать термос с&amp;nbsp;горячим чаем. Правильно зафиксированный, он, скорее всего,&amp;nbsp;не&amp;nbsp;разобьется.&lt;/li&gt;
&lt;li&gt;Свой котелок и&amp;nbsp;горелку мы&amp;nbsp;совершенно напрасно не&amp;nbsp;взяли, понадеявшись на&amp;nbsp;общественный. В&amp;nbsp;результате, большую часть времени обходились без чая потому, как дождавщись когда он&amp;nbsp;согреется, уже никакого чая&amp;nbsp;не&amp;nbsp;хочется.&lt;/li&gt;
&lt;li&gt;После Алтая воняет даже&amp;nbsp;Академгородок:-(&lt;/li&gt;
&lt;/ul&gt;

Несколько пейзажей без сюжета:
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SFiQwGKjRWI/AAAAAAAAAAQ/Q_NQEbtcrgI/s1600-h/P6131482.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SFiQwGKjRWI/AAAAAAAAAAQ/Q_NQEbtcrgI/s320/P6131482.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5213075724644336994" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Z-sGuwkoyTw/SFiQwbPY0uI/AAAAAAAAAAY/lZRm9BRgNqY/s1600-h/P6131486.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Z-sGuwkoyTw/SFiQwbPY0uI/AAAAAAAAAAY/lZRm9BRgNqY/s320/P6131486.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5213075730301768418" /&gt;&lt;/a&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Z-sGuwkoyTw/SFiQwTkM8yI/AAAAAAAAAAg/ZlwY6MKBWIE/s1600-h/P6131533.JPG"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Z-sGuwkoyTw/SFiQwTkM8yI/AAAAAAAAAAg/ZlwY6MKBWIE/s320/P6131533.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5213075728241586978" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-504772690106737487?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/06/just-few.html</link><author>noreply@blogger.com (Miroff)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_Z-sGuwkoyTw/SFiQwGKjRWI/AAAAAAAAAAQ/Q_NQEbtcrgI/s72-c/P6131482.JPG" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-2776753865582406669</guid><pubDate>Wed, 11 Jun 2008 05:38:00 +0000</pubDate><atom:updated>2008-06-11T17:04:21.729+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">usability</category><category domain="http://www.blogger.com/atom/ns#">declarative interface</category><category domain="http://www.blogger.com/atom/ns#">software</category><title /><description>&lt;h2&gt;Declarative interface&lt;/h2&gt;

&lt;a href="http://gineer.livejournal.com/"&gt;Gineer&lt;/a&gt;, попросил меня описать, что я понимаю под декларативным интерфейсом. Признаться, идея пришла мне в голову &lt;a href="http://vitus-wagner.livejournal.com/285732.html?thread=9103908#t9103908"&gt;прямо здесь&lt;/a&gt;, но я попытаюсь оформить ее в разумную форму. 

Любой прибой, по сути своей является черным ящиком для пользователя. Разговаривая по телефону, можно ничего не знать о модуляции, СВЧ технике или принципах маршрутизации голосового траффика. Декларативным я называю интерфейс, построенный в терминах &lt;strong&gt;потребностей&lt;/strong&gt; пользователя, а не &lt;strong&gt;средств&lt;/strong&gt; их достижения. 

По идее, любой интерфейс любого прибора может быть декларативным, однако, на практике это не так. Например, мой телефон требует для установки будильника следующей последовательности команд: Меню &amp;gt; Развлечения &amp;gt; Будильники &amp;gt; Выбор одного из трех возможных &amp;gt; Включение &amp;gt; Установка времени &amp;gt; Установка режима "повторять ежедневно/по будням/никогда" &amp;gt; Выбор мелодии &amp;gt; Подтверждение. Это идиотский интерфейс, потому что он заставляет меня думать не об исходной потребности, а о деталях реализации. Мне нужно, чтобы телефон разбудил меня в указанное время. Все остальное лишь опции. Для чего мне знать, сколько у телефона будильников (готов спорить, их три, только для того, чтобы влезли на один экран в интерфейсе), которые из них включены и как именно он меня собирается будить. Декларативным будет примерно такой интерфейс: &lt;code&gt;&lt;i&gt;разбуди_меня&lt;/i&gt; вермя|интервал [периодичность] [способ]&lt;/code&gt;, где вермя может быть в любом формате от "в 1130" до "завтра в 8", а то и вовсе интервал: "через 2 часа". Конечно, это потребует продвинутого date/time picker, но изваять такой уже давно не проблема. Еще понадобятся две функции: &lt;code&gt;&lt;i&gt;покажи_список_будильников&lt;/i&gt;&lt;/code&gt; и &lt;code&gt;&lt;i&gt;отмени_будильник&lt;/i&gt; &amp;gt; выбор  будильника&lt;/code&gt; 

Может показаться, что приведенный синтаксис относится только к CLI, однако это не так. Аргументы команды вполне могут выбираться самостоятельным диалогом. В GUI команду можно представить в качестве мастера, опциональные параметры которого легко пропустить или установить в любом порядке.

Из идеи декларативного интерфейса есть одно интересное следствие, которое стоит обдумать. Если более строго описать синтаксис UNIX команд с учетом зависимостей, типов и связей параметров, возможно, удастся помирить GUI с CLI. Хотя бы посредством автогенерации интерфейсов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-2776753865582406669?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/06/declarative-interface.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-2150312777537597033</guid><pubDate>Thu, 01 May 2008 02:28:00 +0000</pubDate><atom:updated>2008-09-12T16:25:59.584+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">management</category><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;What do you need to know&lt;/h2&gt;

&lt;p&gt;Как вести проектную документацию? Оставим в стороне ГОСТы, RUP, фантазии некомпетентных и прочую фигню и сосредоточимся на одном вопросе: "Какая документация вам нужна в проекте, рассчитанном на несколько лет?" Проекты в стиле "Сделал и забыл" (а это большая часть аутсорсинга) в документации не нуждаются и останутся за скобками. Итак, поехали:&lt;/p&gt;

&lt;p&gt;Первое, что нам нужно, это требования. У натуралистов есть такое правило: "Не записано ― не наблюдалось" Это именно то, чем стоит руководствоваться при работе с требованиями. Почему это важно? Да потому, что без требований "в бумаге" через три месяца вы не сможете отличить баг от реально затребованной кем-то фичи, через полгода у вас появятся "гуру" обладающие редким знанием о том, что именно и зачем вы делаете, через три года вы обзаведетесь прекрасными образцами устного фольклера, которые останутся единственным источником информации об истории проекта, а через пять лет, когда вы захотите все переписать с использованием современных технологий, вам придется нанять археолога. Как именно работать с требованиями много говорили и без меня. Единственное, что стоит отметить, чем глубже проанализированы требования, тем легче. Требование "заказчик хочет зеленую кнопку" менее ценно чем "интерфейс должен, по возможности, соответствовать программе X с которой у пользователей есть опыт работы". В случае, если кнопку не удастся сделать зеленой, хотя бы понятно с какой стороны начинать переговоры по поиску компромисса.&lt;/p&gt;

&lt;p&gt;На втором месте высокоуровневая архитектура. Ее имеет смысл описывать потому, что из кода архитектурные концепты видны очень плохо. Это приводит к тому, что в реализации, а уж тем более в поддержке, хорошие идеи забываются, игнорируются и в конце концов теряются. В результате проект превращается в подобие &lt;a href="http://en.wikipedia.org/wiki/Tree_of_life_%28Kabbalah%29"&gt;дерева сефирот&lt;/a&gt;, в котором все связано со всем. Как документировать архитектуру хорошо известно. Единственный сложный момент здесь, в том, что однажды созданная, документация должна постоянно актуализироваться. Поэтому нужно заранее планировать активности по актуализации и верификации архитектурной документации.&lt;/p&gt;

&lt;p&gt;Третье, история принятия решений. Обычно этот момент выпадает из документации, что приводит к довольно печальным последствиям. Решение остается, а причины побудившие его принять постепенно забываются. В результате через несколько лет проект изобилует странными решениями, которые в свое время были приняты совершенно осознанно, но поддерживаются в актуальном состоянии только потому, что "здесь так принято". Поскольку от них нельзя отказаться не проанализировав все возможные последствия, эти решения тормозят развитие проекта.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-2150312777537597033?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/05/what-do-you-need-to-know-rup.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-996928752136566687</guid><pubDate>Thu, 24 Apr 2008 04:36:00 +0000</pubDate><atom:updated>2008-04-28T13:59:33.079+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">maps</category><category domain="http://www.blogger.com/atom/ns#">geoid</category><title /><description>&lt;h2&gt;Geoid&lt;/h2&gt;

&lt;blockquote&gt;
Земля имеет форму&amp;nbsp;шара,
Забавно видеть хуй&amp;nbsp;омара.
&lt;i&gt;Азбука&lt;/i&gt;&lt;/blockquote&gt;

А&amp;nbsp;вот хрен&amp;nbsp;&amp;mdash; возвопят просвещенные&amp;nbsp;&amp;mdash; не&amp;nbsp;шара,&amp;nbsp;а&amp;nbsp;&lt;i&gt;геоида&lt;/i&gt;. Эта феерическая глупость передается из&amp;nbsp;уст в&amp;nbsp;уста. Не&amp;nbsp;исключено, что она уже просочилась даже в&amp;nbsp;школьные учебники. По&amp;nbsp;крайней мере в&amp;nbsp;русскую википедию&amp;nbsp;просочилась:
&lt;blockquote&gt;Геоид- фигура, отражающая форму Земли, важное понятие&amp;nbsp;в&amp;nbsp;геодезии.&lt;/blockquote&gt;

Помилуйте, геоид не&amp;nbsp;имеет решительно никакого отношения к&amp;nbsp;форме Земли. Более того, изобретать просто так фигуру &amp;laquo;описывающую форму Земли&amp;raquo; бессмысленно. Однако, математики давно прослыли чудаками и&amp;nbsp;эта бессмысленность не&amp;nbsp;бросается обывателю в&amp;nbsp;глаза. Если вы&amp;nbsp;приглядитесь к&amp;nbsp;картинке, геоид довольно слабо напоминает форму&amp;nbsp;Земли.

&lt;img src="http://upload.wikimedia.org/wikipedia/commons/5/56/Geoids_sm.jpg" border="0"&gt;

Откуда&amp;nbsp;же он&amp;nbsp;взялся? На&amp;nbsp;самом деле геоид имеет вполне практическое применение. Как вы&amp;nbsp;все наверняка знаете, географические координаты (те&amp;nbsp;которые широта и&amp;nbsp;долгота) суть координаты сферические. Однако, поскольку земля не&amp;nbsp;сфера и&amp;nbsp;не&amp;nbsp;эллипс, возникает вопрос: относительно какой сферы задаются географические координаты? Математики давно предложили работающее решение: использовать мнимый эллипсоид вращения &lt;nobr&gt;как-то&lt;/nobr&gt; &lt;nobr&gt;худо-бедно&lt;/nobr&gt; совпадающий с&amp;nbsp;земной поверхностью. Для вычислений идеально, однако, стоя в&amp;nbsp;чистом поле довольно трудно этот эллипсоид обнаружить. Он&amp;nbsp;же математическая&amp;nbsp;абстракция.

Мудрые математики и&amp;nbsp;тут не&amp;nbsp;сплошали. Они расположили эллипсоид так, чтобы короткая ось его совпадала с&amp;nbsp;осью вращения земли, в&amp;nbsp;центр его совпадал с&amp;nbsp;центром масс Земли или был смещен относительно него на&amp;nbsp;&lt;nobr&gt;какое-то&lt;/nobr&gt; расстояние. Из&amp;nbsp;физики мы&amp;nbsp;знаем, что ось вращения проходит через центр масс. Осталась малость, вычислить его положение относительно поверхности. Для это была проведена&amp;nbsp;&lt;a href="http://ru.wikipedia.org/wiki/%D0%93%D1%80%D0%B0%D0%B2%D0%B8%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%8F_%28%D0%B3%D0%B5%D0%BE%D0%B4%D0%B5%D0%B7%D0%B8%D1%8F%29"&gt;гравиразведка&lt;/a&gt; все поверхности земли и&amp;nbsp;построен геоид&amp;nbsp;&amp;mdash; фигура на&amp;nbsp;поверхности которой сила тяжести постоянна и&amp;nbsp;совпадает со&amp;nbsp;средней силой тяжести на&amp;nbsp;поверхности моря. Этого достаточно чтобы определить центр масс геоида, который совпадает с&amp;nbsp;центром масс Земли. Зная, где находится центр масс, мы&amp;nbsp;можем поместить в&amp;nbsp;центр земли эллипсоид (умозрительно, конечно) и&amp;nbsp;использовать его для определения&amp;nbsp;координат.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-996928752136566687?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/04/geoid.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-3967056712891147737</guid><pubDate>Thu, 10 Apr 2008 04:15:00 +0000</pubDate><atom:updated>2008-04-17T13:28:14.448+07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">management</category><title /><description>&lt;h2&gt;&lt;nobr&gt;Half-life&lt;/nobr&gt;&lt;/h2&gt;
Период полураспада для большинства нововведений составляет две недели. Вне зависимости от&amp;nbsp;того в&amp;nbsp;чем состоит идея: вести документацию в&amp;nbsp;wiki или штрафовать за&amp;nbsp;неположенное распитие пива. Каждый может припомнить несколько довольно хороших (или ужасных) идей, которые &amp;laquo;не&amp;nbsp;пошли&amp;raquo;. 

Связано&amp;nbsp;ли это с&amp;nbsp;тем, что идеи плохие? Нет, распадаются и&amp;nbsp;вполне хорошие начинания. Со&amp;nbsp;стороны видно, что внедрить &lt;nobr&gt;что-то&lt;/nobr&gt; сложнее чем кажется. Любая система обладает некоторым запасом инерции и&amp;nbsp;социальные системы не&amp;nbsp;исключение. После того как программистам наказали указывать номер бага при коммите обязательно придется некоторое время следить чтобы это правило выполнялось. И&amp;nbsp;лишь через &lt;nobr&gt;какое-то&lt;/nobr&gt; время оно перейдет в&amp;nbsp;разряд &amp;laquo;здесь так принято&amp;raquo;. Никогда, ни&amp;nbsp;одно правило не&amp;nbsp;будет выполняться только потому, что оно есть. Время принятия зависит от&amp;nbsp;того, насколько нововведение выгодно конкретным исполнителям. Дневные отчеты могут быть офигенно полезными для проекта и&amp;nbsp;для компании в&amp;nbsp;целом, но&amp;nbsp;если программисты не&amp;nbsp;видят в&amp;nbsp;них смысла, они будут забрасываться при каждом удобном случае. В&amp;nbsp;идеальном случае, когда все без исключения исполнители понимают, какую пользу им&amp;nbsp;принесет нововведение, они способны сами его внедрить. На&amp;nbsp;практике это случается довольно&amp;nbsp;редко.

Итак, несколько практических&amp;nbsp;рекомендаций:
&lt;ul&gt; &lt;li&gt;Продумывая любое изменение обязательно оцените ресурсы потребные на&amp;nbsp;его&amp;nbsp;внедрение;&lt;/li&gt; &lt;li&gt;Назначьте ответственных&amp;nbsp;за&amp;nbsp;внедрение;&lt;/li&gt; &lt;li&gt;Донесите до&amp;nbsp;исполнителей выгоды, которые им&amp;nbsp;сулит&amp;nbsp;нововведение;&lt;/li&gt; &lt;li&gt;Если нововведение не&amp;nbsp;сулит ничего хорошего исполнителям, обеспечьте им&amp;nbsp;выгоду&amp;nbsp;искусственно;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-3967056712891147737?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/04/half-life.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-5949333577201815201</guid><pubDate>Wed, 09 Apr 2008 07:40:00 +0000</pubDate><atom:updated>2008-04-09T14:37:28.580+07:00</atom:updated><title /><description>&lt;h2&gt;Alone&lt;/h2&gt;
Принято считать, что в&amp;nbsp;современном мире для любой серьезной вещи нужна команда. &lt;nobr&gt;Поговорки-пословицы&lt;/nobr&gt; всякие: &amp;laquo;один в&amp;nbsp;поле, волкам на&amp;nbsp;потеху&amp;raquo;, &amp;laquo;семеро одного не&amp;nbsp;боятся&amp;raquo;, &amp;laquo;команда&amp;nbsp;&amp;mdash; все, остальное&amp;nbsp;&amp;mdash; волшебные пузырьки&amp;raquo;. Вроде&amp;nbsp;бы, как само собой разумеется, что производительности одного человека ни&amp;nbsp;для каких серьезных задач недостаточно, а&amp;nbsp;вот команда это сила. Ещё&amp;nbsp;бы, на&amp;nbsp;один только чай команда тратит в&amp;nbsp;день больше времени, чем один человек может удалить работе в&amp;nbsp;неделю. Доходит до&amp;nbsp;того, что привычный к&amp;nbsp;командной работе программист смотрит на&amp;nbsp;индивидуальную задачу и&amp;nbsp;изрекает: &amp;laquo;да&amp;nbsp;тут мне одному на&amp;nbsp;полгода&amp;raquo;. И&amp;nbsp;действительно, провозится с&amp;nbsp;задачей 6&amp;nbsp;месяцев. В&amp;nbsp;то&amp;nbsp;же время, за&amp;nbsp;стенкой может сидеть человек, стабильно решающий подобные задачи за&amp;nbsp;месяц каждая. Производительность лучших и&amp;nbsp;худших программистов отличается примерно на&amp;nbsp;порядок. Всякий имеющий доступ к&amp;nbsp;метрикам может получить эти данные самостоятельно. Вопрос в&amp;nbsp;том, за&amp;nbsp;счет чего так получается и&amp;nbsp;какую выгоду можно извлечь, если работать&amp;nbsp;в&amp;nbsp;одиночку.

Самое очевидное, это работа с&amp;nbsp;постановкой задач. Любую задачу можно решать разными способами. К&amp;nbsp;тому моменту, как задача доходит до&amp;nbsp;программиста через кучу промежуточных звеньев, она обрастает коркой фантазий, зачастую не&amp;nbsp;имеющих никакого отношения к&amp;nbsp;исходной проблеме. Например, клиент хочет, чтобы работающие с&amp;nbsp;программой менеджеры не&amp;nbsp;забывали о&amp;nbsp;назначенных встречах. Можно реализовать управление встречами в&amp;nbsp;программе, а&amp;nbsp;можно обратить внимание, что в&amp;nbsp;компании уже используется для этого Outlook с&amp;nbsp;которым довольно легко интегрироваться. Аналогичные ситуации возникают и&amp;nbsp;при внутреннем взаимодействии. Быстродействующий программист не&amp;nbsp;станет ничего делать пока не&amp;nbsp;выяснит, какую именно проблему он&amp;nbsp;должен&amp;nbsp;решить.

Второе, это правильное использование готовых средств. Если собственное решение занимает три недели, а&amp;nbsp;применение готового&amp;nbsp;&amp;mdash; несколько часов на&amp;nbsp;чтение документации и&amp;nbsp;пару дней на&amp;nbsp;исправление багов в&amp;nbsp;чужом решении, это сэкономит две недели. В&amp;nbsp;другом случае, частное решение пишется за&amp;nbsp;неделю, а&amp;nbsp;на&amp;nbsp;использование существующего могут уйти недели. Умение верно оценить, сколько времени займет переиспользование, а&amp;nbsp;с&amp;nbsp;сколько собственное решение и&amp;nbsp;есть искусство быстрой сборки из&amp;nbsp;кубиков. У&amp;nbsp;быстродействующего программиста нет времени изобретать все свои велосипеды&amp;nbsp;самостоятельно.

На&amp;nbsp;третьем месте&amp;nbsp;&amp;mdash; острая пила. Инструмент должен быть адекватен решаемым задачам. Это касается как языков и&amp;nbsp;библиотек, так и&amp;nbsp;окружения. В&amp;nbsp;эту бочку и&amp;nbsp;владение инструментами (от&amp;nbsp;IDE до&amp;nbsp;shell) и&amp;nbsp;DSL, и&amp;nbsp;метапрограммирование с&amp;nbsp;кодогенерацией. Отдельные аспекты &amp;laquo;заточки пил&amp;raquo; освещены изрядно. Пилы быстродействующего программиста всегда&amp;nbsp;острые.

Если хотите готового&amp;nbsp;чеклиста:
&lt;ul&gt; 
 &lt;li&gt;Может&amp;nbsp;ли исходная проблема быть решена более простым&amp;nbsp;способом?&lt;/li&gt;
 &lt;li&gt;Можно&amp;nbsp;ли изменить условия задачи так, чтобы она решлась существенно проще?&lt;/li&gt;
 &lt;li&gt;Есть&amp;nbsp;ли для задачи готовое&amp;nbsp;решение?&lt;/li&gt; 
 &lt;li&gt;Существует&amp;nbsp;ли инструмент, позволяющий решить данную задачу&amp;nbsp;быстрее?&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-5949333577201815201?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/01/alone.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-3301748601505615072</guid><pubDate>Wed, 26 Mar 2008 05:38:00 +0000</pubDate><atom:updated>2008-03-26T16:28:51.067+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">management</category><title /><description>&lt;h2&gt;Meeting&lt;/h2&gt;
&lt;blockquote&gt;
-Пойдем с&amp;nbsp;нами,&amp;nbsp;помитингуем.
-Надолго?
-Да нет, часа&amp;nbsp;на&amp;nbsp;полтора.
&lt;/blockquote&gt;

Знакомо?
Митинги&amp;nbsp;&amp;mdash; хороший способ осознать какова сила командной работы. За&amp;nbsp;полтора часа разговоров команда тратит столько времени, сколько тебе в&amp;nbsp;одиночку не&amp;nbsp;потратить за&amp;nbsp;неделю. На&amp;nbsp;первый взгляд, кажется что время тратится с&amp;nbsp;пользой. Люди говорят, спорят, обсуждают, но&amp;nbsp;стоит поймать выходящего из&amp;nbsp;комнаты для совещаний и&amp;nbsp;спросить, что, собственно, обсуждалось, и&amp;nbsp;что было решено, как будет получен ответ в&amp;nbsp;стиле: &amp;laquo;Ну&amp;nbsp;взаимодействие системы, А&amp;nbsp;с&amp;nbsp;подсистемой B. Петро будет спеку на&amp;nbsp;интерфейс писать." Помилуйте, что тут можно было обсуждать полтора часа? А&amp;nbsp;ведь существуют компании где на&amp;nbsp;подобные совещания тратится больше половины рабочего времени, а&amp;nbsp;большая часть &amp;laquo;митингующих&amp;raquo; рисует&amp;nbsp;чертиков.
Между тем способ сделать собрания эффективными давно известен всем желающим. Нужно лишь соблюдать несколько простых&amp;nbsp;правил:

&lt;ul&gt; &lt;li&gt;&lt;em&gt;Прежде чем назначить совещание нужно составить план, в&amp;nbsp;котором будут перечислены вопросы вынесенные на&amp;nbsp;обсуждение и&amp;nbsp;предполагаемое время обсуждения&amp;nbsp;каждого.&lt;/em&gt; Это позволит определить список заинтересованных лиц и&amp;nbsp;оценить время необходимое на&amp;nbsp;совещание. С&amp;nbsp;планом необходимо ознакомить всех участников заранее, а&amp;nbsp;не&amp;nbsp;прямо на&amp;nbsp;месте. Лучше, если участники будут пропускать несущественные для себя вопросы, чем рисовать&amp;nbsp;чертиков.&lt;/li&gt; &lt;li&gt;&lt;em&gt;Если в&amp;nbsp;процессе обсуждения поднимается новый вопрос, план ни&amp;nbsp;в&amp;nbsp;коем случае не&amp;nbsp;меняется&amp;nbsp;на&amp;nbsp;лету.&lt;/em&gt; Вместо этого назначается отдельное обсуждение с&amp;nbsp;собственным планом и&amp;nbsp;отдельными участниками. Если участники будут уверены в&amp;nbsp;том, что план не&amp;nbsp;изменят на&amp;nbsp;лету, они смогут пропустить несущественные для них&amp;nbsp;вопросы.&lt;/li&gt; &lt;li&gt;&lt;em&gt;На&amp;nbsp;любом совещании должен быть председатель. Его задача следить за&amp;nbsp;соблюдением регламента, прерывать затянувшиеся обсуждения и&amp;nbsp;вести протокол. По&amp;nbsp;окончании совещания протокол выдается всем участникам или&amp;nbsp;публикуется.&lt;/em&gt; Протокол нужен обязательно. Иначе уже через полчаса непонятно почему было принято &lt;nobr&gt;какие-то&lt;/nobr&gt; решения, а&amp;nbsp;на&amp;nbsp;следующий день забываются и&amp;nbsp;сами&amp;nbsp;решения.&lt;/li&gt; &lt;li&gt;&lt;em&gt;Любой участник может поручить любому другому участнику говорить от&amp;nbsp;своего&amp;nbsp;имени.&lt;/em&gt; Это позволит сэкономить время самым продуктивным сотрудникам, способным сделать за&amp;nbsp;время совещания &lt;nobr&gt;что-то&lt;/nobr&gt; более&amp;nbsp;полезное.&lt;/li&gt; &lt;li&gt;Если &lt;nobr&gt;кто-то&lt;/nobr&gt; из&amp;nbsp;приглашенных счел возможным не&amp;nbsp;придти, и&amp;nbsp;не&amp;nbsp;доверил свой голос другим участникам, это автоматически означает его согласие с&amp;nbsp;любым принятым решением.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
Более подробно этот подход описан у&amp;nbsp;ДеМарко в&amp;nbsp;&amp;laquo;Deadline&amp;raquo;. Там&amp;nbsp;же есть и&amp;nbsp;примеры удачно проведенных&amp;nbsp;совещаний.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-3301748601505615072?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/03/meeting.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-1153397262754872144</guid><pubDate>Mon, 17 Mar 2008 04:51:00 +0000</pubDate><atom:updated>2008-03-18T14:35:57.807+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">management</category><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Code&amp;nbsp;conventions&lt;/h2&gt;
Через пару недель проекта, особенно если оный был расчитан на&amp;nbsp;достаточно долгий срок, всегда находится гаврик, считающий, что для успешного существования проекта необходимо немедленно, пока не&amp;nbsp;слишком поздно, написать code conventions. Не&amp;nbsp;будучи вовремя остановленным, он&amp;nbsp;за&amp;nbsp;один присест порождает страниц, эдак, двадцать, заполненных беспорядочными правилами,&amp;nbsp;вроде:
&lt;blockquote&gt;
Имена переменных должны удовлетворять&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/CamelCase"&gt;camelCase&lt;/a&gt;;
Недопустимо обращение через две точки, во&amp;nbsp;имя закона&amp;nbsp;Деметры;
Бинарные операторы должны быть отделены пробелами с&amp;nbsp;обоих&amp;nbsp;сторон;
В&amp;nbsp;сеттерах нужно использовать&amp;nbsp;this;
Забытая в&amp;nbsp;микроволновке еда считается&amp;nbsp;общей;
&lt;nobr&gt;и т.д.&lt;/nobr&gt; &lt;/blockquote&gt;
Обычно такой документ живет ровно две недели, затем перемещается в&amp;nbsp;архив, извлекаемый оттуда только для того чтобы продемонстрировать его новичкам. Поскольку документ изначально не&amp;nbsp;соблюдался и&amp;nbsp;разительно отличается от&amp;nbsp;негласных соглашений принятых в&amp;nbsp;коде, новички тоже откладывают его в&amp;nbsp;сторону. От&amp;nbsp;проекта к&amp;nbsp;проекту такая ситуация повторяется с&amp;nbsp;завидной регулярностью. Причина в&amp;nbsp;том, что любая дополнительная активность, как написание комментариев, проверка кода на&amp;nbsp;соответствие соглашениям, комментарии к&amp;nbsp;коммиту в&amp;nbsp;VCS требует дополнительных затрат. Если преимущества от&amp;nbsp;этих действий неочевидны человек склонен &amp;laquo;забывать&amp;raquo; их&amp;nbsp;делать. Поэтому введение в&amp;nbsp;проекте code conventions автоматически означает появление роли следящего за&amp;nbsp;их&amp;nbsp;соблюдением. Для того чтобы решить проблему недостаточно опубликовать документ, каким&amp;nbsp;бы хорошим он&amp;nbsp;ни&amp;nbsp;был. Нужна постоянная активность, &amp;nbsp;это везде так. Отлично, но&amp;nbsp;следить за&amp;nbsp;соблюдением правил, описанных на&amp;nbsp;двадцати страницах, отнимает прорву времени. И&amp;nbsp;это вторая причина, по&amp;nbsp;которой затея с&amp;nbsp;code conventions&amp;nbsp;проваливается.

Теперь, когда мы&amp;nbsp;добрались до&amp;nbsp;сути, мы&amp;nbsp;можем сформулировать рекомендации для написания соглашений. Но, сперва, давайте обозначим проблему, которую мы&amp;nbsp;собираемся решать. Разные программисты предпочитают разные стили написания кода. Если несколько разных стилей смешиваются в&amp;nbsp;одном файле, этот файл становится трудным для чтения. Разнобой в&amp;nbsp;стиле выглядит неряшливо и&amp;nbsp;поощряет неряшливость уже в&amp;nbsp;самом коде. Соглашения о&amp;nbsp;коде призваны устранять неоднозначности в&amp;nbsp;выборе несущественных деталей оформления, в&amp;nbsp;идеале сужая пространство вариантов до&amp;nbsp;одного. Как&amp;nbsp;же писать code&amp;nbsp;conventions?

Определите кто ваши программисты. Кто сказал: &amp;laquo;Они все здесь&amp;raquo;? А&amp;nbsp;как&amp;nbsp;же библиотеки, которыми вы&amp;nbsp;пользуетесь. Их&amp;nbsp;интерфейсы должны вашим соглашениям. Естественно, вы&amp;nbsp;не&amp;nbsp;в&amp;nbsp;силах заставить сторонних разработчиков соблюдать ваши стандарты, но&amp;nbsp;вы&amp;nbsp;всегда можете подогнать стандарты под них. В&amp;nbsp;противном случае использование библиотек будет выбиваться из&amp;nbsp;общего стиля и&amp;nbsp;увеличивать энтропию&amp;nbsp;проекта.

Все соглашения можно разделить на&amp;nbsp;две части: поддающиеся автоматическому переформатированию и&amp;nbsp;не&amp;nbsp;поддающиеся. Переформатированию поддаются такие вещи как количество пробелов, формирование отступов, расположение скобок, длина строк&amp;nbsp;&lt;nobr&gt;и т.п.&lt;/nobr&gt;
Лучший способ их&amp;nbsp;публикации, это положить в&amp;nbsp;VCS файл настроек для IDE. Можно также настроить VCS сервер на&amp;nbsp;вызов автоформаттера перед каждым коммитом и&amp;nbsp;забыть о&amp;nbsp;них навсегда. Описывать их&amp;nbsp;в&amp;nbsp;документе совершенно не&amp;nbsp;обязательно. Не&amp;nbsp;стоит поручать человеку делать то, что сумеет машина. Не&amp;nbsp;поддаются переформатированию такие вещи, как имена файлов, переменных, пакетов и&amp;nbsp;классов, стиль работы с&amp;nbsp;исключениями, расположение файлов. Продвинутые автоформаттеры умеют отлавливать ошибки, но исправлять из автоматически невозможно. Поэтому все что не&amp;nbsp;поддается автоформатированию придется описать в&amp;nbsp;документе&amp;nbsp;явно.

Документ содержащий code conventions не&amp;nbsp;должен быть большим. Четырех страниц более чем достаточно. По&amp;nbsp;крайней мере ограничение объема избавит вас от&amp;nbsp;соблазна включать в&amp;nbsp;документ правила пользования&amp;nbsp;микроволновкой.
Если есть возможность, не&amp;nbsp;изобретайте велосипедов. Почти всегда можно взять готовые документы у&amp;nbsp;разработчиков языка или людей в&amp;nbsp;нем авторитетных. Вот несколько таких примеров:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://java.sun.com/docs/codeconv/"&gt;Java&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://perldoc.perl.org/perlstyle.html"&gt;&lt;acronym title="Practical Extraction and Reporting Language" lang="en"&gt;&lt;acronym title="Practical Extraction and Reporting Language" lang="en"&gt;&lt;acronym title="Practical Extraction and Reporting Language" lang="en"&gt;&lt;acronym title="Practical Extraction and Reporting Language" lang="en"&gt;&lt;acronym title="Practical Extraction and Reporting Language" lang="en"&gt;Perl&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms229042.aspx"&gt;Microsoft VB.NET,&amp;nbsp;C#&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.python.org/dev/peps/pep-0008/"&gt;Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.kernel.org/doc/Documentation/CodingStyle"&gt;C++&amp;nbsp;Linux&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
Утилиты для автоформатирования&amp;nbsp;кода:
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://perltidy.sourceforge.net/"&gt;PerlTidy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://csstidy.sourceforge.net/"&gt;&lt;acronym title="Cascading Style Sheets" lang="en"&gt;&lt;acronym title="Cascading Style Sheets" lang="en"&gt;&lt;acronym title="Cascading Style Sheets" lang="en"&gt;&lt;acronym title="Cascading Style Sheets" lang="en"&gt;&lt;acronym title="Cascading Style Sheets" lang="en"&gt;CSS&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt; Tidy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://tidy.sourceforge.net/"&gt;&lt;acronym title="HyperText Markup Language" lang="en"&gt;&lt;acronym title="HyperText Markup Language" lang="en"&gt;&lt;acronym title="HyperText Markup Language" lang="en"&gt;&lt;acronym title="HyperText Markup Language" lang="en"&gt;&lt;acronym title="HyperText Markup Language" lang="en"&gt;HTML&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt;&lt;/acronym&gt; Tidy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://sourceforge.net/projects/uncrustify/"&gt;Uncrustify Code Beautifier (C, C++. C#, Java, D,&amp;nbsp;PAWNh)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-1153397262754872144?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/03/code-code-conventions.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-1309104835430685602</guid><pubDate>Tue, 11 Mar 2008 09:30:00 +0000</pubDate><atom:updated>2008-03-11T18:44:48.540+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">open source</category><category domain="http://www.blogger.com/atom/ns#">management</category><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Как выбирать библиотеку&lt;/h2&gt;
Каждый раз сталкиваясь с&amp;nbsp;новой задачей мы&amp;nbsp;задаем себе вопрос: Стоит&amp;nbsp;ли ее&amp;nbsp;решать? Возможно, удастся использовать готовое решение. В&amp;nbsp;этом сила программирования, для большинства задач, таких как вывод суммы прописью или реализация протокола &lt;a href="http://en.wikipedia.org/wiki/Z39.50"&gt;Z39.50&lt;/a&gt;&amp;nbsp;давно существуют готовые решения. Но,&amp;nbsp;если решений несколько, как выбрать одно из&amp;nbsp;них? Или может быть отказаться от&amp;nbsp;всех них и&amp;nbsp;реализовать задачу самому? Для многих такой выбор оказывается черезмерно сложным и&amp;nbsp;они скатываются к&amp;nbsp;одной из&amp;nbsp;двух крайностей: предпочитают во&amp;nbsp;всех случаях готовые средства или всегда изобретают велосипеды. Однако, разумные люди предпочитают объективно оценивать ресурсы. Я&amp;nbsp;определил следующий набор критериев:
&lt;ul&gt;
&lt;li&gt;Большинство библиотек плохо работают на&amp;nbsp;грани своей области применимости. Например, все известные мне попытки применить Hibernate или ActiveRecords из&amp;nbsp;Ruby on&amp;nbsp;Rail к&amp;nbsp;сложной унаследованной базе, вдобавок денормализованной достигали цели только посредством тяжких ухищрений. Убедитесь, что вы&amp;nbsp;собираетесь использовать библиотеку именно так, как это запланировано разработчиками. В&amp;nbsp;противном случае, выбросьте ее&amp;nbsp;сразу. Все равно она для вас не&amp;nbsp;подходит.&lt;/li&gt;

&lt;li&gt;Срок жизни кода в&amp;nbsp;среднем составляет 5-10&amp;nbsp;лет до&amp;nbsp;того момента как он&amp;nbsp;морально устареет и&amp;nbsp;будет выброшен. Это тот срок, когда кому-то нужно будет поддерживать код. Соответственно поддержка библиотеки должна быть расчитана на&amp;nbsp;тот-же срок. Будет неприятно, если через пять лет в&amp;nbsp;критичной библиотеке найдется критичный баг, который невозможно исправить, поскольку разработчики библиотеки давно испарились вместе с&amp;nbsp;исходниками. Для коммерческих библиотек с&amp;nbsp;закрытыми исходниками это может стать серьезной проблемой. Для Open Source такой гарантией может стать поддержка большого сообщества или серьезной конторы вроде IBM, Intel или Sun&lt;/li&gt;

&lt;li&gt;Критичный для функционала проекта должен писаться только собственноручно хотя&amp;nbsp;бы на&amp;nbsp;один уровень вглубь. Например, если мы&amp;nbsp;занимаемся разработкой GIS системы, мы&amp;nbsp;можем взять набор классов с&amp;nbsp;представлением географических координат из&amp;nbsp;десятков библиотек. Но&amp;nbsp;координаты расползутся по&amp;nbsp;всему приложению и&amp;nbsp;заменить библиотеку когда она перестанет удовлетворять будет практически невозможно. Модели предметной области, бизнес правила, уникальные для вашей предметной области элементы интерфейса должны разрабатывать только вы&amp;nbsp;сами. В&amp;nbsp;противном случае у&amp;nbsp;вас есть все шансы при очередном изменении требований столкнуться с&amp;nbsp;ограниченностью библиотеки. К&amp;nbsp;сожалению разработчики библиотек этого не&amp;nbsp;понимают и&amp;nbsp;норовят запихнуть свои &amp;laquo;фреймворки&amp;raquo;, &amp;laquo;модели предметной области&amp;raquo; и&amp;nbsp;&amp;laquo;наборы бизнес правил&amp;raquo; во&amp;nbsp;все подходящие, на&amp;nbsp;их&amp;nbsp;взгляд, проекты&lt;/li&gt;

&lt;li&gt;Любая библиотека имеет склонность врастать в&amp;nbsp;продукт и&amp;nbsp;изменять его вокруг себя. Выбор, например, log4* навсегда определит вашу стратегию логгирования. Хорошая библиотека, изменит продукт в&amp;nbsp;лучшую сторону, плохая только ухудшит. Стоит следить, чтобы архитектурные принципы используемых библиотек были сходны с&amp;nbsp;вашими, code conventions не&amp;nbsp;слишком отличались, а&amp;nbsp;политика релизов была ясной и&amp;nbsp;прозрачной. Плохое регрессионное тестирование библиотек или нарушение обратной совместимости приведет к&amp;nbsp;шаманствам с&amp;nbsp;зависимостями при сборке проекта и&amp;nbsp;багам при обновлении библиотек. Важно понимать, что библиотека это не&amp;nbsp;просто набор интерфейсов, а&amp;nbsp;живой организм со&amp;nbsp;своими особенностями.&lt;/li&gt;
&lt;/ul&gt;

Для того чтобы руководствоваться этими принципами на&amp;nbsp;практике есть простой чеклист:
&lt;ul&gt;
&lt;li&gt;Функционал реализуемый библиотекой критичен для проекта?&lt;/li&gt;
&lt;li&gt;Насколько сложно написать собственный код по&amp;nbsp;сравнению с&amp;nbsp;использованием библиотеки?&lt;/li&gt;
&lt;li&gt;Является&amp;nbsp;ли библиотека open source либо предоставляют&amp;nbsp;ли производители какие-то осязаемые гарантии?&lt;/li&gt;
&lt;li&gt;Насколько велико сообщество пользователей библиотеки?&lt;/li&gt;
&lt;li&gt;Как часто выходят релизы и&amp;nbsp;фиксятся баги?&lt;/li&gt;
&lt;li&gt;Насколько хорош код библиотеки?&lt;/li&gt;
&lt;li&gt;Насколько хороша документация?&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-1309104835430685602?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/03/blog-post_11.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-2506851530472457479</guid><pubDate>Mon, 03 Mar 2008 08:33:00 +0000</pubDate><atom:updated>2008-03-03T14:38:51.006+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">stupid translate</category><title /><description>Очередной пример "замечательного" перевода. Фильм &lt;a href="http://imdb.com/title/tt0443706/"&gt;Zodiac&lt;/a&gt;, фраза: "His ashes were scattered by his family in San Francisco Bay", перевод: "Его статьи и записи были проданы его семьей с аукциона E-Bay". Я нашел только два совпадающих слова. Интересно, что курил переводчик?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-2506851530472457479?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/03/blog-post.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-8307615389766961481</guid><pubDate>Tue, 26 Feb 2008 13:18:00 +0000</pubDate><atom:updated>2008-02-26T20:19:37.312+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Ноль это бесконечность, а&amp;nbsp;минус единица это ноль&lt;/h2&gt;

В&amp;nbsp;некотором отделе некоторой компании разрабатывали продукты, да&amp;nbsp;не&amp;nbsp;простой а&amp;nbsp;коробочные. Целые отдел маркетинга днями и&amp;nbsp;ночами продукты те&amp;nbsp;толстым буржуям продавал, да&amp;nbsp;лицензии для них генерировал. И&amp;nbsp;были те&amp;nbsp;лицензии не&amp;nbsp;простые, а&amp;nbsp;с&amp;nbsp;ограниченным сроком годности. Кому на&amp;nbsp;месяц, кому на&amp;nbsp;полгода, а&amp;nbsp;кому и&amp;nbsp;год. Жили они так не&amp;nbsp;тужили, пока отдел маркетинга не&amp;nbsp;задумался, а&amp;nbsp;что это мы&amp;nbsp;продукты по&amp;nbsp;одному продаем, несолидно. Cтали они продукты на&amp;nbsp;части разбирать в&amp;nbsp;ящики складывать и&amp;nbsp;ящики продавать. А&amp;nbsp;на&amp;nbsp;ящиках тех златом, али серебром писать слова иностранные. Все&amp;nbsp;бы ничего, да&amp;nbsp;продукт-то программный, а&amp;nbsp;значит ящики&amp;nbsp;&amp;#151; фикция одна. Дело только в&amp;nbsp;лицензиях, в&amp;nbsp;которых для каждой части строчка отдельная добавилась. А&amp;nbsp;в&amp;nbsp;строчке той цифирь, означающая сколько частей в&amp;nbsp;ящике. Тут&amp;nbsp;бы им&amp;nbsp;жить поживать, да&amp;nbsp;встретился местный барин на&amp;nbsp;какой-то конференции с&amp;nbsp;барином иностранным, другом старым. Тот-то ему и&amp;nbsp;пожаловался: &amp;laquo;Мы,&amp;nbsp;&amp;#151; говорит,&amp;nbsp;&amp;#151; друзья старые, а&amp;nbsp;твои архаровцы меня заставляют на&amp;nbsp;каждую новую часть отдельную лицензию делать. А&amp;nbsp;у&amp;nbsp;меня этих лицензий уже два камаза с&amp;nbsp;прицепом&amp;raquo; Призвал барин программистов пред светлы очи и&amp;nbsp;повелел бесконечную лицензию выдумать. Но&amp;nbsp;поскольку призывал он&amp;nbsp;всех по&amp;nbsp;отдельности, разные продукты разное выдумали, потому как нет такой цифири &amp;laquo;бесконечность&amp;raquo;. Один решил вместо бесконечности &amp;laquo;0&amp;raquo; писать, все равно на&amp;nbsp;ноль штук лицензия не&amp;nbsp;нужна. Другой решил, что ноль ему пригодится и&amp;nbsp;&amp;laquo;-1&amp;raquo; под такое дело зарезервировал. Ну&amp;nbsp;а&amp;nbsp;третий долго не&amp;nbsp;думая самое большое число, которое знал, использовал. Долго&amp;nbsp;ли, коротко&amp;nbsp;ли, придумал отдел маркетинга новую забаву. Теперь пока лицензия не&amp;nbsp;кончилась, ее&amp;nbsp;стало можно переоформить: частей добавить или изъять. Ну&amp;nbsp;а&amp;nbsp;раз изъять, то&amp;nbsp;и&amp;nbsp;нули в&amp;nbsp;строках стали возможны. Пришлось программистам еще раз напрячься, да&amp;nbsp;ноль выдумать. 
Ну&amp;nbsp;а&amp;nbsp;когда стали правила лицензирования в&amp;nbsp;отдельный продукт собирать, запестрел он&amp;nbsp;правилами вроде &amp;laquo;если продукт один ноль это бесконечность, а&amp;nbsp;минус единица это ноль, а&amp;nbsp;ежели другой, то&amp;nbsp;все наоборот&amp;raquo;. И&amp;nbsp;набралась таких правил толстая книга. Мораль, прежде чем изобретать велосипед, посмотри уже изобретенные, да&amp;nbsp;посоветуйся с&amp;nbsp;коллегами.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-8307615389766961481?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/02/blog-post_26.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-7278771874351404764</guid><pubDate>Tue, 19 Feb 2008 10:28:00 +0000</pubDate><atom:updated>2008-02-19T18:14:20.861+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">management</category><title /><description>&lt;h1&gt;У каждого бага есть имя, фамилия и отчество&lt;/h1&gt;

Был такой замечательный человек, Лазарь Моисеевич Каганович. Сейчас как-то принято ругать всю сталинскую эпоху скопом, поэтому Лазаря Моисеевича чаще всего вспоминают как  в связи со "сталинскими" репрессиями, коллективизацией  сельского хозяйства на Украине и сносом старых зданий в Москве. Умер Каганович в 1991 году, в возрасте 97 лет, совсем немного недотянув до развала СССР. Так вот, в бытность свою наркомом путей сообщения, Каганович произнес замечательную фразу: "У каждой аварии есть имя, фамилия и отчество". Слово не разошлось с делом, начались служебные расследования и многие нерадивые, как тогда было заведено, были обвинены во вредительстве и отстранены. Результат: в начале Войны при эвакуации, несмотря на страшную перегрузку всей транспортной системы, не произошло ни одной серьезной аварии.  На мой взгляд, это самый выдающийся результат, который вообще возможен. 

К сожалению эту замечательную фразу в последнее время забыли и уж тем более не принимают как руководство к действию. Сейчас принято считать, что бывают ситуации, в которых никто не виноват. Они как-бы происходят сами собой, безо всякого человеческого вмешательства либо считаются просчетом всего коллектива, всего общества. Рванула чернобыльская АЭС, виновата "некомпетентность". Застрелился новобранец, виноваты "деды". Выпустили релиз с блокером, виновата команда. И как-то так получается, что никто конкретно и не виноват. А раз никто не виноват, так действительно накосячивший никогда не осознает совей ошибки и обречен повторять ее снова и снова.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-7278771874351404764?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/02/blog-post.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-36430695.post-672030960494076203</guid><pubDate>Fri, 01 Feb 2008 06:58:00 +0000</pubDate><atom:updated>2008-02-01T13:09:03.028+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">software_design</category><title /><description>&lt;h2&gt;Primary keys in life&lt;/h2&gt;
Те, кто изучал реляционные базы данных в теории обычно убеждены в том, что некоторые виды объектов по самой своей природе обладают некоторым привычным ключом. Обычно приводят такие примеры: человек &amp;#151; серия и номер паспорта или номер социального страхования или ИНН; книга &amp;#151; ISBN и так далее. На первый взгляд кажется, что эти поля подходят для первичного ключа. При некоторых допущениях так и есть. Однако так ли это на самом деле? Рассмотрим того же человека:
&lt;ul&gt;
&lt;li&gt;Серия и паспорт человека меняется как минимум трижды в течение жизни;&lt;/li&gt;
&lt;li&gt;У книги может быть как несколько номеров ISBN, так и не быть ни одного;&lt;/li&gt;
&lt;li&gt;Бывают люди без ИНН и номера социального страхования&lt;/li&gt;
&lt;/ul&gt;
Однако на этом проблему не заканчиваются. Что будет если нам придется импортировать данные из сторонних систем? Можем ли мы использовать первичные ключи для этого? Предположим, мы импортируем список людей содержащий имена, даты рождения, данные паспорта и СНИЛС. Совпадение каких полей может служить однозначной идентификации? 
Правильный ответ: только совпадение всех полей позволяет однозначно связать две записи. Рассмотрим пример подробнее. 
У нас есть несколько кластеров данных в каждой записи:
1. Тройка фамилия-имя-отчество
2. Дата рождения
3. Данные паспорта (серия-номер-дата выдачи-выдавший орган)
4. Номер социального страхования СНИЛС
Я намеренно упустил из виду существование других документов удостоверяющих личность, лиц без гражданства, иностранных граждан и т.п. Будет достаточно одного простейшего случая. 

Из предметной области мы знаем:
&lt;ul&gt;
&lt;li&gt;У человека может измениться фамилия, что происходит довольно часто, имя или отчество, что происходит занчительно реже;&lt;/li&gt;
&lt;li&gt;В особых случаях у человека может измениться дата рождения;&lt;/li&gt;
&lt;li&gt;Смена фамилии, имени или даты рождения влечет смену документа удостоверяющего личность&lt;/li&gt;
&lt;li&gt;Человек может получить новый паспорт с совершенно другими данными, никак не связанными с предыдущим;&lt;/li&gt;
&lt;li&gt;Человек может получить другой номер ИНН, что происходит довольно редко, но происходит;&lt;/li&gt;
&lt;li&gt;Человек может получить другой СНИЛС, что происходит довольно регулярно;&lt;/li&gt;
&lt;li&gt;При внесении данных в базу возможны ошибки оператора;&lt;/li&gt;
&lt;li&gt;На больших объемах данные проявляется "эффект больших чисел": разные люди с частично совпадающими данными.&lt;/li&gt;
&lt;/ul&gt;

Этого уже достаточно чтобы понять &amp;#151; никакого первичного ключа здесь нет. Более того, как только нам потребуется вносить данные в систему мы непременно столкнемся с проблемой идентификации, которую невозможно разрешить автоматически. Единственный выход &amp;#151; система синхронизации на основе правил и ручного анализ спорных случаев оператором. Любые попытки изобрести первичный ключ из любой комбинации полей приведут к отсечению части вполне законных use cases предметной области, как это произошло 
&lt;a href="http://ru.thedailywtf.com/Articles/Razluchennbe-bliznecb.aspx"&gt;здесь&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/36430695-672030960494076203?l=miroff.blogspot.com'/&gt;&lt;/div&gt;</description><link>http://miroff.blogspot.com/2008/02/primary-keys-in-life.html</link><author>noreply@blogger.com (Miroff)</author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item></channel></rss>
