<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Анти-спам (и анти-спэм)</title><link>http://blogs.technet.com/antispam/default.aspx</link><description>Стратегия, тактика, технология и философия борьбы со спэмом.</description><dc:language>ru</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Приключения с LINQ-ом.</title><link>http://blogs.technet.com/antispam/archive/2008/09/16/linq.aspx</link><pubDate>Tue, 16 Sep 2008 05:32:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3124578</guid><dc:creator>borisk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/antispam/comments/3124578.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=3124578</wfw:commentRss><description>&lt;P&gt;Вот такая задача.&lt;/P&gt;
&lt;P&gt;Дан список отрезков на прямой, inputRanges. И дан другой список, privateRanges. Задача состоит в том, чтобы исключить из списка inputRanges все такие отрезки, которые лежат внутри каких либо отрезков списка privateRanges (вершины включаются). Все элементы privateRanges имеют попарно пустое пересечение.&lt;/P&gt;
&lt;P&gt;T.е. если есть отрезок iR = [2, 5] в inputRanges и отрезок pR = [1, 6], iR нужно выбросить из списка. &lt;/P&gt;
&lt;P&gt;Дан класс MyRange:&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; lower;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; upper;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; MyRange(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; lower, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; upper)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.lower = lower;&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.upper = upper;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;override&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ToString()&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.Format(&lt;/FONT&gt;&lt;FONT color=#a31515 size=2&gt;&lt;FONT color=#a31515 size=2&gt;"({0}, {1})"&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;this&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.lower, &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;this&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.upper);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Задача простая (&lt;STRONG&gt;казалось бы!&lt;/STRONG&gt;) Пользуемся оператором Except имеющиься в LINQe.&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;static&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;void&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; Main(&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;string&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[] args)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; [] privateRanges = {&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(1, 10), &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (25, 30), &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ( 40, 50 ), &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; ( 61, 63 ) };&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;[] inputRanges = { &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(2, 8), &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(31, 39), &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(26, 28),&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(41, 49), &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(62, 62), &lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&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;&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; new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;(70, 80) };&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RangeCompare&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; rc = &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;RangeCompare&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;();&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; IEnumerable&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt; cleanedRanges = inputRanges.Except(privateRanges, rc);&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; r &lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;in&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; cleanedRanges)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.WriteLine(r);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;.ReadKey();&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Единственное что осталось - это имплементация RangeCompare, наследующего IEqualityComparer&amp;lt;MyRange&amp;gt;, как написано в документации.&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;class&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;RangeCompare&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; : &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;IEqualityComparer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;#region&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; IEqualityComparer&amp;lt;MyRange&amp;gt; Members&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;bool&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;IEqualityComparer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;.Equals(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; x, &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; y)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; (y.lower &amp;gt;= x.lower &amp;amp;&amp;amp; y.upper &amp;lt;= x.upper);&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;IEqualityComparer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;.GetHashCode(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; obj)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;FONT size=2&gt;obj.ToString().GetHashCode();&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;}&lt;/P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;
&lt;P&gt;#endregion&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;
&lt;P&gt;}&lt;/P&gt;
&lt;P&gt;Здесь функция Equals несколько неортодоксальна. Но ничто не мешает нам вложить свой смысл в функцию Equals(). (Один важный момент: наша функция не симметрична, поэтому нужно знать как работает оператор Except и что именно означают x и у. В этом недостаток решения).&lt;/P&gt;
&lt;P&gt;Компилируем, запускаем и ожидаем на выводе:&lt;/P&gt;
&lt;P&gt;(31, 39)&lt;/P&gt;
&lt;P&gt;(70, 80).&lt;/P&gt;
&lt;P&gt;Но не тут-то было! На выводе получаем весь массив inputRanges! В чем же дело? Тут замечаем, что если добавить в inputRanges элемент, который содержится в privateRanges (например (1, 10)). Он будет выброшен совершенно правильно. Т.е. наша имплементация IEqualityComparer работает, но как-то странно. Что-то еще кроме функции Equals() заранее решает, что наши объекты не "равны". Вот это "что-то" нужно исключить и тогда все видимо заработает. Кандидат очевидный. Это - функция GetHashCode() имплементируя которую мы явно перестарались. Т.е., как и положено, мы стараемся вернуть разный хэш&amp;nbsp;код для разных объектов. Проблема в том, что "разность" наших объектов совсем не подразумевает равенство. Если замысел создателей LINQa понят правильно, то в случае когда GetHashCode() для объектов&amp;nbsp;x и&amp;nbsp;y возвращает одно и то же значение, "коллизия" разрешается вызовом функции Equals(). Поэтому переписываем функцию GetHashCode() таким образом, чтобы она убралась с дороги. Т.е. всегда возвращала одно значение.&lt;/P&gt;&lt;FONT size=2&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;int&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; &lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;IEqualityComparer&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;lt;&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&amp;gt;.GetHashCode(&lt;/FONT&gt;&lt;FONT color=#2b91af size=2&gt;&lt;FONT color=#2b91af size=2&gt;MyRange&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; obj)&lt;/P&gt;
&lt;P&gt;{&lt;/P&gt;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT color=#0000ff size=2&gt;&lt;FONT color=#0000ff size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt; 0;&lt;/P&gt;
&lt;P&gt;}&lt;/P&gt;&lt;/FONT&gt;
&lt;P&gt;Ура! Заработало.&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3124578" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/antispam/archive/tags/LINQ/default.aspx">LINQ</category></item><item><title>Новое... и из истории борьбы со спэмом в Майкрософте.</title><link>http://blogs.technet.com/antispam/archive/2008/09/11/3122719.aspx</link><pubDate>Fri, 12 Sep 2008 01:16:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3122719</guid><dc:creator>borisk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/antispam/comments/3122719.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=3122719</wfw:commentRss><description>&lt;P&gt;С 1го сентября с.г., я больше не работаю в Семейной Безопасности. Снова буду в команде, занимающейся так или иначе спэмом. На этот раз наша команда будет заниматься распознованием БотНэтов. Все видимо знают, что такое БотНэты и не стоит об этом много говорить. Наши исследователи разработали кучу всяких алгоритмов для выявления и классификации этих вредных вещей. Все эти процессы основаны на обработке гигабайт данных в секунду, поэтому система, которую мы строим, фактически&amp;nbsp;суперкомпьютер. В идеале, увиденном создателем всего этого Натаном Хауэллом, 100 000 машин работающих вместе...&lt;/P&gt;
&lt;P&gt;И вот кстати... Натан Хауэлл покидает нашу компанию и идет дальше куда-то заниматься дистрибутивынми исчислениями и машинным обучением. О нем нельзя не сказать пару слов. Пришел Натан в нашу компанию 10 лет назал, 18летним парнишкой, без какого либо "верхнего" образования. Первая написанная им в Майкрософте программа, в течение 15 минут удаляла всю почту, шедшую через MSN. По его словам: "true != false, поди разберись!" Видимо тут и проявилась его любовь к спэму. Т.е. фактически удалению 90% почты, идущей на данный домэйн.&lt;/P&gt;
&lt;P&gt;Натан начал заниматься спэмом, точно не знаю в каком году, но встречал огромное противодействие мэнеджмента. Мол знай свою работу и не суйся куда не просят. Вместе с двумя сослуживцами и друзьями, в гостинной одного из них, начали они создавать первый спэм фильтр и обучающую его систему. К концу 2002 года, написали письмо Биллу с просьбой выделить им место под оффисы&amp;nbsp;и 6 млн. Получили согласие. Так и родилась к 2003му году MSN ATS (Anti-spam Technology and Strategy) в которую в декабре 2003го года пришел и я. Потом были довольно нервозные полгода, когда ребят таскали на ревью к Биллу каждый месяц. Спэм вдруг стал приоритетом.&lt;/P&gt;
&lt;P&gt;Написанный Нэйтом спэм фильтр&amp;nbsp;вышел, Хотмэйл и Аутлук во всю им пользовались и получали восторженные отзывы в прессе. Сейчас (я конечно же необъективен, но) мне кажется это лучший из фильтров на рынке (в комбинации со всеми блок-списками и т.д). На свой МС адрес я практически не получаю никакого спэма, впрочем как и на хотмэйловский. Г-мэйл работает неплохо, хотя Нэйт ворчит, мол, слишком много все-таки приходит под ярлык с названием "Спэм". Яху! меня совсем не впечатляет. И сегодня ядром этого фильтра является код, написанный тогда.&lt;/P&gt;
&lt;P&gt;Еще Нэйт учил меня различать виды Текилы. Из поездки в Мексику привез 26 бутылок. Мы разошлись в оценке лучшей водки. Он предпочитает Левел, а я - Серого Гуся.&amp;nbsp;Возвращаясь из разных поездок,&amp;nbsp;мы обмениваемся историями о разных смешных мартини, приготовленных в местах посещения. Вот решили недавно, что это надо фотографировать: (маслины вместо оливок, оливки вместе с лимонной кожурой, коктейльная вишенка вместо оливок, пластиковый стаканчик и т. д.)&lt;/P&gt;
&lt;P&gt;Нэйт знает все и сразу. Я могу сегодня забежать к нему и спросить: Как пользовться счетчиком средних значений (perfromance counter) в .NETe. И он мне сразу расскажет, как обойти имеющийся там баг. А через минуту с такой же легкостью может рассказать что-то о Kernel APIs. Ну кто из программистов точно помнит как писать event handling в ATL COM. Для этого же есть документация. Ну допустим не делал я этого уже более полу года. Так всех деталей и не помню. А Нэйт помнит.&lt;/P&gt;
&lt;P&gt;Жалко терять такого парня. Завтра&amp;nbsp;отходная, приношу бутылку Левела.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3122719" width="1" height="1"&gt;</description></item><item><title>Windows 7 &amp; Family Safety</title><link>http://blogs.technet.com/antispam/archive/2008/06/19/windows-7-family-safety.aspx</link><pubDate>Fri, 20 Jun 2008 01:12:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3074676</guid><dc:creator>borisk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/antispam/comments/3074676.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=3074676</wfw:commentRss><description>&lt;P&gt;В следующем выпуске Windows (пока намеченном на 2009й год), начальство in sua magnifica sapientia, решило, что мы должны быть больее интегрированы с Windows Live по части безопасности семьи. Так это по-крайней мере озвучивается. На самом же деле, Майкрософт сильно настаивает на том, чтобы в следующей версии операционной системы пользовались не собственными, а Windows Live Parental Controls.&lt;/P&gt;
&lt;P&gt;Практически это означает:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Из Windows Parental Controls исчезнет Web Filtering, поскольку он уже имеется в Windows Live, зачем нужен лишний?&lt;/LI&gt;
&lt;LI&gt;Из Windows Parental Controls исчезнет Activity Reproting (это где говорят кто и что делал), поскольку это тоже имеется в Windows Live.&lt;/LI&gt;
&lt;LI&gt;Останутся: контроль за играми, за программами, за временем пользования.&lt;/LI&gt;
&lt;LI&gt;В первый раз, когда пользователь (родитель) захочет сконфигурировать Parental Controls, ему объяснят, что основные вещи (Web filtering, Activity reprorting) теперь дело 3х лиц. Например Windows Live.&lt;/LI&gt;
&lt;LI&gt;Любой производитель может написать свои собсвтенные Parental Controls (они должны включать все функции Windows Parental Controls) и подсоединить их к Паниели Управления (лень картинку прикреплять).&lt;/LI&gt;
&lt;LI&gt;При этом не будет возможности добавить функции в Windows Parental Controls. Т.е., производитель полностью &lt;EM&gt;заменяет, &lt;/EM&gt;а не &lt;EM&gt;дополняет &lt;/EM&gt;Windows Parental Controls.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;В общем в следующем выпуске Windows Parental Controls будут сильно прихрамывать, поэтому тем кому они нужны придется устанавливать Windows Live.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3074676" width="1" height="1"&gt;</description></item><item><title>Catching up...</title><link>http://blogs.technet.com/antispam/archive/2008/06/09/catching-up.aspx</link><pubDate>Tue, 10 Jun 2008 00:33:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3068528</guid><dc:creator>borisk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/antispam/comments/3068528.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=3068528</wfw:commentRss><description>&lt;P&gt;Давно я ничего сюда не писал... Надо исправляться. Из спэмовских новостей, могу поделиться только одной. Мой приятель Роб, о котором я писал тут, "The Spam King", арестованный в прошлом году, сейчас на свободе до 27го июня, когда его должны приговорить в соответствии с соглашением, достигнутым им с обвинением. Поразительно, что из всех десятков пунктов обвинений, осталось только 3. Два мелких, но вот по одному ему грозит много лет тюрьмы. Впрочем может быть обойдется. Самое смешное это то, что отпали все "электронные" пункты обвинения, а приговаривать его будут за mail fraud. Обман с использованием почты. Мое мнение обо всем этом я уже ни раз тут выражал.&lt;/P&gt;
&lt;P&gt;Наша группа разрослась, меня кидало туда-сюда и выкинуло наконец в Family Safety. Теперь я работаю в команде, которая защищает детей от порнографии на интернете, насилия в играх, необдуманного пользования компьютером, знакомства с любителями детей&amp;nbsp;и вообще от всего-всего, от чего нужно детей защищать.&lt;/P&gt;
&lt;P&gt;Мы считаем, что самым главным тут остается понимание между детьми и родителями. Как бы мы ни старались, если ребенок захотел увидеть порносайт - он его увидит. Но всегда можно поговорить и объяснить, почему этого пока не надо делать. Вот самая лучшая защита, как мне кажется. Вообще должна быть открытость в этих вопросах и пора уже сорвать вуаль ханжеской стыдливости с вопросов секса. Отнестись к ним спокойно, как к неотъемлемой части нашей жизни, каковой они являются. Тогда и дети будут в безопасности и родители будут спать спокойнее. Ну а пока... В следующем посте расскажу, что нового в области семейной безопасности будет в Windows 7.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3068528" width="1" height="1"&gt;</description></item><item><title>Пользовательские Интерфейсы.</title><link>http://blogs.technet.com/antispam/archive/2008/03/04/2961406.aspx</link><pubDate>Wed, 05 Mar 2008 01:47:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:2961406</guid><dc:creator>borisk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/antispam/comments/2961406.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=2961406</wfw:commentRss><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Не относится прямо к спэму, но тут мне выпала честь поработать в UI (интерфейс пользователя). Я обложился книгами о том, как это правильно делается, почитал веселые заметки Артемия Лебедева... И хотя я не дизайнер, я - программист, все же хотелось знать, а что же правильно, что - нет.&lt;/P&gt;
&lt;P&gt;И вот загрузил я одну электронную книгу в формате PDF. К ней нужно было установить Adobe Digital Library (или не помню еще, как это называется). И вот я ее читаю (см. картинку, где в заголовоке окна написано The Essential Guide to User Interface Design). Признаться, гораздо больше чем из книжки, я узнал из самой программы-чтеца. О том какими НЕ должны быть интерфейсы. Наверное этот чтец&amp;nbsp;- худшее, что мне когда либо приходилось видеть в плане UI.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Схема цветов: белое на черном. Любой дизайнер вам скажет сразу, что это очень плохо. (Если конечно вы не тинэйджер, делающий себе страничку на myspace).&lt;/LI&gt;
&lt;LI&gt;Нет полоски меню. Меню - замечательная вещь. Позволяет немедленно сообщить пользователю о возможных действиях и организовать их в четкую иерархию.&lt;/LI&gt;
&lt;LI&gt;Оказывается есть меню! Но оно - кнопка на тулбаре. Видите, где написано Reading. И там длинное меню, о котором тоже можно отдельно писать, и баги там есть ну да ладно...&lt;/LI&gt;
&lt;LI&gt;Кнопки на тулбаре. Можно понять что они, зачем, почему? Запомнить, что они делают? Все они похожи друг на друга как близнецы.&lt;/LI&gt;
&lt;LI&gt;Две почти абсолютно одинаковые кнопки в двух местах (см. внизу). Оказывается, это не две кнопки! Одна из них просто заголовок закладки! (tab). Вам это было сразу понятно? Мне - нет, пока я не воспользовался стоящей за этим функцией.&lt;/LI&gt;
&lt;LI&gt;Не сразу поймешь, как убрать панель слева. А хочется ее убрать если просто читаешь книгу.&lt;/LI&gt;
&lt;LI&gt;Попробуйте догадаться, как увеличивать/уменьшать текст! Даже когда вы нашли Custom size... опцию в меню и нажали на него... После этого с правой стороны тихонько открывается малюсенькое черное окошечко со слайдером, которе еще на этом черном фоне надо заметить! &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;В общем ключница UI делала!&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://blogs.technet.com/photos/borisk/images/2960919/original.aspx" mce_src="http://blogs.technet.com/photos/borisk/images/2960919/original.aspx"&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=2961406" width="1" height="1"&gt;</description></item><item><title>А кто Вы собственно такой?!</title><link>http://blogs.technet.com/antispam/archive/2007/10/18/2194628.aspx</link><pubDate>Thu, 18 Oct 2007 03:08:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:2194628</guid><dc:creator>borisk</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/antispam/comments/2194628.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=2194628</wfw:commentRss><description>&lt;P&gt;"Оставляю вам свою репутацию!" небрежно кинул сэр Питер (Яншин) покидая круг друзей своей супруги леди Тизл (Андровская) в старой МХАТовской постановке "Школы злословия" Шеридана. Вот и мы тоже в нашей группе стали похожи на этот круг друзей и с большим интересом начинаем собирать репутацию, которую нам "оставляют" спамеры. &lt;/P&gt;
&lt;P&gt;Уже давно ни для кого не секрет, что борьба со спамом все больше и больше превращается в борьбу со спамерами. И тут я не имею в виду закон, как средство борьбы: мы знаем, что это дело не столь эффективное, а борьбы с "виртуальными" спамерами. Письмо всегда идет "От" и "К". Вот если бы знать этих нехороших "От" заранее и не допускать их даже на порог&amp;nbsp;нашей сферы обитания "К".&lt;/P&gt;
&lt;P&gt;Есть много способов собирать репутацию. Вот например если кто-то посылает слишком много сообщений за единицу времени - это уже подозрительно. А если мы еще увидим, что большинство из этих сообщений - спам, то уже точно знаем, с кем имеем дело. Даже если он посылает очень мало сообщений, хотя бы даже одно или меньше (за единицу времени), но это оказывается фишинг, мы это тем более учтем. Довольно много обещает изучение "белых" и "черных" списков индивидуальных пользователей. Можно возразить, что при огромной популярности BotNet-ов, система не будет столь эффективной, поскольку можно довольно динамично менять IP. Это так, ну что же. Значит и мы будем быстрее поворачиваться. &lt;/P&gt;
&lt;P&gt;Сейчас существует довольно много хороших людей в интернете, собирающих подобную статистику. &lt;A class="" href="http://www.spamhaus.org/" mce_href="http://www.spamhaus.org"&gt;SpamHaus&lt;/A&gt;&amp;nbsp;пожалуй самая известная организация. Кроме того каждая уважающая себя e-mail&amp;nbsp;служба безусловно имеет свои собственные черные списки. &lt;/P&gt;
&lt;P&gt;Репутационная блокировка работает в Хотмэйле, имеется она и в Exchange Server 2007. Но вот мы подумали и решили, что было бы неплохо если бы все эти знания (SpamHaus-овские и наши собственные из разных групп) стекались бы в одну базу данных и оттуда расходились бы по заинтересованным почтовым службам внутри компании. А также&amp;nbsp;были бы доступны и для Exchange серверов повсюду, либо через регулярные обновления либо посредством службы поиска. Последнее может быть полезно даже и Аутлуку, что даст доступ к такой базе&amp;nbsp;за пределами чисто майкрософтовских сфер обслуживания (а также предоставит спамерам инструмент для определения их собственной репутации в наших глазах).&lt;/P&gt;
&lt;P&gt;Мудрые родители всегда учат детей не обращать внимание на то, что думают о них такие-то и такие-то. Это, мол, неважно. В мире электронной почты это становится с каждым днем все важнее и важнее.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=2194628" width="1" height="1"&gt;</description></item><item><title>Не про спам</title><link>http://blogs.technet.com/antispam/archive/2007/10/03/2103354.aspx</link><pubDate>Thu, 04 Oct 2007 00:48:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:2103354</guid><dc:creator>borisk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/antispam/comments/2103354.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=2103354</wfw:commentRss><description>&lt;P&gt;&lt;A href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx"&gt;http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;К спаму не имеет отношения, но шаг в нужном направлении. Майкрософт откроет наконец код .NET Framework v3.5. Не все так просто, но хотя бы первый шаг в нужном направлении!&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=2103354" width="1" height="1"&gt;</description></item><item><title>С поля боя...</title><link>http://blogs.technet.com/antispam/archive/2007/09/20/2003869.aspx</link><pubDate>Fri, 21 Sep 2007 01:29:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:2003869</guid><dc:creator>borisk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/antispam/comments/2003869.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=2003869</wfw:commentRss><description>Неделю назад, пользователи Хотмэйла получили рекордно маленькое количество сообщений. Не потому что сообщений вообще было мало, а потому что спэма было в их ящиках всего лишь &lt;STRONG&gt;13.28 %. &lt;/STRONG&gt;Это наименьшее количество спэма за всю историю существования службы (по-крайней мере в ее майкрософтовском воплощении). Только летом прошлого года были недели, когда спэм зашкаливал. Более 50% спэма доходило. Рано открывать шампанское, но приятно!&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=2003869" width="1" height="1"&gt;</description></item><item><title>Тем, кто не любит спэм</title><link>http://blogs.technet.com/antispam/archive/2007/09/04/1897757.aspx</link><pubDate>Wed, 05 Sep 2007 01:40:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1897757</guid><dc:creator>borisk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/antispam/comments/1897757.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=1897757</wfw:commentRss><description>&lt;P&gt;Вот &lt;A class="" href="http://copyright-by-me.livejournal.com/5398.html" mce_href="http://copyright-by-me.livejournal.com/5398.html"&gt;тут&lt;/A&gt;&amp;nbsp;проект борьбы со спэмом, который мне недавно прислали как отклик на этот блог. Большое Вам спасибо за отклик, даю ссылку.&lt;/P&gt;
&lt;P&gt;Сам проект по форме своей утопичен. Не в плохом смысле, а в том, что это было бы все очень хорошо,&amp;nbsp;если бы не человеческая природа. Если бы человеческая природа была такова, что можно было бы огромное количество&amp;nbsp;людей раскачать на подобные активные действия - спэма не было бы изначально, так как никому просто не пришло бы в голову гадить. Тут следует заметить, что существуют добрые люди в виртуальном пространстве, так называемые "анти", которые пытаются сделать жизни спэмеров чуть менее выносимой. Они пишут провайдерам, отслеживают IP адреса, закрывают спэм-компании. Списки этих людей, так же как и списки адресов для рассылки, циркулируют в спэмеровском интернете. Эти донкихоты (опять же, в самом хорошем смысле этих слов), ценой своего времени и усилий,&amp;nbsp;приносят много пользы, если за списки их адресов платят деньги. Об этом я уже писал. Жаль, конечно, что не все мы одержимы подобного рода духом альтруизма, но всем им я&amp;nbsp;от всей души желаю удачи и всего самого хорошего!&lt;/P&gt;
&lt;P&gt;С другой стороны, по содержанию, здесь имеется замечательное рациональное зерно, и существует много технических решений (компенсирующих недостатки человека - уж принимайте как хотите), на нем основанных. Эти решения - так или иначе воплощенная "пробуксовка". Идея, как и в предложенном проекте, состоит в том, чтобы ударить по спэмерам их же оружием. Это делается на уровне SMTP - соединения. Если сервер "замечает", что с определенного IP приходит уж слишком много соощений, или этот IP уже успел приобрести нехорошую репутацию, сервер начинает "капризничать" и "выкаблучиваться", посылая назад постоянные требования посылать ему все меньшие пакеты данных. Или посылает на каждое сообще "соединение запрещено". Первое - более эффективно, может может уронить злокозненный сервер.&lt;/P&gt;
&lt;P&gt;Проблема с этим решением состоит в том, что в наши просвещенные времена большинство (по нек. оценкам 80%) спэма посылается ни&amp;nbsp;в чем не повинными "зомби", так что владельцу или арендатору "зомби"-сети в общем-то все равно кого там уронят или не уронят.&lt;/P&gt;
&lt;P&gt;Еще одна тенденция, четко наметившаяся в последние годы, когда появилось много решений, направленных на то, чтобы ударить по спэм-экономике (в особенности появление в виртуальном пространстве человека в полицейской форме) это имзенение в содержании спэма. Очень сильно выросло количество всякого рода мошеников, которым уже не позвонишь и не напишешь. Они обирают, а не продают.&lt;/P&gt;
&lt;P&gt;Поэтому я еще раз хочу пожелать всем, кто хочет сделать виртуальное пространство чище и безопаснее для всех нас удачи и энергии. Будем работать вместе!&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1897757" width="1" height="1"&gt;</description></item><item><title>Вести с поля боя.</title><link>http://blogs.technet.com/antispam/archive/2007/08/22/1804504.aspx</link><pubDate>Wed, 22 Aug 2007 22:15:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1804504</guid><dc:creator>borisk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/antispam/comments/1804504.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=1804504</wfw:commentRss><description>&lt;H2&gt;Свежее...&lt;/H2&gt;
&lt;P&gt;На прошлой неделе, глава нашего подразделения пригласил всех в бар неподалеку отметить историческую в нашем деле неделю. Уровень спэма в ящиках пользователей Хотмэйл упал до самой низкой отметки в истории. (Я точно не могу сейсчас воспроизвести цифры). &lt;/P&gt;
&lt;P&gt;Научных наблюдений я не веду, но мне показалось, что тоже самое произошло с Гуглом и Яху, по-крайней мере в собственных ящиках на этих системах я обнаружил на прошлой неделе очень мало спэма. &lt;/P&gt;
&lt;P&gt;Я хочу быть оптимистом, но не думаю, что низкий уровень спэма вызван тем, что мы начали работать агрессивно хорошо, а спэмеры, скажем, обленились. Надо учесть, что спэм-бизнес довольно сильно коносолидирован,&amp;nbsp;в Европе&amp;nbsp; небывалая жара, да и вообще лето время отпусков, так почему бы серьезным, хорошо зарабатывающим людям не взять недельку и не уехать куда-нибудь где кроме дайал-апа нет доступа в интернет, а бизнес идет медленно, ведомый спокойно и расслаблено каким-нибудь компетентрым замом. Или как это там у них структурировано. Короче рано радоваться, надо насторожиться.&lt;/P&gt;
&lt;H2&gt;В общем и целом.&lt;/H2&gt;
&lt;P mce_keep="true"&gt;Компания Остерман Ресерч опубликовала &lt;A class="" href="http://library.govtech.net/detail/RES/1186162130_275.html" target=_blank mce_href="http://library.govtech.net/detail/RES/1186162130_275.html"&gt;отчет&lt;/A&gt;&amp;nbsp;о состоянии дел на июнь 2007 г. &lt;/P&gt;
&lt;P mce_keep="true"&gt;В частности, они укололи Била (который как-то заметил, что "через 2 года спэм перестанет быть проблемой", а было это кажется в 2003м?), указав, что 54% опрошенных ими людей, отвечающих в больших и средних компаниях за е-мэйл, все еще считают его (спэм, не Била) серьезной проблемой. Тут я бы выделил три основных повода для беспокойства.&lt;/P&gt;
&lt;P mce_keep="true"&gt;1. Главной проблемой компания видит Имидж спэм. Т.е. спэм в картинках. Я о нем уже &lt;A class="" href="http://blogs.technet.com/antispam/archive/2006/10/20/474010.aspx" target=_blank mce_href="http://blogs.technet.com/antispam/archive/2006/10/20/474010.aspx"&gt;писал&lt;/A&gt;. (Недавно появилась новая его разновидность спэм в PDF). Согласно &lt;A class="" href="http://library.govtech.net/detail/RES/1186162130_275.html" target=_blank mce_href="http://library.govtech.net/detail/RES/1186162130_275.html"&gt;отчету&lt;/A&gt;, его количество в 2005м году составило менее 4%, а в 2006 - более 40% от всего спэма. &lt;/P&gt;
&lt;P mce_keep="true"&gt;Тем не менее, Хотмэйл успешно&amp;nbsp;борется с этим видом спэма. &lt;I&gt;Пользователи Хотмэйла не видят&amp;nbsp;его в&amp;nbsp;своих ящиках, хотя мы видим эти сообщения в нашем общем потоке.&lt;/I&gt;&lt;/P&gt;
&lt;P&gt;2. Другой (и на мой взгляд б&lt;STRONG&gt;&lt;EM&gt;о&lt;/EM&gt;&lt;/STRONG&gt;льшей) проблемой являются зомби. Более 80% спэма сегогдня посылается ни кем иным, как обычным владельцем обычного персонального компьютера. Будь он Мак будь он PC, беги на нем Линукс или Виндоуз, или, скажем, Юрий Борзаковский. &lt;/P&gt;
&lt;P&gt;Сейчас мы уже гоняем систему, которая с большой точностью (и с большой скоростью, и часто) выискивает эти зомби-машины, и способна доставить результат всем интересующимся.&lt;/P&gt;
&lt;P&gt;И наконец,&lt;/P&gt;
&lt;P&gt;3. Сама природа спэма. Даже если допустить, что мы теперь блокируем больше спэма, чем раньше, тот что доходит до пользовательского ящика способен причинить больше вреда, чем раньше. Об этом я уже упоминал в предыдущем посте. Спэм сам по себе есть лишь метод доставки, и если раньше это само по себе вызывало негодование, то сейчас есть причины обеспокоиться и собственно содержанием того, что доставляется. Пользователю предлагается кликнуть на ссылку и ввести номера кредитных карточек (фишинг) или запустить вируз. Недавно начали предлагать позвонить по телефону и остваить личные данные. Если мы еще заблокируем фишеров, то уже заблокировать телефонный номер довольно сложно. &lt;/P&gt;
&lt;P&gt;Пользователя нужно учить, как маленького ребенка. Если незнакомый человек предложил Вам конфетку - поворачивайтесь и с криком бегите в противоположном направлении. (Мы знаем как действенно подобного рода обучение в случае взрослых, умных и самостоятельных людей, неуязвимых перед лицом любого, самого изощренного мошеника).&lt;/P&gt;
&lt;P&gt;И это все о состоянии дел на поле боя. В следующем посте краткий обзор новых игрушек из нашего арсенала.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;EM&gt;&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;&lt;EM&gt;&lt;/EM&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1804504" width="1" height="1"&gt;</description></item><item><title>Спам и Закон</title><link>http://blogs.technet.com/antispam/archive/2007/07/21/1575471.aspx</link><pubDate>Sat, 21 Jul 2007 20:21:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:1575471</guid><dc:creator>borisk</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/antispam/comments/1575471.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=1575471</wfw:commentRss><description>30 го мая в Сиэтле был арестован Роберт Алан Соловей (Soloway), я о нем уже писал как-то. Об этом я узнал из СМИ, которые довольно бойко обо всем рассказывали. Я никогда не задумывался о вмешательстве Закона в область моих занятий, но это был повод. И вот об этом-то я и хочу подумать вслух в этом посте. 
&lt;P&gt;Первое, что я вспомнил, услышав поток проклятий обрушившихся на Роба, требовавших его головы, это то, что много лет назад объяснял мне мой учитель, рав Аарон Соловейчик. Ненависть, зло всегда побеждает любовь, добро. Он пояснял это на примере известной притчи о царе Соломоне и двух женщинах, не поделивших ребенка. Соломон, как известно, предложил ребенка распилить. Не очень известно то обстоятельство, что, как говорит Талмуд, настоящая мать тут начала протестовать и отказалась от ребенка. В этот-то момент и произошло немыслимое: ее противница начала требовать исполнения указа царя. Казалось бы. Все идет по твоему желанию, молчи же! Здесь и выступил Соломон как знаток человеческой природы. Только материнская любовь может победить всепобеждающую ненависть.&lt;/P&gt;
&lt;P&gt;Закон должен быть слеп. Но закон исполняется людьми. Роберт десять лет избегал закон и его исполнителей. И люди по другую сторону разъярились и это стало слишком личным. Например ему в вину вменяют identity theft на основе того, что в графе From: его рассылок, стояли адреса или домены других людей. Все согласны, что это - достаточно вольное толкование концепции identity theft. Ошибка Роберта была в том, что еще семнадцатилетним юношей столкнувшись с Законом и, выйдя из этой стычки без царапины, он возомнил себя неуязвимыми. Но у государства и компании Майкрософт долгая память и слишком много ресурсов. И нельзя недооценивать устремленность людей, личной заботой которых ты становишься.&lt;/P&gt;
&lt;P&gt;Еще в курсе социологии в Университете, молодой профессор пост-докторант объяснял нам, что Закон в мире экономики - инструмент очень неэффективный. Всегда найдутся люди, которые придумают, как его обойти или нарушить. Рынок оказывается гораздо более мощным стимулятором. Когда я начал заниматься анти-спамом в 2003м году, соответствующее законодательство еще только вот-вот должно было быть принято в США. Я тогда скептически относился к нему: фактически оно означало легализацию спамам. Мое определение спама совпадает с данным Спамхаусом: «Любая нежелательная массовая рассылка». У нас же имеется еще и понятие "greymail", из разряда «ни богу свечка», т.е. массовая, нежелательная рассылка, приходящая вроде бы «законными» путями.&lt;/P&gt;
&lt;P&gt;С момента принятия закона Can-Spam (здесь игра слов: Spam - это продающаяся с начала 30х гг консервированная свинина, to can - консервировать, а так же упрятывать что-нибудь куда подальше), по стране прошли судебные процессы над спамерами. В Аризоне человек получил 9 лет. Полезного из всего этого вышло то, что мы впервые заглянули в «экономику спама». Так например, мы узнали, что на содержащееся в рассылке предложение купить, отвечает 1 из 30&amp;nbsp;000 адресантов. Это видимо несколько больше, если учесть, что списки адресов рассылки не на 100% выверены. Но тем не менее. Этого одного из 30&amp;nbsp;000 хватает, чтобы делать спам экономически выгодным.&lt;/P&gt;
&lt;P&gt;Произошло и много других изменений в природе спама. Прямо или косвенно виноват ли в этом закон конечно же невозможно сказать, однако если раньше спам бы в основе своей «вегетарианским», т.е. письма предлагали настоящий продукт, теперь наметилась явная тенденция к «хищничеству». Рассылаются вирусы, превращающие машину в «зомби», непомерно быстро растет «фишинг». Сама структура спамового рынка изменилась. Теперь уже это не прыщавые подростки, с которыми девчонки не хотят идти в кино, это - серьезные дяди, прибравшие к рукам всю эту экономику, но, в отличие например от Майкрософта, не регулируемые анти-монопольным законодательством. Can-Spam помог этой консолидации, удалив из спам-пространства «незначительных» его граждан, «мальков», а также указав, что чисто географически лучше заниматься этим за пределами США. Как я понимаю, любой такой закон бессилен абсолютно против «непробиваемых» китайских серверов, а также колоссальных сетей «зомби», т.е. компьютеров ни в чем неповинных людей, рассылающих спэм. В 2006м году, по некоторым оценкам, 80% спама рассылается через такие сети (30-40% в 2005м).&lt;/P&gt;
&lt;P&gt;В спэме, как и вообще во всякой технологии, меня всегда занимал человеческий элемент. Ведь вот Интернет или протокол SMTP, были созданы людьми и не думавшими о том, что можно взять таки хорошие вещи, призванные соединять людей, и создать из них холодную, пакостную среду, от которой только и жди подвоха, и где процветают довольно злокозненные&amp;nbsp;товарищи. Виноват ли в этом закон конечно же невозможно сказать, однако если раньше спам бы в основе своей&amp;nbsp;просто попыткой что-то продать, теперь&amp;nbsp;же это источник&amp;nbsp;подвохов и доходов&amp;nbsp;анти-вирусных, и других, продающих&amp;nbsp;"безопасность"&amp;nbsp;компаний. Каким образом и почему из замечательной идеи родилось такое уродство? Доказывает ли это что мы, как человеческий род, по природе своей довольно жалки и не достойны всего хорошего, что имеем? Я не хотел бы так думать. Поэтому для меня анти-спам это не работа, а вечное познание человека и его природы, битва со злом в ней. Мне кажется, что поле для этой битвы определено в техническом пространстве, гораздо более, чем в «законном».&lt;/P&gt;
&lt;P&gt;Также я хочу думать, что и в нехороших, злых аспектах виртуального пространства проявляется не изначально злая природа человека, а что это скорее есть иллюстрация гениального учения Яакова Бёмэ об Ugrund'e («слепой бесконечности»), которое развивали Н. А. Бердяев и Фридрих Шеллинг (первый похоже не зная о втором, хотя и на сто лет позже), и в котором усматривали корни человеческой свободы (впрочем, это уже совсем другая тема). Пока же мне хочется надеяться, что большинство баталий будет все-таки разыграно в технологической сфере, и еще больше хочется надеяться, что когда-нибудь, Интернет, из океана зомби и вирусов, снова станет исключительно средством общения и обмена идеями.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=1575471" width="1" height="1"&gt;</description></item><item><title>Эпизод войны со спэмом, Часть 3 (и последняя).</title><link>http://blogs.technet.com/antispam/archive/2007/03/20/702031.aspx</link><pubDate>Tue, 20 Mar 2007 23:11:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:702031</guid><dc:creator>borisk</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/antispam/comments/702031.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=702031</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Хостинг.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Большинству спонсоров требовался вебсайт как интерфейс&amp;nbsp;для готовых платить клиентов. Некоторые спонсоры предоставляли хостинг в рамках договора с Р, хотя в большинстве случаев хостинг нужно было искать ему самому, а иногда даже и делать дизайн вебсайта. Вебсайты первыми страдают от жалоб. Человек пожаловался, вебсайт удалили с хостинга, деньги кончились.&lt;/P&gt;
&lt;P&gt;Р.: "Непробиваемый" (bulletproof) хостинг - друг спэмеров!"&lt;/P&gt;
&lt;P&gt;"Непробиваемый" хостинг принимает заявки от анонимных бизнесов, игнорирует жалобы, он быстр и надежен. Он предоставляет доступ на прямую через FTP и панель управления. Непробиваемые сервера существуют под шквалом атак. Большинство (согласно Р.) находится в Китае ($1200 /месяц) или Гонконге ($2500 - 3000 /месяц). Китайские сервера не самые быстрые и надежные. Закон "получаешь за что платишь" работает и здесь. Всего таких хостингов имеется в районе 20.&lt;/P&gt;
&lt;P&gt;IP этих серверов редко меняются. Р. пользовался разными приемами для изменения URL: переадресация, рандомизация и т.д. Блоклисты показывали Р. был ли домейн уже заблокирован. Р. исользовал от 5 - 10 домейнов, плюс изменения, переадресация и т.д. - было достаточно.&lt;/P&gt;
&lt;P&gt;Подобного рода хостинг изолирует спонсора от жалоб и прочего беспокойства. Многие, попадавшие на сайт Р., просили дальнейшую информацию и очень часто становились покупателями.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Делопроизводство.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Р. нравился его бизнес. Не надо было рано вставать, делать все можно было из дома или из кафе, в то же время смотреть телевизор или заниматься еще чем-нибудь. Несколько часов уходило на составления страниц, изменения содержимого спэма, кампания начиналась перед сном и утром появлялись результаты. Каждые пару дней нужно было искать новые ресурсы. Воскресенье - вторник были лучшими днями для начала атаки.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Расходы:&lt;/EM&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Прокси: $1000 - 2000 в неделю.&lt;/LI&gt;
&lt;LI&gt;Прокси сервера: $1 - 200 в месяц.&lt;/LI&gt;
&lt;LI&gt;Заголовки: $200 в месяц&lt;/LI&gt;
&lt;LI&gt;Непробиваемый хостинг: $1200 - 3000 в месяц.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;Содержимое и ревеню:&lt;/EM&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;30 - 500 кликов на 10 млн сообщений&lt;/LI&gt;
&lt;LI&gt;~$100 на 10 млн сообщений&lt;/LI&gt;
&lt;LI&gt;ревению в 5-10 раз привышало вложения от месяца к месяцу.&lt;/LI&gt;
&lt;LI&gt;Сигареты: 100 млн сообщений/день, $300 в день.&lt;/LI&gt;
&lt;LI&gt;Порно: 20 млн сообщений, 10000 кликов (!) одна продажа.&lt;/LI&gt;
&lt;LI&gt;Ипотеки: $10 -20 за продажу 8 - 10 продаж в день, $200 в день.&lt;/LI&gt;
&lt;LI&gt;Виагра: $100 /за продажу&lt;/LI&gt;
&lt;LI&gt;Слышал, что люди зарабатывают до $80 000 в день на биржевом спэме (рекоммендация покупки акций).&lt;/LI&gt;
&lt;LI&gt;если сообщение пришло в карзину (а не в ящик) вероятность клика всего 10% по сравнению с той же вероятностью, если сообщение пришло в ящик.&lt;/LI&gt;&lt;/UL&gt;
&lt;P mce_keep="true"&gt;Деньги циркулируют через PayPal, офшорные банки, чеки, ордера. Иногда спэмеры подтасовывали статистику и тогда выходили из бизнеса.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Тенденции.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Согласно Р., наблюдается консолидация бизнеса. Большие серьезные люди вытесняют маленьких. Совершенствуются и инструменты. Новый софт лучше справляется с различного рода фильтрами. BotMailers спэм-системы "от А до Я" могут посылать до 10 млн сообщений в час и стоить $25000 в месяц. Р. сомневался в их эффективности.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Многие отходят от софта и начинают пользоваться "внутренним" спэмом. Открывают в том же Хотмэйле&amp;nbsp; обычные адреса и с них рассылают спэм пользователям того же Хотмэйла. Таким образом они обходят пограничных Церберов в виде внутренних фильтров и службы репутации. Внутренние адреса можно купить: $20 за 1000. 5000 - 10 000 таких адресов могли рассылать 1 млн сообщений. Адреса были открыты вручную работниками на Филипинах. Р. Видел софт, рещающий HIP, за $500 000. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;STRONG&gt;Заключение.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Р. попался и был очень напуган майкрософтовским легальным аппаратом, запущенным против него. Мой друг Роб (тот к которому отряд Особого Назначения впервые пожаловал когда ему было 18 лет) ничего подобного не боится. Когда Майкрософт его судит, он закрывает одну компанию и открывает другую. Активов у него нет, отбирать нечего.&amp;nbsp;&lt;/P&gt;
&lt;P mce_keep="true"&gt;Спэммеры в России, Китае и др. странах, тоже наверное не особо теряют сон от возможности попасть под суд. Таким образом закон оказывается орудием обоюдоострым. С одной стороны он эффективен против мелюзги. С другой, очистив ландшафт от мелюзги, он помогает "привитым" от него большим людям в бизнесе консолдироваться и увеличивать доходы, устраняя "шум". К тому же,&amp;nbsp;убрав мусор из виртуального пространства, мы&amp;nbsp;предоставляем все мощьности&amp;nbsp;получающих сообщения серверов в пользование тем, кто может лучше&amp;nbsp;их загрузить.&amp;nbsp;Все это в очередной раз изменит стратегию войны со спэмом, где каждый поворот событий также стремителен и неожидан, как стремителен и неожидан человеческий интеллект.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=702031" width="1" height="1"&gt;</description></item><item><title>Эпизод войны со спэмом, Часть 2.</title><link>http://blogs.technet.com/antispam/archive/2007/03/14/694175.aspx</link><pubDate>Thu, 15 Mar 2007 00:09:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:694175</guid><dc:creator>borisk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/antispam/comments/694175.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=694175</wfw:commentRss><description>&lt;P&gt;&lt;STRONG&gt;Програмное обеспечение.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Р. пользовался пиратской копией программы DarkMailer. Рыночная стоимость: $500 /сервер, но Р.&amp;nbsp;заплатил полтиник за безграничное пользование. Этой программой пользуется, по его оценкам, большинство мелких спэмеров. Имеется Нексус, который можно купить за $2000 в месяц, и выплачивать, пока общая стоимость в $20000 не будет покрыта.&lt;/P&gt;
&lt;P&gt;DarkMailer, через макро, может рандомизировать части е-мэйла не меняя смысла сообщения. Например "привет" или "добрый день" вместо "здравствуйте". Р. нанял двух изготовителей заголовков к е-мэйлам (e-mail headers) для увеличения шансов попадания в почтовый ящик пользователя.&lt;/P&gt;
&lt;P&gt;URLы также ранодмизируются от сообщения к сообщению и иногда указывают на переадреусующий сервер. &lt;/P&gt;
&lt;P&gt;Р. не следил за успехом - сколько сообщений достигают цели и т.д.&amp;nbsp;Текстовый спэм лучше достигал цели, чем HTML-спэм. Видимо потому что фильтрам было меньше за что "зацепиться". Р. не пользовался картинками, но похоже DarkMailer поддерживает подобного рода рассылку.&lt;/P&gt;
&lt;P&gt;Чтобы удостовериться в успехе кампании, Р. посылал 1 - 20 сообщений на свой тестовый адрес.&lt;/P&gt;
&lt;P&gt;Р.: Если 15 - 20% посланного попадает в ящики пользователя, кампания успешна!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Прокси.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;На пике своего бизнеса, Р. пользовался 12ю серверами "прокси", каждый из которых руководил примерно 10.000ми "прокси", которые посылали 2 000 000 сообщений / сервер * час. Согласно Р., 5 000 000 сообщений / сервер попадали в ящик до того как DarkMailer протягивал ноги или кампания теряла эффективность и нужно было ее перенастраивать.&lt;/P&gt;
&lt;P&gt;Каждый из серверов состоял в законном хостинге со скоростью связи 100 Mbps, стоимостью $100 - 200 в месяц. Р. пользовался Remote Desktop, копировал свою программу на каждый из них и запускал ее. Дальше все происходило автоматом.&lt;/P&gt;
&lt;P&gt;Каждый сервер контролировал тысячи "зомби"- машин. &lt;STRONG&gt;Внимание любители Linux'a, Unix'a, Mac'a! Не имело никакого значения какая ОС бежит на&amp;nbsp;зараженной машине. &lt;/STRONG&gt;Прокси рассылали спэм таким образом делая источник его невозможным для отслеживания. Качественные сети прокси находятся по рекомендациям, но дешевые и даже бесплатные сети можно найти на интернете. Самые быстрые прокси находятся в США. Качественные прокси-сети можно было брать в аренду за $1000 - 2000 /неделю. Они могли доставлять 2.5 млн сообщений в час. Прокси подешевле, бесплатные прокси имеют в 10 раз меньшую скорость доставки. Время здесь критически важно.&lt;/P&gt;
&lt;P&gt;Чтобы проверить связь сети с сервером, Р. пользовался простой програмкой с веб-интерфейсом. Посредством ее, он мог удостовериться, что получает то, за что заплатил. Прокси "сгорают" очень быстро. Редко когда они остаются на связи более получаса. Тогда их заменяют другими. Владельцы сетей распротсраняют вирусы, которые "рекрутируют" все новые и новые прокси. Они прилагают усилия к тому, чтобы чистить свои сети от ловушек. Одна такая ловушка перерастает в жалобу провайдеру, что приводит к умерщвлению прокси-сервера.&lt;/P&gt;
&lt;P&gt;Р.: Сети прокси - основа бизнеса!&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(продолжение следует).&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=694175" width="1" height="1"&gt;</description></item><item><title>Эпизод войны со спэмом. Часть 1.</title><link>http://blogs.technet.com/antispam/archive/2007/03/06/678414.aspx</link><pubDate>Wed, 07 Mar 2007 02:52:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:678414</guid><dc:creator>borisk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/antispam/comments/678414.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=678414</wfw:commentRss><description>&lt;P&gt;В рамках проргаммы "Приведи спэмера на работу", мы тут встречались с парнишкой из Канады, которого Майкрософт взял за жабры в связи с тремя текущими расследованиями. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;Итак. Назовем его Р. Ему 20 лет и он живет с родителями, учится в университете и получает образование финансиста. Спэмом занялся в 14 лет. Он не принадлежит к числу "больших" людей в бизнесе и поэтому какую-то (может быть большую) часть заработков держал на счету, который быстро раскрыли и деньги забрали. Денег там было около сотни тысяч долларов.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Сообщество.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Р. посещал частные он-лайн клубы, сообщества, BBSы. Переговоры ведутся по частным IRC канлам, но также используются и МСН и другие чаты. В сообществах ведутся торги и редко доходит до денежных платежей. Имеются также и брокеры, которые помогают (начинающим) спэмером находить спонсоров (т.е. людей, заинтересованых в спэме, готовых за него платить). Имеются люди, которые только брокерством и занимаются за 10% от дохода.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Спонсоры.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Компании, заинтересованные в продаже продукта. Часто сотня спэмеров работают на одного спонсора. Спонсор может давать "креатив" (т.е. уже иметь собственный вебсайт) и отражать недовольство - людей или закона. А может предпочесть быть более защищенным, в таком случае "креативом" и отражением недовольства должен заниматься спэмер. Но в этом случае он может получить эксклюзивные права. Одним из самых прибыльных был сигаретный бизнес ($100 /день). Самый неприбыльный - порнобизнес. Куча заходов на вебсайты и никакого дохода.&lt;/P&gt;
&lt;P&gt;Р.: "Я могу найти спонсора менее чем за полчаса!"&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Списки адресов.&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;У Р. было более пятисот миллионов адресов в его списке (в основном пользователи AOL, Yahoo, Hotmail и 10% мелкие провайдеры). Список включал дубликаты. Р. считает, что лишь 20% адресов в списке "хорошие". Адреса доставлялись инструментами, которые соскабливают их со списков, вебсайтов, блогов и проч. Р. не пытался "почистить" свои списки. Иногда спонсоры поставляют свои, довольно чистые списки адресов.&lt;/P&gt;
&lt;P&gt;Р. считает, что лучшие адреса это адреса пользователей AOL. Наш адвокатский отдел засек по-крайней мере одну его попытку купить список, где таких адресов было большинство (что нам это говорит о пользователях AOL?) Такие чистые адреса могут стоить от $$2 - 5 тыс./миллион&lt;/P&gt;
&lt;P&gt;Часто, адреса покупаются у людей, укравших их у своих компаний.&lt;/P&gt;
&lt;P&gt;Спэмеров раздражают т. наз. "Анти". Это люди которые активно противодействуют: смотрят DNS-trace, жалуются куда только можно: сообщают провайдерам, держателям блок-списков. Списками "Анти" торгуют как и всем остальным. Они составляются на основе личного опыта.&lt;/P&gt;
&lt;P&gt;"Горшочки с медом" (Honeypots, тут так называют металлические будки уличных туалетов, а у нас так зовут е-мэйл адреса открытые нашими сотрудникми, нигде не значащимися, поэтому вся, оказавшаяся там почта, на 100% спэм) было трудно засечь, и Р. не пытался это сделать. Очень зря. В такой вот "горшочек" он и попал.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;(продолжение следует...)&lt;/STRONG&gt;&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=678414" width="1" height="1"&gt;</description></item><item><title>Веселые картинки.</title><link>http://blogs.technet.com/antispam/archive/2006/10/20/474010.aspx</link><pubDate>Fri, 20 Oct 2006 23:10:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:474010</guid><dc:creator>borisk</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/antispam/comments/474010.aspx</comments><wfw:commentRss>http://blogs.technet.com/antispam/commentrss.aspx?PostID=474010</wfw:commentRss><description>&lt;P&gt;По просту говоря, спэм в картинках, это когда открываешь сообщение, а там - картинки.&lt;/P&gt;
&lt;P&gt;Точное определение должно быть дано в соответствии с тем насколько данное анти-спэмовое решение справляется с сообщениями, содержащими картинки. Здесь есть несколько вариантов:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Все сообщение закодировано в HTML и не содержит собственно картинок. Оно содержит IMG-метки, и картинки загружаются в момент отображения.&lt;/LI&gt;
&lt;LI&gt;Сообщение закодировано в HTML, но IMG-метки ссылаются на что-то в "сыром" тексте сообщения. Т.е. в данном случае сама картинка доступна спэм фильтру, если он аккуратно пройдется по MIME-дереву.&lt;/LI&gt;
&lt;LI&gt;Картинка вмонтирована в тело сообщения через MIME&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Ортогонально данной классификации может идти ей подобная. Разница будет в том, для чего используются картинки: для передачи собственно спэма (Виагра за гроши, вмонтировано в саму картинку) или для вполне невинной информации (эмблема компании).&lt;/P&gt;
&lt;P&gt;Наша группа разработала способ "перемолки" картинок на основе технологии &lt;A class="" title="отпечатки пальцев" href="http://blogs.technet.com/antispam/archive/2006/06/15/436176.aspx" target=_blank mce_href="http://blogs.technet.com/antispam/archive/2006/06/15/436176.aspx"&gt;отпечатков пальцев&lt;/A&gt;. Картинки извлекаются, нормализуются, с них снимаются отпечатки и эти отпечатки добавляются к базе данных фильтра. Преимущество здесь в том, что небольшие (или даже не такие уж небольшие)&amp;nbsp;изменения в картинках не повлияют на конечные отпечатки и нужный вердикт всегда гарантирован.&lt;/P&gt;
&lt;P&gt;Эта технология хороша для поимки сообщений типа 3. Сообщения типа 1 и 2 с точки зрения фильтра являются в основном текстовыми. Пройдя через обычную систему машинного обучения и генерации базы данных фильтра, данные сообщения будут пойманы на основе их HTML данных или других текстовых характеристик. Даже сообщения 3го типа все же неплохо ловятся при подобной системе, поскольку проход по MIME-дереву перемалывает множество разных характеристик, хотя и без особой обработки нацеленной именно на картинки.&lt;/P&gt;
&lt;P&gt;Хуже обстоят дела с решениями, основанными на человеческом вмешательстве. Фильтр, в основе которого лежат regular expressions, создаваемые на основе правил, замеченных в какой-то момент, неплохо ловит текстовой спэм, но совершенно пасует перед&amp;nbsp;спэмом 3го типа. Exchange Hosted Services (не Exchange Server,&amp;nbsp;распростроняемый через&amp;nbsp;CD, a "виртуальный" Exchange Server, раньше - Front Bridge) будет первым клиентом машинной обработки картинок на основе вышеупомянутой технологии, именно по этой причине.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=474010" width="1" height="1"&gt;</description></item></channel></rss>