<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <title>Antisocial programmer's blog</title>
    <link>https://nevkontakte.com/index.html</link>
    <description></description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 28 Oct 2025 23:25:35 +0000</lastBuildDate>
    <atom:link href="https://nevkontakte.com/rss.xml" rel="self" type="application/rss+xml"/>
    <item>
      <title>What happens if we swap AI brains?</title>
      <link>https://nevkontakte.com/2025/swap-ai-brains.html</link>
      <pubDate>Tue, 28 Oct 2025 00:00:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2025/swap-ai-brains.html</guid>
      <description>&lt;p&gt;Despite my initial skepticism, I&amp;rsquo;ve been increasingly using LLM-based coding
assistants to get shit done. No vibe coding, mind you — I am too much of a
control freak for that, but letting the machine do the tedious parts of coding
has been great for me. For personal use, I particularly enjoyed using Claude
Code (enough to shell out for a Pro subscription): I don&amp;rsquo;t have to talk to it
like to a &lt;del&gt;lawyer&lt;/del&gt; capricious genie that wants to fuck me over on the
slightest slip of instruction.&lt;/p&gt;
&lt;p&gt;I also got to use and compare several such tools, which led me to a hypothesis:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The interface of the agent — the tool that invokes an LLM — defines its
usefulness as much, if not more, as the model behind it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;More specifically, prompts, instructions and tools that are made available to
the LLM can make a difference between frustrating baby-sitting and a productive
coding session. However, until recently I had no good way of testing it because
most frontier LLMs are coupled with their own proprietary tool and it&amp;rsquo;s hard to
separate the influence of the tool from the model behind it.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Learning Elvish (but not the Middle-earth one)</title>
      <link>https://nevkontakte.com/2025/elvish.html</link>
      <pubDate>Wed, 04 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2025/elvish.html</guid>
      <description>&lt;p&gt;There is some part of me that is drawn to obscure, odd technologies and tools.
It&amp;rsquo;s kind of irrational, but also very exciting to tinker with. As I was looking
for alternatives to my zsh setup, I couldn&amp;rsquo;t help but look at some of the more
niche shells, even if it wasn&amp;rsquo;t very likely that I&amp;rsquo;ll settle on them.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://elv.sh/"&gt;Elvish&lt;/a&gt; was one of the options that caught my attention with
its friendly website, not too stuffy documentation and being written in Go. It&amp;rsquo;s
a non-POSIX shell, which offers some unusual TUI features and a scripting
language with some very interesting ideas.&lt;/p&gt;
&lt;p&gt;This post is my &lt;em&gt;subjective&lt;/em&gt; impressions of it, which you are welcome to consume
with some salt to taste. Shell usage tends to be a very personal thing, so take
my opinions as a prompt for your own exploration, rather than a final verdict.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Custom transient prompt in Fish</title>
      <link>https://nevkontakte.com/2025/transient-fish.html</link>
      <pubDate>Fri, 23 May 2025 00:00:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2025/transient-fish.html</guid>
      <description>&lt;p&gt;&lt;a href="https://fishshell.com/"&gt;Friendly Interactive Shell&lt;/a&gt; (more commonly known as
Fish) is a popular alternative to the more ubiquitous shells like Bash and Zsh.&lt;/p&gt;
&lt;p&gt;If you&amp;rsquo;ve been a command line aficionado, you have probably seen fancy command
line prompts that conveniently show you everything you need to know from current
working directory, to VCS status, to outside temperature. Maybe you are enjoying
one right now!&lt;/p&gt;
&lt;p&gt;This is what my prompt looks like, which, arguably, is on the lighter weight
side:&lt;/p&gt;

  
    
      &lt;figure&gt;
        &lt;img src="https://nevkontakte.com/2025/transient-fish/zsh_prompt.png" alt="zsh_prompt.png" &gt;
        &lt;figcaption&gt;Zsh prompt based on the Bira theme from Oh-my-zsh.&lt;/figcaption&gt;
      &lt;/figure&gt;
    
  

&lt;p&gt;The additional information is very handy, but it also clutters the terminal
scrollback. More than than, at work I often need to copy and paste my terminal
logs to keep record of the actions I took for one task or another. Editing the
fluff from my prompt gets annoying fast.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/romkatv/powerlevel10k?tab=readme-ov-file#transient-prompt"&gt;Transient prompt&lt;/a&gt;
is a feature offered by some shells where your command prompt is normally
rendered in all its helpful glory, but is collapsed into a more minimalistic
representation of itself once you execute the command. I think it was brought to
mainstream by Powerlevel10k, but these days it&amp;rsquo;s offered by many other tools and
shells.&lt;/p&gt;
&lt;p&gt;Bringing in an extra dependency just for that didn&amp;rsquo;t sit right with me, and I
decided to implement it myself.&lt;/p&gt;
&lt;p class="alert alert-info"&gt;If you just want to make your own transient prompt and aren't interested in under the hood dealings, grab &lt;a href="https://github.com/zzhaolei/transient.fish"&gt;zzhaolei/transient.fish&lt;/a&gt;. What follows is a simplified and less versatile version of that plugin, but it's easier for understanding.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Self-hosting Minecraft at home</title>
      <link>https://nevkontakte.com/2023/self-hosted-minecraft.html</link>
      <pubDate>Sun, 15 Jan 2023 00:00:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2023/self-hosted-minecraft.html</guid>
      <description>&lt;p&gt;Last year I spent more hours playing Minecraft than I care to admit. Being an
introvert that I am, I play on a small private server with my partner and a few
friends, and
&lt;a href="https://www.minecraft.net/en-us/realms/realms-for-java"&gt;Minecraft Realms&lt;/a&gt; has
been a great hosting for us, fast, cheap, secure, with backups. The only issue —
it can&amp;rsquo;t have mods, and eventually we wanted to play with mods. After shopping
around for hosting services and trying a couple of them we came away mildly
disappointed: they were either very slow, or very expensive. I decided that I
will simply move the server to my former gaming laptop, which has been sitting
idle for the last year or so. It had plenty of power and, most importantly, RAM,
while being fairly energy-efficient. The cost of electricity running it 24/7 was
a couple of times smaller than a comparable hosting.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Can I put my blog into blockchain?</title>
      <link>https://nevkontakte.com/2022/blogchain.html</link>
      <pubDate>Sun, 23 Jan 2022 14:07:03 +0000</pubDate>
      <guid>https://nevkontakte.com/2022/blogchain.html</guid>
      <description>&lt;p&gt;My twitter feed be like:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Blockchain! NFTs! Distributed governance! Get rich quick!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We all know NFTs with URLs to someone&amp;rsquo;s HTTP server are silly&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;. True
cryptopunks store everything in blockchain directly! So how much would it cost
me if I immortalized this blog in the Ethereum blockchain? Think about it! All
my typos and rants immutable and preserved forever, that&amp;rsquo;d be cool!&lt;/p&gt;
&lt;p class="alert alert-info"&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;: I have no idea what I&amp;rsquo;m talking about. I never
actually used Ethereum for anything, and all I know about it I&amp;rsquo;ve learned in a
couple of hours of random googling.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Wild gremlin engineering</title>
      <link>https://nevkontakte.com/2020/wild-gremlin-engineering.html</link>
      <pubDate>Thu, 22 Oct 2020 13:00:00 +0100</pubDate>
      <guid>https://nevkontakte.com/2020/wild-gremlin-engineering.html</guid>
      <description>&lt;p class="lead"&gt;… or how to sell Chaos Engineering to your team when everything is already on fire.&lt;/p&gt;
&lt;p&gt;This post is once again inspired by a discussion in DevZen podcast,
&lt;a href="https://devzen.ru/episode-0309/"&gt;episode #309&lt;/a&gt; (for russian speakers, I highly
recommend listening this one, lots of &#128293; discussions) and the
&lt;a href="https://www.oreilly.com/library/view/chaos-engineering/9781492043850/"&gt;Chaos Engineering&lt;/a&gt;
book.&lt;/p&gt;
&lt;p&gt;In the podcast, &lt;a href="https://x.com/sum3rman"&gt;@sum3rman&lt;/a&gt; brought up an excellent
point that most teams don&amp;rsquo;t reach a stage when their product is &amp;ldquo;too stable&amp;rdquo; and
they need to introduce faults deliberately. Many more teams are actually in a
semi-permanent dumpster fire state and claiming that breaking it even further
will somehow help is gonna be a though sell.&lt;/p&gt;

  
    
      &lt;figure&gt;
        &lt;img src="https://nevkontakte.com/2020/wild-gremlin-engineering/on_fire.jpg" alt="on_fire.jpg" &gt;
        &lt;figcaption&gt;Your teammates when you wanna let chaos monkeys in.&lt;/figcaption&gt;
      &lt;/figure&gt;</description>
    </item>
    <item>
      <title>Every hackable connector on ASUS Eee PC 901</title>
      <link>https://nevkontakte.com/2020/eee-pc-connectors.html</link>
      <pubDate>Thu, 15 Oct 2020 17:10:00 +0100</pubDate>
      <guid>https://nevkontakte.com/2020/eee-pc-connectors.html</guid>
      <description>&lt;p&gt;Recently I found my old Eee PC 901 at the bottom of a drawer sitting and
collecting dust. It served me well a decade ago and I still have fond memories
of it, but by modern standard it&amp;rsquo;s really obsolete as a laptop. With Intel Atom
N270 and 2GB DDR2 RAM at its heart, I&amp;rsquo;m not sure it&amp;rsquo;ll win over even Raspberry
Pi 4. Yet it is in a good working condition, and I couldn&amp;rsquo;t bring myself to
discard it into the trash bin.&lt;/p&gt;
&lt;p&gt;At a peak of its popularity Eee PC family was very popular in the
hacking/modding community, so I went on to see if there&amp;rsquo;s something cool I can
do with it. I&amp;rsquo;ve never really messed with hardware before, so even if it doesn&amp;rsquo;t
work out, I&amp;rsquo;ll learn something useful from it.&lt;/p&gt;
&lt;p&gt;In this post I&amp;rsquo;ll document interfaces that exist on Eee PC 901 motherboard and
present interest for modding. Kudos to the Eee PC community who reverse
engineered all of this, I&amp;rsquo;ll try to cite original sources to the best of my
ability, but internet archeology is hard, so apologies if I misidentify any.&lt;/p&gt;
&lt;p&gt;Ultimately, the most useful sources were the ASUS original
&lt;a href="https://www.google.com/search?q=ASUS+P901+Rev1.3G+Schematic+Diagram.pdf"&gt;motherboard schematics&lt;/a&gt;
and
&lt;a href="https://www.google.com/search?q=asus_p901_rev_1.3g_boardview.zip"&gt;component layout&lt;/a&gt;,
which you can find with a little bit of googling. I also relied heavily on
postinga at
&lt;a href="https://web.archive.org/web/20121129075421/http://forum.eeeuser.com/index.php?showforum=26"&gt;eeeuser.com&lt;/a&gt;
(down and gone, but mostly available through web archive),
&lt;a href="https://web.archive.org/web/20210417081603/http://eee-pc.ru/wiki/%D0%BC%D0%BE%D0%B4%D0%B4%D0%B8%D0%BD%D0%B3:%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F"&gt;eee-pc.ru&lt;/a&gt;
(which is also frequently down) and &lt;a href="http://jkkmobile.com"&gt;jkkmobile.com&lt;/a&gt;. Some
specifics about supported protocol versions were found in
&lt;a href="https://web.archive.org/web/20201023163054/https://www.mouser.com/pdfdocs/Intel_mobileatomn270singlecoredatasheet.pdf"&gt;Intel Atom N270 datasheet&lt;/a&gt;
and
&lt;a href="https://web.archive.org/web/20201023162941/https://www.intel.com/content/dam/doc/datasheet/i-o-controller-hub-7-datasheet.pdf"&gt;Intel ICH7-M datasheet&lt;/a&gt;
(south bridge). I also found helpful notes at ivc.no
&lt;a href="https://beta.ivc.no/wiki/index.php/Eee_PC_Internal_Upgrades"&gt;1&lt;/a&gt;,
&lt;a href="https://beta.ivc.no/wiki/index.php/Eee_PC_Research"&gt;2&lt;/a&gt;, although they focus on
Eee PC &lt;strong&gt;7&lt;/strong&gt;01.&lt;/p&gt;</description>
    </item>
    <item>
      <title>WTF is SRE? The job nobody understands.</title>
      <link>https://nevkontakte.com/2020/wtf-is-sre.html</link>
      <pubDate>Sun, 11 Oct 2020 15:12:57 +0100</pubDate>
      <guid>https://nevkontakte.com/2020/wtf-is-sre.html</guid>
      <description>&lt;p&gt;&lt;strong&gt;Trigger warning:&lt;/strong&gt; If you have strong opinions about Ops, DevOps, SRE and
adjacent subjects, read this at your own risk.&lt;/p&gt;
&lt;p&gt;A bit over 4 years ago I&amp;rsquo;ve accepted a job offer with the &amp;ldquo;Site Reliability
Engineer&amp;rdquo; title, and at the time I had no clue what it really was about. The
recruiter said it was kinda like a normal Software Engineer, but more about
infrastructure, and that was all. Since then people wrote countless posts, gave
dozens of &lt;a href="https://sre.xyz/#conferences-meetups"&gt;talks&lt;/a&gt;, literally published
&lt;a href="https://landing.google.com/sre/books/"&gt;whole books&lt;/a&gt; about this job, and yet the
industry in general has no clue what the fuck SRE means. Okay, maybe SRE still
new &lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;, but DevOps has been popular for a decade and people still get
it wrong &amp;#x1f937;&lt;/p&gt;
&lt;p&gt;So let&amp;rsquo;s set the record straight, shall we?&lt;/p&gt;
&lt;p&gt;First of all, every modern organization needs IT Operations (Ops for short)
these days. Computer systems are complicated enough to require a specialized
professional to run and maintain them. This role&amp;rsquo;s purpose is to take existing
components (software and hardware) and make them work together to solve
business&amp;rsquo;s problem. Even though Ops usually isn&amp;rsquo;t about &lt;em&gt;creating&lt;/em&gt; new
components, this is really a jack-of-all-trades role and they can do anything
IT.&lt;/p&gt;
&lt;p&gt;Depending on the scale of the organization, Ops can branch out into more
specialized roles such as Hardware Ops, Network Engineers, System
Administrators, be that in-house or outsourced. Contrary to the popular opinion,
coding skills often play a big role in these jobs, for example in integrating
different systems, task automation, etc. And yeah, all those folks are &amp;ldquo;real
engineers&amp;rdquo;, oftentimes more real than &amp;ldquo;software engineers&amp;rdquo;, but I digress.&lt;/p&gt;</description>
    </item>
    <item>
      <title>&#128679; Projects</title>
      <link>https://nevkontakte.com/pages/projects.html</link>
      <pubDate>Sat, 20 Jun 2020 17:24:00 +0000</pubDate>
      <guid>https://nevkontakte.com/pages/projects.html</guid>
      <description>&lt;p&gt;This page is a collection of open source projects and web services I worked on
or which have been notable for me in one way or another. Some of these projects
are still relevant, most of them are obsolete, all of them were done for fun,
not profit (well, not for any significant profit anyway).&lt;/p&gt;
&lt;p&gt;Please note this isn&amp;rsquo;t a professional portfolio. Quite in opposite, it&amp;rsquo;s largely
a collection of curiosities and exercises I did to flex the muscles I don&amp;rsquo;t get
to use too often in my day job. If you are interested in what I do for living,
check out my &lt;a href="https://www.linkedin.com/in/nevkontakte/"&gt;Linkedin profile&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="-js-less-hsts-super-cookie"&gt;&#127850; JS-less HSTS super-cookie&lt;/h3&gt;
&lt;p&gt;A proof-of-concept which emerged out of my interest in web security and privacy,
demoing how previously known HSTS super-cookie can be applied even to clients
who disable JavaScript in the browser. As of 2020, it concept still works, even
though it no longer transcends private browsing mode as it once did.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://hsts.nevkontakte.com/"&gt;Live demo&lt;/a&gt; /
&lt;a href="https://github.com/nevkontakte/hsts-cookie"&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="-nassau-international-commerce-bank"&gt;&#128184; Nassau International Commerce Bank&lt;/h3&gt;
&lt;p&gt;This is both a snarky parody on the banking industry and a &lt;strong&gt;fictional&lt;/strong&gt; company
within &lt;a href="https://fseconomy.net"&gt;FSEconomy&lt;/a&gt; flightsim meta-game, which offers some
handy money-related services, which are missing from the game itself. Initially
I built most of it to facilitate me specilating on the in-game market, but over
time I added a few services that were useful to the larger player community.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://fse.nevkontakte.com/"&gt;Visit&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="-pastemark"&gt;&#128278; Pastemark&lt;/h3&gt;
&lt;p&gt;A bookmarklet generator for canned responses. I wrote this tool at the time when
I had to give repetitive answers over an over again and wanted to save myself
some keystrokes. I find that bookmarklets are a wildly underappreciated tool,
and this is jsut one use of it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://pastemark.nevkontakte.com/"&gt;Visit&lt;/a&gt; /
&lt;a href="https://github.com/nevkontakte/pastemark"&gt;GitHub&lt;/a&gt; /
&lt;a href="https://nevkontakte.com/2011/Pastemark-stop-typing-the-same-thing.html"&gt;Blog post&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="smaller-or-one-off-projects"&gt;Smaller or one-off projects&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/GOST-R-34.10-2012"&gt;GOST R 34.10-2012&lt;/a&gt;
&lt;span class="badge badge-secondary"&gt;C++&lt;/span&gt; — an implementation of an ECC
cryptographic signature standard under the same name. I think I implemented it
for some contest, so it&amp;rsquo;s fairly well optimized.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/tuneLZ"&gt;tuneLZ&lt;/a&gt;
&lt;span class="badge badge-secondary"&gt;C++&lt;/span&gt; — another doodad from my
university times. At some point we were studying compression algorithms and I
had some ideas on how to improve upon the classic LZ78 a bit. It&amp;rsquo;s still
inferior to the modern state of the art, but can serve as a learning material.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/MODX-Lib"&gt;MOX-Lib&lt;/a&gt;
&lt;span class="badge badge-secondary"&gt;PHP&lt;/span&gt; — a complete implementation of
&lt;a href="https://github.com/phpbb/modx"&gt;MODX&lt;/a&gt; patcher as a self-contained library.
This format is sort of a diff on steroids and was the dominant way of
distributing phpBB 3.0.x mods. Probably obsolete these days though…&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/gcb-js"&gt;Google Cache Browser&lt;/a&gt; — a fun little
tool that allowed you to browse unavailable sites by pulling the pages from
Google search cache. It used a trick to inject a script from my own site into
the cached context, and then intercepted user clicks to send them back to the
cache. Unfortunately,
&lt;a href="https://x.com/searchliaison/status/1753156161509916873"&gt;google removed&lt;/a&gt;
access to its search cache, which completely broke GCB.
&lt;a href="https://web.archive.org/"&gt;Wayback machine&lt;/a&gt; is now the next best thing.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/gcache"&gt;Google&lt;/a&gt; and
&lt;a href="https://github.com/nevkontakte/bcache"&gt;Bing&lt;/a&gt; Cache Dumpers
&lt;span class="badge badge-secondary"&gt;PHP&lt;/span&gt; — a couple of scripts for
downloading web sites from a search engine cache. Originally developed when a
popular at the time web hosting company went down and lost all customer data
as a way for people to recover at least some of their web site contents.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Facets of simplicity</title>
      <link>https://nevkontakte.com/2020/Facets-of-simplicity.html</link>
      <pubDate>Sat, 18 Apr 2020 13:29:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2020/Facets-of-simplicity.html</guid>
      <description>&lt;p&gt;Simplicity is complicated. In the Golang community, this statement is most often
attributed to &lt;a href="https://talks.golang.org/2015/simplicity-is-complicated.slide"&gt;Rob Pike&lt;/a&gt;
but it turns out a lot of people said something like that. A couple of weeks ago
I encountered this yet again in a debate with a colleague (someone with lots of
experience and whose opinion I respect a lot). Both of us considered ourselves
advocates for simplicity, yet we were leaning towards radically different
technical approaches. Both, of course, were sure that &lt;em&gt;our own&lt;/em&gt; solution is much
simpler than the other, and even had a good set of technical arguments to
support that.&lt;/p&gt;
&lt;p&gt;Without going into too many details, we needed a bunch of small business logic
snippets executed ever so often against a certain dataset. The whole thing was
supposed to be pretty small and simple (no high-load, out of the critical path,
latency insensitive, etc.), so the main concern was to minimize maintenance and
debugging effort. In this particular case, the language was Go, but frankly, this
can be applied to any language.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FSEconomy noob: most profitable assignments?</title>
      <link>https://nevkontakte.com/2018/FSEconomy-noob-most-profitable-assignments.html</link>
      <pubDate>Fri, 22 Jun 2018 23:13:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2018/FSEconomy-noob-most-profitable-assignments.html</guid>
      <description>&lt;p&gt;Not so long ago I&amp;rsquo;ve discovered &lt;a href="http://www.fseconomy.net"&gt;FSEconomy&lt;/a&gt;, an
economy meta-gate for flightsim fans. Despite of somewhat simplistic core
mechanics and unfancy look, it has a very active community and a lot of depth to
it. I&amp;rsquo;ve spent last couple of weeks reading the manual, watching community
forums and doing some assignments in the game itself. And the more I was
learning the more questions I was having: where to fly? Which aircraft? Rent,
buy or lease? What about FBOs? How to find the best assignments? The manual and
community forums have some advices, but I want more definite answers.&lt;/p&gt;
&lt;p&gt;I mean, staying net positive is not so difficult, but being &lt;em&gt;efficient&lt;/em&gt; is a
whole another story. And I want to be as efficient as I can. Luckily, FSE offers
a treasure trove of data to support decision-making in a form of
&lt;a href="https://sites.google.com/site/fseoperationsguide/data-feeds"&gt;data feeds&lt;/a&gt;. So I
armed myself with Python and spend a few evenings getting some answers.&lt;/p&gt;
&lt;p&gt;Since I&amp;rsquo;m still quite a noob in this game, my high-level plan is this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find the most efficient way to build up initial capital without owning any
assets.&lt;/li&gt;
&lt;li&gt;Find out which assets (FBOs or aircraft, which ones) would provide the most
significant cost reduction.&lt;/li&gt;
&lt;li&gt;Invest and explore less involved methods of gaining revenue: rent/lease
business, FBOs and all other fun.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Comment branching in C++</title>
      <link>https://nevkontakte.com/2015/comment-branching-in-cpp.html</link>
      <pubDate>Mon, 07 Sep 2015 14:32:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2015/comment-branching-in-cpp.html</guid>
      <description>&lt;p&gt;Recently I&amp;rsquo;ve stumbled upon a code snippet in my C++ code, which I&amp;rsquo;d call &amp;ldquo;comment branching&amp;rdquo;. For example, you are experimenting with two implementations of the same functionality represented by a relatively small pieces of code and you need to switch between them back and forth until you decide which one will end up in final version.&lt;/p&gt;
&lt;p&gt;Consider following snippet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;//*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;to_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*/
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;std::string number_str = boost::lexical_cast&amp;lt;std::string&amp;gt;(number);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you simply remove first slash from the second line, it turns into this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-c++" data-lang="c++"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kt"&gt;long&lt;/span&gt; &lt;span class="n"&gt;number&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;std::string number_str = std::to_string(number);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt; &lt;span class="n"&gt;number_str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boost&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;lexical_cast&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="n"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;number&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cm"&gt;/**/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Your first implementation became switched off, while code remained completely valid.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s pretty obvious, what&amp;rsquo;s going on there. &lt;code&gt;//*&lt;/code&gt; is &amp;ldquo;commented-out&amp;rdquo; beginning of multi-line comment which becomes uncommented in second case. If might be considered as a kind in &lt;code&gt;if&lt;/code&gt; equivalent. &lt;code&gt;/*/&lt;/code&gt; is a universal token which either starts or ends multi-line comment, depending on preceding context, something like &lt;code&gt;else&lt;/code&gt;. Finally, &lt;code&gt;/**/&lt;/code&gt; works as &lt;code&gt;endif&lt;/code&gt; token, which terminates comment is case was opened before, or does nothing otherwise. It might also be &lt;code&gt;//*/&lt;/code&gt;, but visually I like &lt;code&gt;/**/&lt;/code&gt; more.&lt;/p&gt;
&lt;h2 id="be-warned"&gt;Be warned!&lt;/h2&gt;
&lt;p&gt;This technique has some disadvantages, which must be taken into account:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It&amp;rsquo;s a very obscure way of code management for anyone except you and even for you few months later. Don&amp;rsquo;t commit this ever, it&amp;rsquo;s just a time-saver during playing with code.&lt;/li&gt;
&lt;li&gt;If code block a large, it&amp;rsquo;s hard to find these boundaries visually, especially taking into account that they most likely won&amp;rsquo;t be indented.&lt;/li&gt;
&lt;li&gt;It doesn&amp;rsquo;t work at all if code between this special comments contains multi-line comments.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Hosted by GitHub</title>
      <link>https://nevkontakte.com/2015/Hosted-by-GitHub.html</link>
      <pubDate>Sun, 30 Aug 2015 17:58:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2015/Hosted-by-GitHub.html</guid>
      <description>&lt;p&gt;Finally, I&amp;rsquo;ve completed transition of this blog to GitHub pages, planned over
two years ago. I did the first step — migration to a static site engine
(specifically,
&lt;a href="https://web.archive.org/web/20221210230703/https://posativ.org/acrylamid/"&gt;Acrylamid&lt;/a&gt;)
— back in March 2014. And since than I&amp;rsquo;ve been saying to myself &amp;ldquo;one day I must
move it to a GitHub as it&amp;rsquo;s a best free hosting for a static site&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;I couldn&amp;rsquo;t tell for how long I&amp;rsquo;d continue slacking like this, but now I had to
do this. This site was hosted at free hosting service provided by
&lt;a href="http://web.archive.org/web/20200126224156/http://www.eomy.net/"&gt;EOMY.net&lt;/a&gt; since
it&amp;rsquo;s very beginning and recently I&amp;rsquo;ve received a notification, that
&lt;a href="http://web.archive.org/web/20200126224156/http://www.eomy.net/forum/9-sentyabrya-my-zakryvaem-uslugi-virtualnogo-hostinga-vt5542.html"&gt;EOMY shuts down&lt;/a&gt;
it&amp;rsquo;s shared hosting, completely focusing on VDS. It&amp;rsquo;s a bit sad news, as EOMY
managed to provide fantastically stable and reliable hosting for all this years,
so great thank you for them and good luck with VDS business!&lt;/p&gt;
&lt;p&gt;By the way, I have plans on implementing an automated process of site generation
and deployment using TravisCI the way it&amp;rsquo;s
&lt;a href="https://github.com/nevkontakte/gcb-js/blob/master/.travis.yml"&gt;done for GCB-JS&lt;/a&gt;.
If i do this, I&amp;rsquo;d be able to blog right from GitHub interface, which would be
pretty cool :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rogue Ninja support in CLion</title>
      <link>https://nevkontakte.com/2015/Rogue-Ninja-support-in-CLion.html</link>
      <pubDate>Wed, 26 Aug 2015 23:44:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2015/Rogue-Ninja-support-in-CLion.html</guid>
      <description>&lt;p&gt;In a past few years I&amp;rsquo;ve been using C++ as my main programming language and during this time I&amp;rsquo;ve been in constant search for better IDE for it which would run on Linux. I was very happy when Jetbrains released &lt;a href="https://www.jetbrains.com/clion/"&gt;CLion IDE&lt;/a&gt; and immediately gave it a try. Though there is a lot to improve yet, I&amp;rsquo;d say that it has best autocompletion and modern C++ support among C++ IDEs on Linux. The only problem I had with it was a build toolchain which it uses.&lt;/p&gt;
&lt;p&gt;Currently CLion supports only &lt;a href="http://www.cmake.org/"&gt;CMake&lt;/a&gt; projects (with is totally fine for me) with &lt;a href="https://www.gnu.org/software/make/"&gt;GNU Make&lt;/a&gt; generator (which is sad). When using CMake, I always preferred &lt;a href="https://ninja-build.org/"&gt;Ninja&lt;/a&gt; build system, especially for large projects like one I work on as my main job. For some reason Make does not a very good job at incremental builds. For example, even if there is nothing to rebuild, it spends 5 seconds to only verify this fact, which is pretty annoying. On other hand, Ninja does this in like 200 ms.&lt;/p&gt;
&lt;p&gt;Unfortunately, CLion developers currently have no plans on supporting Ninja (I realize that they have many things to do way more important than Ninja support), so I decided to solve this problem by myself.&lt;/p&gt;
&lt;h2 id="cmake-ninja-wrapper-for-clion"&gt;CMake-Ninja wrapper for CLion&lt;/h2&gt;
&lt;p&gt;I&amp;rsquo;ve found &lt;a href="https://web.archive.org/web/20160521183813/http://www.mergeconflict.net/2014/11/speeding-up-clion-build-times-with.html"&gt;a kind of solution&lt;/a&gt; for my problem on internet but it had two very critical drawbacks:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You meed to edit manually CMake cache for each project you work on.&lt;/li&gt;
&lt;li&gt;You have to run &lt;code&gt;cmake -G Ninja&lt;/code&gt; manually eash time you add or remove files from your project.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After messing around CMake and &lt;code&gt;~/.clion11&lt;/code&gt; directory for a while I&amp;rsquo;ve came up with a simple python script which wrapped around CMake binary used by CLion, replacing &lt;code&gt;-G &amp;quot;Unix Makefiles&amp;quot;&lt;/code&gt; command line option with &lt;code&gt;-G Ninja&lt;/code&gt;. It did work in terms of making CLion using Ninja for building a project and didn&amp;rsquo;t require any additional actions from me unlike previous solution. Unfortunatelly, it absolutely broke autocompletion support in the IDE, since it relied upon some artifacts, which Unix Makefiles generator was producing.&lt;/p&gt;
&lt;p&gt;After some trial and errors I modified my script to act according following rules:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Whenever it&amp;rsquo;s called outside of CLion&amp;rsquo;s private directory (&lt;code&gt;~/.clionXX&lt;/code&gt;) or there is no &lt;code&gt;-G&lt;/code&gt; option in command line, it simply passes control over to CMake.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If there is &lt;code&gt;-G&lt;/code&gt; option, it does some black magic to make me, CMake and CLion happy:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;First, it calls real CMake with original arguments, producing Makefiles required by CLion.&lt;/li&gt;
&lt;li&gt;Then it alters CMakeCache.txt to make CMake think that previous generator used was Ninja, not Unix Makefiles.&lt;/li&gt;
&lt;li&gt;Finally, replace &amp;ldquo;Unix Makefiles&amp;rdquo; occurrance in generator name with &amp;ldquo;Ninja&amp;rdquo; and call CMake again.&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;You may &lt;a href="https://gist.github.com/nevkontakte/3f22937b2c3a4ff2293c"&gt;grab the script on GitHub&lt;/a&gt;. I&amp;rsquo;ve tested it on Linux and Python 2.7 but I suppose it should work on Windows and Mac too, maybe with minor modifications. Please, let me know in comments if it worked for you :-)&lt;/p&gt;
&lt;p&gt;Finally, this script has several imperfections, which I&amp;rsquo;ll fix in future. One of the most important is that it currently mizes stderr and stdout of CMake which seems to confuse CLion a little bit when dealing with invalid CMakeList.txt file.&lt;/p&gt;</description>
    </item>
    <item>
      <title>В День Победы</title>
      <link>https://nevkontakte.com/2014/To-the-Victory-Day.html</link>
      <pubDate>Fri, 09 May 2014 17:47:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/To-the-Victory-Day.html</guid>
      <description>&lt;p&gt;&lt;em&gt;В виде исключения этот пост будет на русском, поскольку он касается в первую очередь русскоязычной аудитории.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;9 мая, День Победы — один из самых главных праздников в странах бывшего СССР. По массовости празднования он может соперничать разве что с Новым Годом. Однако, мне кажется, с течением лет акцент этого праздника становится все более и более неправильным. Он превращается в символ военной доблести, военной мощи, величия. Бесспорно, все это было, и это сыграло &lt;em&gt;важнейшую&lt;/em&gt; роль для победы как таковой. Честь и память всем, кто сражался за свободу наших родин, и тех, кто трудился в тылу и в оккупации.&lt;/p&gt;
&lt;p&gt;Но вот чем этот праздник так и не стал — это символом Большой Ошибки. Победа может быть только тогда, когда есть война. Чтобы была победа должны погибнуть люди — неважно, кто именно победил, кто агрессор и кто больше виноват. Погибнут люди с обеих сторон. Большая Ошибка — это начинать войну. Да, если враг ступил на нашу землю, то он должен быть изгнан. Если в его руках оружие, оно должно быть и в наших руках. Но, начав войну, мы, как &lt;em&gt;человечество&lt;/em&gt;, делаем ошибку, за которую будем дорого платить.&lt;/p&gt;
&lt;p&gt;Боюсь, что в современном мире у нас нет права на еще одну такую же ошибку, ибо мы не сможем выплатить ее цену. Поэтому я хочу пожелать всем, независимо от национальности и убеждений, одно: помните уже совершенные Ошибки и не дайте совершить еще одну.&lt;/p&gt;
&lt;p&gt;P.S. Специально берег эту песню для сегодняшнего поста.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Crowd funding EaxCast podcast</title>
      <link>https://nevkontakte.com/2014/Crowd-funding-EaxCast-podcast.html</link>
      <pubDate>Thu, 08 May 2014 14:34:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Crowd-funding-EaxCast-podcast.html</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve never really mentioned this on the Internet, but I&amp;rsquo;m podcast-addicted kind of person. At the moment I have about 20 different podcasts in my subscription list and I enjoy them very much. Actually, it turned out that listening to podcasts does two important things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You don&amp;rsquo;t fall completely bored while doing some monotonic work like house cleaning or dish washing.&lt;/li&gt;
&lt;li&gt;It delivers you most of the important news, keeping you up-to-date at no time cost. You know, you &lt;em&gt;have to&lt;/em&gt; wash dishes at some point&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;In my list there are two categories of podcasts: general tech news and hardcore-geeky-programming stuff. And actually I love latter the most. This kind of discussions make me thinking, directs me while exploring new technologies, teaches about things far beyond of my scope and so on. Unfortunately, there are not so many shows of this kind.&lt;/p&gt;
&lt;p&gt;One of the young and promising podcasts is &lt;a href="http://eax.me/tag/podcast/"&gt;EaxCast&lt;/a&gt; and at this time they are &lt;a href="https://boomstarter.ru/projects/120343/tekstovaya_rasshifrovka_2-go_sezona_it-podkasta_eaxcast"&gt;raising funds for second season of the show&lt;/a&gt;. I&amp;rsquo;m not a kickstarter kind of person, but what makes these campaign special, is that collected money would be spent on creating text transcripts of the show. Actually, I know only about two tech podcasts, which make these transcripts. First is &lt;a href="http://grc.com/sn"&gt;Security Now&lt;/a&gt; and the second is EaxCast.&lt;/p&gt;
&lt;p&gt;Why text transcripts rule? Fucking obvious: it make 1 hour show searchable. When you heard something interesting in the middle of you way to work, you don&amp;rsquo;t have to scroll through all audio file to find it again. You just open a transcript, hit Ctrl+F and here you are.&lt;/p&gt;
&lt;p&gt;Why am I writing this? There are only 4 days left and ~6k rubles to go. It&amp;rsquo;s 8%, they almost did it. So, if you are a programming geek, if you like what guys doing, than &lt;a href="https://boomstarter.ru/projects/120343/tekstovaya_rasshifrovka_2-go_sezona_it-podkasta_eaxcast"&gt;go donate&lt;/a&gt; them some money. If you don&amp;rsquo;t like it, go listen the first season of the podcast, like it and &lt;a href="https://boomstarter.ru/projects/120343/tekstovaya_rasshifrovka_2-go_sezona_it-podkasta_eaxcast"&gt;go donate&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Motivational song included.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Cache Browser 3.0: The Late Announcement</title>
      <link>https://nevkontakte.com/2014/Google-Cache-Browser-3.0-The-Late-Announcement.html</link>
      <pubDate>Wed, 07 May 2014 22:21:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Google-Cache-Browser-3.0-The-Late-Announcement.html</guid>
      <description>&lt;p&gt;Today I&amp;rsquo;m going to announce a pet project, which I&amp;rsquo;ve been working on for a last
few month. It happened so that it&amp;rsquo;s live for more than two years and it&amp;rsquo;s the
third major release, but I never announced it on my blog. Now I have to fix
this.&lt;/p&gt;
&lt;h1 id="meet-google-cache-browser"&gt;Meet: &lt;a href="http://cache.nevkontakte.com/#!"&gt;Google Cache Browser&lt;/a&gt;.&lt;/h1&gt;
&lt;p&gt;The idea behind this project is pretty simple: when viewing Google&amp;rsquo;s search
cache, click on any link on the cached page is going to send you back to live
site, not to cache, and there are many situations when this is not what you
want. For example, when you site of interest is under maintenance and you need
to find something there, all internal links would be broken, leading you to
&amp;ldquo;Temporary unavailable&amp;rdquo; page.&lt;/p&gt;
&lt;p&gt;This is where Google Cache Browser comes in. It would inject himself into cached
page, catch all click on links and redirect you to cached versions of paged they
point to. The most beautiful thing is that you don&amp;rsquo;t have to install any kind of
browser extensions: GCB is a pure JavaScript running is your browser.&lt;/p&gt;
&lt;p&gt;There are two ways to use GCB:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open &lt;a href="http://cache.nevkontakte.com/#!"&gt;cache.nevkontakte.com&lt;/a&gt;, put in URL of
a page and hit &amp;ldquo;Go&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Use
&lt;a href="javascript:void(function%20()%7B%0A%22use%20strict%22%3B%0Avar%20loader%3Ddocument.createElement(%22script%22)%3Bloader.setAttribute(%22type%22%2C%22text%2Fjavascript%22)%3Bloader.setAttribute(%22src%22%2C%22http%3A%2F%2Fcache.nevkontakte.com%2Fbookmarklet.js%22)%3Bif(document.body!%3Dnull)%7Bdocument.body.appendChild(loader)%3B%7Delse%7Bdocument.appendChild(loader)%3B%7D%7D())"&gt;GCB bookmarklet&lt;/a&gt;.
It&amp;rsquo;s designed to take you to the cached version of page you&amp;rsquo;re currently
viewing, plus adding all nice GCB features.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Переход блога на английский</title>
      <link>https://nevkontakte.com/2014/Switching-to-English.html</link>
      <pubDate>Thu, 24 Apr 2014 22:40:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Switching-to-English.html</guid>
      <description>&lt;p&gt;Месяц назад я всерьез
&lt;a href="https://nevkontakte.com/2014/Blogging-in-English.html"&gt;задумался о переходе на английский&lt;/a&gt; для ведения
этого блога. Проведенный опрос показал, что большая часть моих читателей не
выступает против этого шага, так что этот пост будет последним на русском языке.&lt;/p&gt;
&lt;p&gt;Еще раз перечислю причины перехода:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Я пишу в основном на технические темы, часто — довольно узкие. На английском
мои посты будут найдены и прочтены большим количеством людей.&lt;/li&gt;
&lt;li&gt;Писать на технические темы по-английски часто даже проще, чем на русском.&lt;/li&gt;
&lt;li&gt;Подтянуть свой письменный и разговорный английский. Такая практика не бывает
лишней.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Тем не менее, я решил, что наиболее важные и интересные посты я буду писать и на
русском. Они будут публиковаться на Хабре, желающие читать их могут
подписываться на &lt;a href="https://habr.com/ru/users/nevkontakte/posts/"&gt;мой аккаунт&lt;/a&gt;.
Хабр, кстати, отдает RSS, так что все желающие читать меня, но не желающие
заводить аккаунт на Хабре, могут воспользоваться любимой читалкой.&lt;/p&gt;
&lt;p&gt;Я теперь о &amp;ldquo;последней соломинке&amp;rdquo;, которая заставила меня принят решение о смене
языка. Обычно я стараюсь избегать политических тем, что здесь, что в твиттере,
но это не лезет ни в какие рамки. Я говорю об очередном
&lt;a href="https://web.archive.org/web/20220202214444/https://sozd.duma.gov.ru/bill/428884-6"&gt;идиотском законе&lt;/a&gt;,
принятом народными избранниками. Вкратце: если у вас есть страничка в интернете
с посещаемостью более 3000 человек в сутки — добро пожаловать в &lt;del&gt;море
геморроя&lt;/del&gt; реестр, считайте себя СМИ. И хоть у меня посетителей гораздо меньше,
я хочу быть подальше от этого маразма.&lt;/p&gt;
&lt;p&gt;Напоследок, мое мнение обо всех &amp;ldquo;цензурных&amp;rdquo; законах последнего времени:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Перенос комментариев из Drupal в Disqus</title>
      <link>https://nevkontakte.com/2014/Moving-comments-from-Drupal-to-Disqus.html</link>
      <pubDate>Thu, 24 Apr 2014 01:01:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Moving-comments-from-Drupal-to-Disqus.html</guid>
      <description>&lt;p&gt;Пришло время завершить цикл постов о переезде этого блога на статический движок.
Я уже успел &lt;a href="https://nevkontakte.com/tags/migration.html"&gt;рассказать&lt;/a&gt; о переносе самих постов и о
манипуляциях со структурой адресов. Последняя оставшаяся не освещенной тема —
перенос комментариев. За 6 лет существования блога их накопилось немало, и было
бы обидно от них отказаться.&lt;/p&gt;
&lt;p&gt;Так как
&lt;a href="https://web.archive.org/web/20221210230703/https://posativ.org/acrylamid/"&gt;Acrylamid&lt;/a&gt;
— полностью статический движок, его средств недостаточно для обеспечения
комментирования на блоге, и у меня возник выбор: либо использовать сторонние
сервисы, либо поднять на своем сервере собственное решение (например,
&lt;a href="https://isso-comments.de/"&gt;ISSO&lt;/a&gt; от того же разработчика). Взвесив все
альтернативы, я понял, что совершенно не хочу заморачиваться с собственным
решением и, по крайней мере поначалу, воспользуюсь услугами стороннего сервиса.&lt;/p&gt;
&lt;p&gt;Исследование показало, что хороших вариантов не так уж и много, и Disqus из них
кажется самым удобным. Но, что самое важное, он позволяет импортировать и
&lt;em&gt;экспортировать&lt;/em&gt; комментарии в достаточно простом формате. Это обеспечивало мне
возможность в любой момент сменить его на любой аналог, лишь поколдовав над
конвертацией дампа комментариев.&lt;/p&gt;
&lt;p&gt;Впрочем, есть и негативные моменты, которые скорее всего вынудят меня однажды
пойти искать другую платформу. Первый среди них — тяжеловесность клиентского JS
даже в сжатом виде — около 700 КБ. Это гораздо больше, чем мне хотелось бы.&lt;/p&gt;
&lt;p&gt;Теперь дело было за малым — сгенерировать дамп для импорта в Disqus. Конечно,
для Drupal существует модуль, позволяющий импортировать все комментарии в
Disqus, но он не мог ничего знать про новую структуру адресов постов, и, стало
быть, после смены движка снова стал бы бесполезен. Так что я пошел по уже
проторенному пути, и стал писать свой экспорт комментариев из Drupal. К счастью,
Disqus
&lt;a href="http://help.disqus.com/customer/portal/articles/472150-custom-xml-import-format"&gt;умеет импортировать&lt;/a&gt;
комменты в формате WXR (родной формат экспорта Wordpress), который представляет
собой достаточно простой XML.&lt;/p&gt;
&lt;p&gt;Достать комментарии из базы Drupal было проще простого:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;SELECT cid, pid, nid, comment, hostname, timestamp, name, mail, homepage
        FROM drupal_comments
        WHERE status = 0
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Сохранить его в нужном формате
&lt;a href="https://github.com/nevkontakte/drupal2acrylamid/blob/master/acryl/__init__.py#L148-L164"&gt;почти так же просто&lt;/a&gt;,
если использовать модуль питона lxml. Единственная тонкость — указывая ссылку на
пост, по которой Disqus потом определит принадлежность комментариев, нужно
указывать новый адрес поста, консультируясь с картой перенаправлений, полученной
на [предыдущем этапе](/2014/Changing URL structure for Acrylamid.html).&lt;/p&gt;
&lt;p&gt;Дальнейшие шаги хорошо документированы на
&lt;a href="http://help.disqus.com/customer/portal/topics/107054-developers/articles"&gt;справочном сайте Disqus&lt;/a&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Добавление сайта в систему.&lt;/li&gt;
&lt;li&gt;Импорт файла с комментариями (обычно занимает минут 5).&lt;/li&gt;
&lt;li&gt;Установка кода на сам блог.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На этом, пожалуй, все, что касается переезда. Надеюсь, кому-то это пригодится
:-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Инструкция для спаммеров: как не надо сочинять письма</title>
      <link>https://nevkontakte.com/2014/Things-you-must-not-do-when-composing-spam-letter.html</link>
      <pubDate>Mon, 24 Mar 2014 15:00:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Things-you-must-not-do-when-composing-spam-letter.html</guid>
      <description>&lt;p&gt;И так, допустим, тяжкая доля загнала вас на кривенькую дорожку спамера-мошенника, выманивающего банковские данные у ничего не подозревающих граждан. В этом посте я научу вас, как составлять убедительные письма, основываясь на антипримере, который я вчера обнаружил в своем почтовом ящике:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/Google_scam.jpg" alt="Pseudo-Google spam letter"&gt;&lt;/p&gt;
&lt;p&gt;Прежде чем приступить к разбору замечу, что такой концентрации бреда на единицу текста с тех пор, как перестал модерировать один крупный форум. И так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Побойтесь бога, не присылайте текст в картинке. Понимаю, что вы хотите избежать спам-фильтров, но для этого отлично подойдет pdf без текстового слоя. Ни одна уважающая себя корпорация не рассылает документы в картинках, зато pdf любят все.&lt;/li&gt;
&lt;li&gt;Не позволяйте себе фамильярности, пишите канцеляритом. Ну разве можно располагать на соседних строчках фразы &amp;ldquo;official notification letter&amp;rdquo; и &amp;ldquo;it is obvious that this notification will come to you as a surprise&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Пишите по делу. Если уж вы пишите жертве, что она выиграла лотерею, так напишите детально, что за лотерея, почему она в ней участвует и вообще. Еще лучше, дайте ссылку на &amp;ldquo;сайт&amp;rdquo; лотереи, желательно на домене Google.&lt;/li&gt;
&lt;li&gt;Не мелочитесь. Если уж обещаете приз в 950 тысяч фунтов, то хотя бы не приписывайте к этому жалкий Google Nexus 10.&lt;/li&gt;
&lt;li&gt;Так же не стоит злоупотреблять восклицательными знаками, даже если слово &amp;ldquo;WARNED&amp;rdquo; так и просит поставить еще парочку.&lt;/li&gt;
&lt;li&gt;Наконец, вы нарисовали вполне убедительную печать (хотя я лучше умею, да и чернила не того оттенка, и слишком ровные), подделали подпись Ларри Пейджа. Ну зачем еще рисовать совершенно нереалистичную красную наклейку &amp;ldquo;Google Incorporation&amp;rdquo;?! Поставьте тебя на место лоха, подумайте, что вам показалось бы подозрительным, я что — нет. Подсказка: наклейка очень подозрительная.&lt;/li&gt;
&lt;li&gt;И совсем последнее, на картинке этой детали нет, что не умаляет её важности. Не отправляйте &amp;ldquo;официальное&amp;rdquo; письмо от Google с ящика в домене ieu.edu. Подделать отправителя совсем не сложно.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;P.S. Disclaimer: я не призываю рассылать спам. Я призываю включать мозги.&lt;/p&gt;
&lt;p&gt;P.P.S. А вы заметили, что логотип Google в верхней части это просто вставленный скриншот, при том древний, так как он перекрывает &amp;ldquo;водяные знаки&amp;rdquo;, покрывающие страницу. Между прочим, актуальное лого Выглядит &lt;a href="https://www.google.com/images/srpr/logo11w.png"&gt;так&lt;/a&gt;, и это png с прозрачностью, которая позволила бы такого ляпа избежать. Взято с &lt;a href="https://www.google.com/"&gt;Google.com&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Переход блога на английский?</title>
      <link>https://nevkontakte.com/2014/Blogging-in-English.html</link>
      <pubDate>Sun, 16 Mar 2014 20:15:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Blogging-in-English.html</guid>
      <description>&lt;p&gt;В последнее время меня все чаще посещает мысль о смене языка блога на английский. Впрочем, прежде чем принимать решение, я считаю правильным узнать мнение моей нынешней аудитории.&lt;/p&gt;
&lt;p&gt;У меня, пожалуй, три причины для смены языка:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Большая часть постов у меня так или иначе связана с решением тех или иных технических задач. Будучи изложенным на английском, решение смогут найти и прочесть куда большее количество людей.&lt;/li&gt;
&lt;li&gt;Писать о технических вещах, как правило тоже легче на английском языке. Все-таки изобретение русскоязычных аналогов для технической терминологии — дело довольно неблагодарное.&lt;/li&gt;
&lt;li&gt;Языковая практика. Чтение на английском уже давно не представляет для меня проблемы, но вот с речью есть определенные трудности, в основном грамматического толка, вызванные недостатком практики. Ну а блоггинг на английском — неплохой способ практику восполнить.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Писать на двух языках сразу, увы, не вариант: написание одного поста будет занимать слишком много времени.&lt;/p&gt;
&lt;p&gt;Так что я хотел бы узнать, как мои подписчики относятся к английскому языку, и насколько неприятен для них будет переход на него. Ниже я размещаю голосование и очень прошу потратить полминуты на ответ. А если вашего варианта в ней не найдется — велкам в комментарии ;-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Изменение структуры URL при переезде на Acrylamid</title>
      <link>https://nevkontakte.com/2014/Changing-URL-structure-for-Acrylamid.html</link>
      <pubDate>Sun, 16 Mar 2014 16:53:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Changing-URL-structure-for-Acrylamid.html</guid>
      <description>&lt;p&gt;Продолжу рассказ о приключениях, связанных с уходом с Drupal на Acrylamid. Как и обещал, на этот раз речь пойдет о смене структуры адресов страниц моего блога.&lt;/p&gt;
&lt;p&gt;Напомню еще раз о задачах, которые я перед собой поставил:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Сделать более-менее вменяемые URL постов. Например, транслитерированный кошмар вроде &lt;code&gt;/blog/aleks/ispolzuem-svn-v-upravlenii-saitom-chast-pervaya-teoreticheskie-soobrazheniya&lt;/code&gt; превратить в более вменяемое &lt;code&gt;/2008/Use-SVN-website-governance-Part-one-theoretical-considerations.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Скорректировать все внутренние ссылки на посты, чтобы они указывали на правильные адреса постов. Попутно — все внутренние ссылки, картинки и тому подобное с полными адресами виде &lt;code&gt;http://nevkontakte.(com|org.ru)/whatever&lt;/code&gt; позаменять на просто &lt;code&gt;/whatever&lt;/code&gt;, чтобы обезопасить себя от проблем в случае смены домена или, например, перехода на https.&lt;/li&gt;
&lt;li&gt;Организовать редиректы со старых адресов постов на новые для поисковиков и внешних ссылок.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;О решении первых двух проблем я уже успел вкратце рассказать в [предыдущем посте](/2014/Importing content into Acrylamid.html), поэтому сегодня сосредоточусь на том, как сопрячь старые и новые адреса постов по возможности ничего не поломав ни для людей, ни для поисковиков:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Внешние ссылки на посты по старым адресам не должны быть сломаны.&lt;/li&gt;
&lt;li&gt;При запросе старого адреса страницы поисковики должны получать редирект 301 на новый адрес, чтобы они могли корректно переиндексировать сайт.&lt;/li&gt;
&lt;li&gt;В будущем, как настоящий гик, я хочу захостить блог на &lt;a href="http://pages.github.com/"&gt;GitHub Pages&lt;/a&gt;, раз уж он у меня полностью статический.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Единственная сложность — GitHub Pages не предусматривает никакой возможности задать 301-й редирект для определенного адреса. Поэтому, решение состоит из двух шагов:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Сгенерировать &lt;code&gt;.htaccess&lt;/code&gt; с редиректами для поисковиков, и дождаться переиндексации, оставаясь на старом хостинге, который работает на Apache.&lt;/li&gt;
&lt;li&gt;Так же сгенерировать набор страничек-заглушек с перенаправлением через &lt;code&gt;&amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot;&amp;gt;&lt;/code&gt;, которые будут служить для перенаправления пользователей после переезда на GitHub.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Имея адреса новых и старых страниц сделать это не так уж и сложно:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/drupal2acrylamid/blob/master/acryl/__init__.py#L105-L118"&gt;Код генерации &lt;code&gt;.htaccess&lt;/code&gt;&lt;/a&gt;. На выходе — длинный-длинный &lt;code&gt;.htaccess&lt;/code&gt;, с правилами для &lt;code&gt;mod_rewrite&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/drupal2acrylamid/blob/master/acryl/__init__.py#L196-L221"&gt;Код генерации заглушек для GH Pages&lt;/a&gt;. Результат работы — по адресу старой странички генерируется почти пустой HTML документ, содержащий в себе лишь meta redirect на нужный адрес с нулевой задержкой.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Есть один лайф-хак, связанный с таким решением. Если хостинг не поддерживает &amp;ldquo;умных&amp;rdquo; средств передачи файлов типа rsync, можно сэкономить кучу времени, не загружая на сервер заглушки для гитхаба — их работу сделает &lt;code&gt;.htaccess&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Что такое веб фреймворки?</title>
      <link>https://nevkontakte.com/2014/Web-frameworks.html</link>
      <pubDate>Mon, 10 Mar 2014 14:47:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Web-frameworks.html</guid>
      <description>&lt;p&gt;Я уже довольно давно являюсь слушателем Радио-Т и, хотя частенько не разделяю мнения ведущих, нахожу шоу довольно интересным. Однако, в &lt;a href="http://www.radio-t.com/p/2014/03/08/podcast-382/"&gt;выпуске Radio-T от 8 марта&lt;/a&gt; было два эпизода, которые меня слегка покоробили. Первый — фирменный троллинг от Umputun&amp;rsquo;a на тему ненужности сисадминов. Впрочем, я склонен считать, что у него с логикой все в порядке, и этот пассаж является всего лишь любимой, хоть и надоевшей, шуткой.&lt;/p&gt;
&lt;p&gt;Второй раз я расстроился в тот момент, когда ни гости, ни ведущие подкаста не смогли дать внятного ответа на поставленный Umputun&amp;rsquo;ом вопрос о том, что такое веб-фреймворки. Между тем, этот вопрос одновременно и близок мне, и достаточно прост. На него я и попытаюсь ответить.&lt;/p&gt;
&lt;h2 id="что-такое-фреймфорк"&gt;Что такое фреймфорк?&lt;/h2&gt;
&lt;p&gt;В программистском миру бытует путаница между понятиями «библиотека» и «фреймворк», поэтому я начну именно с них.&lt;/p&gt;
&lt;p&gt;С библиотекой всё просто:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Библиотека (от англ. library) в программировании — это подпрограмм или объектов, используемых для разработки программного обеспечения (ПО) (&lt;a href="http://ru.wikipedia.org/wiki/%D0%91%D0%B8%D0%B1%D0%BB%D0%B8%D0%BE%D1%82%D0%B5%D0%BA%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5)"&gt;wiki&lt;/a&gt;).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;С фреймворком путаницы больше, но, на самом деле, она легко разрешима, если посмотреть определение этого слова. Например, в толковом словаре Оксфорда:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;framework — An essential supporting structure of a building, vehicle, or object (основная несущая конструкция здания, транспортного средства или объекта).&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Соответственно, в программировании &lt;em&gt;фреймворк — это нечто, в значительной степени определяющее архитектуру (структуру) программного продукта&lt;/em&gt;. Под «нечто» можно понимать набор принятых соглашений и структуре программы, стилю кода, методам взаимодействия между различными компонентами и так далее. При этом, заметьте, вовсе не обязательно, чтобы фреймворк был библиотекой, то есть предоставлял какие-то подпрограммы. Хотя, конечно, на практике фреймворки предоставляют очень богатый набор библиотек.&lt;/p&gt;
&lt;h2 id="что-такое-веб-фреймворк"&gt;Что такое &lt;em&gt;веб&lt;/em&gt;-фреймворк?&lt;/h2&gt;
&lt;p&gt;Ладно, с «просто» фреймворком разобрались, вернемся к изначальному вопросу, о природе веб-фреймворков и, собственно, к тому, что меня расстроило в подкасте.&lt;/p&gt;
&lt;p&gt;Из сказанного выше нетрудно дать следующее определения веб-фреймворка:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Веб-фреймворк — это нечто, определяющее архитектуру веб-приложения.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Но вот попытки привести это определение к более &amp;ldquo;материальному&amp;rdquo; виду начинают порождать проблемы. Так, в &lt;a href="http://web.archive.org/web/20191219201114/https://jeffknupp.com/blog/2014/03/03/what-is-a-web-framework/"&gt;статье&lt;/a&gt;, которая обсуждалась в Радио-Т, утверждалось, что веб-фреймворк — это библиотека, решающая задачу разбора HTTP запроса внутри приложения и построения ответа на него. Однако, такая точка зрения у меня вызывает много вопросов. Например, &lt;a href="http://www.doctrine-project.org/projects/orm.html"&gt;Doctrine ORM&lt;/a&gt;, &lt;a href="http://getbootstrap.com/"&gt;Twitter Bootstrap&lt;/a&gt; и &lt;a href="http://angularjs.org/"&gt;AngularJS&lt;/a&gt; несомненно так же являются веб-фреймворками, но при этом они не решают вопросы разбора HTTP зарпосов и ответов.&lt;/p&gt;
&lt;p&gt;Взяв небольшой грех на душу, можно разрешить противоречие, уточнив, что в статье идет речь о &lt;em&gt;серверном&lt;/em&gt; веб-фреймворке. Однако, как я уже продемонстрировал, на сервере свет клином не сошелся, и в вебе существуют фреймворки для решения самых разных задач, и, зачастую, один продукт использует в себе &lt;em&gt;более одного&lt;/em&gt; веб-фреймворка.&lt;/p&gt;
&lt;h2 id="резюмируя"&gt;Резюмируя&lt;/h2&gt;
&lt;p&gt;На мой взгляд, не вполне корректно задаваться вопросом о том, что такие веб-фреймворки, в отрыве от вопроса о том, что такое фреймворки вообще. Что же до вопроса, который подразумевался автором изначальной статьи, о том, какую пользу приносят веб-фреймворки (и почему не стоит писать все с нуля), то ответ прост: они предлагают удобный подход к решению типичных для веба задач. Этот подход наверняка более удобен, чем тот, который придумаете вы и, главное, он уже реализован.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Перенос постов из Drupal в Acrylamid</title>
      <link>https://nevkontakte.com/2014/Importing-content-into-Acrylamid.html</link>
      <pubDate>Fri, 07 Mar 2014 19:15:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Importing-content-into-Acrylamid.html</guid>
      <description>&lt;p&gt;В этой заметке я постараюсь рассказать о процессе переноса постов из старого
блога на Drupal в новый на Acrylamid.&lt;/p&gt;
&lt;p&gt;Прежде всего надо отдать ему должное — он из коробки неплохо
&lt;a href="https://web.archive.org/web/20211205111813/https://posativ.org/acrylamid/commands.html#import"&gt;умеет импортировать контент&lt;/a&gt;
из произвольных движков через RSS или дамп в формате Wordpress. В простых
случаях этого более, чем достаточно, но мне нужно было нечто большее.&lt;/p&gt;
&lt;p&gt;Задачу перед собой я поставил так:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Перенести все посты и комментарии к ним.&lt;/li&gt;
&lt;li&gt;Содержимое постов:
&lt;ul&gt;
&lt;li&gt;По возможности сохранить форматирование, в том числе и в самых старых
постах, где я использовал bbcode.&lt;/li&gt;
&lt;li&gt;Преобразовать html в markdown для тех случаев, где это возможно.&lt;/li&gt;
&lt;li&gt;Заменить метки друпаловского модуля
&lt;a href="https://www.drupal.org/project/inline"&gt;Inline&lt;/a&gt; на обычные ссылки.&lt;/li&gt;
&lt;li&gt;Извлечь из тела поста «feature images» (не могу подобрать адекватный перевод
:-( «Картинка для привлечения внимания»?..) и перенести в мета-информацию о
посте, чтобы можно было правильно ее стилизовать и размещать без лишней
мороки.&lt;/li&gt;
&lt;li&gt;Аналогично поступить с музыкальными видео, которые я добавляю в конец поста
в виде постскриптума, при этом необходимо сохранить и их правильные
заголовки.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Структура адресов:
&lt;ul&gt;
&lt;li&gt;Сделать более-менее вменяемые URL постов. Например, транслитерированный
кошмар вроде
&lt;code&gt;/blog/aleks/ispolzuem-svn-v-upravlenii-saitom-chast-pervaya-teoreticheskie-soobrazheniya&lt;/code&gt;
превратить в более вменяемое
&lt;code&gt;/2008/Use-SVN-website-governance-Part-one-theoretical-considerations.html&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Скорректировать все внутренние ссылки на посты, чтобы они указывали на
правильные адреса постов. Попутно — все внутренние ссылки, картинки и тому
подобное с полными адресами виде &lt;code&gt;http://nevkontakte.(com|org.ru)/whatever&lt;/code&gt;
позаменять на просто &lt;code&gt;/whatever&lt;/code&gt;, чтобы обезопасить себя от проблем в случае
смены домена или, например, перехода на https.&lt;/li&gt;
&lt;li&gt;Организовать редиректы со старых адресов постов на новые для поисковиков и
внешних ссылок.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Желающие могут сразу отправляться изучать
&lt;a href="https://github.com/nevkontakte/drupal2acrylamid"&gt;репозиторий на ГитХабе&lt;/a&gt;, в
который я залил скрипты, выполняющие всю эту работу.&lt;/p&gt;
&lt;p&gt;Для того, чтобы решить все эти задачи, мне нужно было добыть из базы данных
Друпала сведения из четырех таблиц: &lt;code&gt;drupal_node&lt;/code&gt; и &lt;code&gt;drupal_node_revisions&lt;/code&gt;
(посты,
&lt;a href="https://github.com/nevkontakte/drupal2acrylamid/blob/master/drupal/__init__.py#L34-L43"&gt;sql&lt;/a&gt;),
&lt;code&gt;drupal_comments&lt;/code&gt; (комментарии,
&lt;a href="https://github.com/nevkontakte/drupal2acrylamid/blob/master/drupal/__init__.py#L53-L55"&gt;sql&lt;/a&gt;)
и &lt;code&gt;drupal_url_alias&lt;/code&gt; («человекопонятные» адреса постов,
&lt;a href="https://github.com/nevkontakte/drupal2acrylamid/blob/master/drupal/__init__.py#L17"&gt;sql&lt;/a&gt;).
В целом процесс импорта выглядел примерно так: извлечение нужных данных из БД →
конвертация базовой мета-информации в объекты Python → приведение её в формат,
близкий к тому, что используется в Acrylamid → присвоение посту нового,
аккуратного URL → применение цепочки фильтров к содержимому постов, решающих
большую часть из поставленных задач → экспорт постов в формат Acrylamid →
построение карт переадресаций для поисковиков и людей, приходящих по старым
внешним ссылкам.&lt;/p&gt;
&lt;h2 id="генерация-url-постов"&gt;Генерация URL постов&lt;/h2&gt;
&lt;p&gt;Как я уже упомянул, на Drupal адрес поста генерировался путем банальной
транслитерации русского заголовка поста, и выглядел он совершенно нечитаемо. Как
мне сейчас кажется, лучше уж было использовать короткие адреса &lt;code&gt;/node/1234&lt;/code&gt;. С
другой стороны, в переходить на такую схему адресов мне представлялось
неудобным, так как на новом движке пришлось бы нумеровать из вручную, а это
уничтожает второе достоинство такого подхода.&lt;/p&gt;
&lt;p&gt;Единственная альтернатива — использовать в адресе не транслитерацию, а перевод
заголовка на английский. И чтобы не насиловать себя переводом заголовков двухсот
с лишним постов (233-х, если быть точным) стоило воспользоваться машинным
переводом. С одной стороны, это неизбежно даст некоторое количество
&lt;a href="https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html"&gt;ляпов&lt;/a&gt;, с другой
стороны это не критично и в большинстве случаев
&lt;a href="https://nevkontakte.com/2011/Three-top-like-utility-that-should-be-on-every-Linux-machine.html"&gt;перевод&lt;/a&gt;
вполне адекватен.&lt;/p&gt;
&lt;p&gt;К моему разочарованию, у Google Translate не оказалось нормального API и даже
«пиратской» обертки на python к их веб-интерфейсу. Я уже было собрался лезть и с
помощью Firebug выяснять, как он общается с сервером, когда меня неожиданно
выручил Яндекс со своим &lt;a href="https://translate.yandex.ru/"&gt;Яндекс.Переводчиком&lt;/a&gt;.
Качество перевода у него было похуже, но зато имелся вполне официальный
&lt;a href="https://api.yandex.ru/translate/"&gt;API&lt;/a&gt; и даже
&lt;a href="https://github.com/dieselpoweredkitten/python-yandex-translate"&gt;готовый модуль для питона&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Несколько слов про Acrylamid</title>
      <link>https://nevkontakte.com/2014/Few-words-on-Acrylamid.html</link>
      <pubDate>Wed, 05 Mar 2014 13:59:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/Few-words-on-Acrylamid.html</guid>
      <description>&lt;p&gt;Вчера я пообещал рассказать о разных технических нюансах, возникших в процессе
переезда на новый движок. Разумнее всего, мне кажется, будет начать с краткого
описания нового движка и причин, по которым я на нем остановился. Ну и, заодно,
чем был плох Drupal.&lt;/p&gt;
&lt;p&gt;И так, технических причин, побудивших меня отказаться от Drupal, которым я
&lt;a href="https://nevkontakte.com/2008/A-blog-update-2.html"&gt;пользовался&lt;/a&gt; последние 5 лет, было три:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Хлопотность обслуживания. Помимо регулярных патчей для самого движка едва ли
не каждую неделю выходили обновления для парочки из трех десятков
используемых модулей. А автообновления в Drupal 6 предусмотрено не было.&lt;/li&gt;
&lt;li&gt;Избыточная сложность. Все-таки Drupal предназначен для создания куда более
сложных и развесистых сайтов, чем личный блог. Поэтому многие его возможности
в лучшем случае играли роль мертвого груза, а в худшем — требовали совершать
лишние клики, действия и шанс как-нибудь накосячить.&lt;/li&gt;
&lt;li&gt;Тяжеловесность. За функционал надо платить, и плата выражается в потребляемой
памяти, скорости работы и занимаемом дисковом пространстве. В последний год
Drupal завел дурную привычку отжирать до 150 Мб в БД под какие-то свои кэши.
И это при том, что объем всего контента этого блога на данный меньше 30 Мб,
включая картинки, приаттаченные файлы и так далее. На мой взгляд, это как-то
совсем неприлично для скромного блога.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Неудивительно, что, выбирая замену, я ударился в другую крайность, и
рассматривал исключительно генераторы статических сайтов.&lt;/p&gt;
&lt;p&gt;Для тех, кто до сих пор с этим явлением не сталкивался, поясню. Принцип такого
движка прост: имея на руках весь контент сайта и набор шаблонов, скрипты на
&lt;em&gt;машине автора&lt;/em&gt; генерируют полный набор веб-страниц, которые должен увидеть
пользователь, включая всевозможную навигацию, теги, категории и архивы. После
этого сайт может загружается на хостинг и для своей работы не требует никаких
скриптов на сервере.&lt;/p&gt;
&lt;p&gt;Очевидно, основная выгода в том, что такой сайт может быть выложен практически
на любой хостинг и будет создавать ничтожную нагрузку на сервер даже при большом
трафике. Не менее очевидны и недостатки: для публикации нового контента на сайте
нужен доступ к хостингу, который нельзя предоставить всем посетителям.&lt;/p&gt;
&lt;p&gt;Поэтому статические движки плотно обосновались в нише гиковских персональных
блогов, сайтов небольших проектов и тому подобных не очень изменчивых ресурсов,
и не стремятся за её пределы.&lt;/p&gt;
&lt;p&gt;Одним из первых таких генераторов стал &lt;a href="http://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;, за
которым последовала масса клонов на самых разных языках и с разной
специализацией. Вот несколько из них, наиболее известных:
&lt;a href="http://octopress.org/"&gt;Octopress&lt;/a&gt; (ruby),
&lt;a href="http://blog.getpelican.com/"&gt;Pelican&lt;/a&gt; (python),
&lt;a href="https://github.com/marcoarment/secondcrack"&gt;Second Crack&lt;/a&gt; (php),
&lt;a href="https://github.com/flatiron/blacksmith"&gt;Blacksmith&lt;/a&gt; (node.js),
&lt;a href="http://getnikola.com/"&gt;Nikola&lt;/a&gt; (python), &lt;a href="http://hyde.github.io/"&gt;Hyde&lt;/a&gt; (опять
python).&lt;/p&gt;
&lt;p&gt;Среди всего этого многообразия я выбрал
&lt;a href="https://web.archive.org/web/20221210230703/https://posativ.org/acrylamid/"&gt;Acrylamid&lt;/a&gt;
по трем причинам. Во-первых, он изначально ориентирован на блоги. Во-вторых, из
коробки он умеет очень многое из того, что мне было нужно, а значит, не требовал
мучительного поиска плагинов на каждый чих. В-третьих, написан он на python,
который я знаю гораздо лучше ruby или node.js.&lt;/p&gt;
&lt;p&gt;Вот краткий список того, что он умеет:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;markdown,&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;компиляция LESS,&lt;/li&gt;
&lt;li&gt;интеграция с Disqus&lt;/li&gt;
&lt;li&gt;и много другого полезного.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И самая важная фитча — «живой» разработчик, который активно развивает движок и
охотно принимает pull request&amp;rsquo;ы. Выбор оказался удачным — для удовлетворения
всех моих капризов мне хватило нескольких модификаций, которые были оперативно
приняты в апстрим.&lt;/p&gt;
&lt;p&gt;Однако, техническая разница между acrylamid и Drupal настолько велика, что
перенос контента казался задачей очень нетривиальной. Само собой, терять посты и
комментарии за 7 лет я был неготов. В качестве дополнительного усложнения задачи
служило желание не накосячить в глазах поисковиков, так как смена движка вела к
почти неизбежной смене структуры адресов страниц. В следующей заметке я как раз
к этим вопросам и обращусь :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Иногда они возвращаются</title>
      <link>https://nevkontakte.com/2014/sometimes-they-come-back.html</link>
      <pubDate>Wed, 05 Mar 2014 00:13:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2014/sometimes-they-come-back.html</guid>
      <description>&lt;p&gt;С &lt;a href="https://nevkontakte.com/2013/Google-Cache-Dumper-and-Bing-Cache-Dumper-free.html"&gt;последнего поста&lt;/a&gt;
в этом блоге минуло чуть больше года, да и тот я был скорее вынужден написать
под влиянием обстоятельств. Причин для столь затяжного молчания было несколько.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Во-первых, реальный мир требовал невероятное количество моего внимания, в моей
жизни поменялось очень многое: я сменил работу, переехал, многое переосмыслил,
слетал в Лондон на научную конференцию, и еще многое другое.&lt;/li&gt;
&lt;li&gt;Во-вторых, серьезно-статейный формат, который сложился в начале 2012 года
требовал слишком много времени и усилий на написание новых постов, их у меня
просто не оставалось. В то же время, Twitter успешно взял на себя роль
носителя мелких сиюминутных мыслей.&lt;/li&gt;
&lt;li&gt;В-третьих, количество технических долгов перед блогом у меня накопилось
немыслимое — движок давно не обновлялся, часть модулей глючила и, что самое
критичное — отломался модуль редактора, добавив дискомфорта процессу написания
постов.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В результате, примерно с год назад была затеяна история по освежению блога,
включая смену движка и дизайна блога. И, как водится, затянулась на гораздо
больший срок, чем я рассчитывал. Более того, в какой-то момент она двинулась в
совершенно ином направлении, чем я планировал. Вместо того, чтобы писать свой
собственный движок, я (слава богу!) решил обратиться к готовому решению но, в
противовес тяжеловесному Drupal, максимально легкому и простому. Выбор пал на
&lt;a href="https://web.archive.org/web/20221210230703/https://posativ.org/acrylamid/"&gt;acrylamid&lt;/a&gt;
— статический блоговый движок, написанный на Питоне. Перед ним я рассматривал
более популярный &lt;a href="http://jekyllrb.com/"&gt;Jekyll&lt;/a&gt; и его дочку
&lt;a href="http://octopress.org/"&gt;Octopress&lt;/a&gt;, но натянутые отношения с Ruby и из рук вон
плохое поведение rvm в Ubuntu тех времен заставили искать альтернативы.&lt;/p&gt;
&lt;p&gt;С дизайном все тоже было все не очень просто. Мне изрядно поднадоела
холодно-синяя гамма, царившая у меня на сайте уже лет пять, но долгие искания
так ни к чему хорошему и не привели. Поэтому я решил пойти другим путем:
сохранив основной стиль и гамму, освежить и усовершенствовать дизайн, попутно
переверстав его на Twitter Bootstrap. Выход третьей версии застал меня врасплох
в самом конце работы, но, взвесив все «за» и «против», я решил переверстать
шаблон на новой версии во имя Mobile First и светлого будущего. Сейчас мне
кажется, что это был верный шаг — результат мне понравился.&lt;/p&gt;
&lt;p&gt;Третье изменение — блог наконец-то сменил домен на nevkontakte.com. Это должно
было произойти еще года полтора назад, но произошло лишь недавно. Старый домен
nevkontakte.org.ru я буду поддерживать еще неопределенный срок, но он будет лишь
редиректом.&lt;/p&gt;
&lt;p&gt;Впрочем, технические изменения — не самые важные. Осмысление причин такого
долгого молчания привело меня к решению о смене формата блога. Я буду постепенно
уходить от статейного формата к более коротким и практическим заметкам (коротким
по меркам статей, а не твиттера). Пусть они будут не столь
исчерпывающе-глубокомысленными, но зато они будут :-) Судя по всему, началом
этого формата станут заметки о собственно переезде блога, в процессе мне
довелось решить немало занятных задачек, которыми я и буду делиться для начала.
В общем, меньше академичности, меньше серьезности, больше практики и меня :-)&lt;/p&gt;
&lt;p&gt;Надеюсь, те немногочисленные подписчики, что еще остались у меня не будут
разочарованы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Google Cache Dumper и Bing Cache Dumper — бесплатно!</title>
      <link>https://nevkontakte.com/2013/Google-Cache-Dumper-and-Bing-Cache-Dumper-free.html</link>
      <pubDate>Tue, 22 Jan 2013 12:37:44 +0000</pubDate>
      <guid>https://nevkontakte.com/2013/Google-Cache-Dumper-and-Bing-Cache-Dumper-free.html</guid>
      <description>&lt;p&gt;Два с половиной года назад я представил два скрипта: Google Cache Dumper и Bing
Cache Dumper. Как нетрудно догадать по названию, их задача состояла в
вытаскивании страниц заданного сайта из кэша соответствующего поисковика.&lt;/p&gt;
&lt;p&gt;Оба скрипта я поставил на продажу по цене в $2 и $1 соответственно, и до сих пор
их поддерживал. В качестве площадки для продаж по принципу наименьшего
сопротивления я выбрал сервис Digiseller. Могу сказать, что на протяжении
долгого времени меня всё более чем устраивало: скрипты потихоньку продавались,
мне капала копеечка на хостинг, людям — польза в виде возможности хотя бы
отчасти восстановить потерянный сайт.&lt;/p&gt;
&lt;p&gt;Однако, в минувшем году Digiseller преподнёс один за другим два неприятных
сюрприза. Сначала он потребовал персональный аттестат WebMoney для продажи через
магазин на своем домене. Большой нужды у меня в этом сертификате не было, руки
до него вечно не доходили, так что я пошел по пути наименьшего сопротивления:
перенес продажи на их площадку-партнера plati.ru. Но и там был через некоторое
время заблокирован без объяснения причин, о чем вчера узнал из
&lt;a href="https://nevkontakte.com/2009/Scripts-Google-Cache-Dumper-Bing-Cache-Dumper.html"&gt;комментов&lt;/a&gt;. Никаких
уведомлений на почту, ничего.&lt;/p&gt;
&lt;p&gt;Поразмыслив, я понял, что самым честным решением будет попросту открыть
исходники этих скриптов, чему и посвящен этот пост.&lt;/p&gt;
&lt;p&gt;Отныне и навсегда, оба эти скрипта размещаются на GitHub под славной лицензией
&lt;a href="https://en.wikipedia.org/wiki/WTFPL"&gt;WTFPL&lt;/a&gt;. Вы можете скачивать и использовать
скрипты на свое усмотрение, а так же улучшать их и присылать пулл-реквесты:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/gcache"&gt;Google Cache Dumper&lt;/a&gt;
(&lt;a href="https://github.com/nevkontakte/gcache/archive/master.zip"&gt;скачать&lt;/a&gt;
последнюю версию).&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/nevkontakte/bcache"&gt;Bing Cache Dumper&lt;/a&gt;
(&lt;a href="https://github.com/nevkontakte/bcache/archive/master.zip"&gt;скачать&lt;/a&gt;
последнюю версию).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;P.S. Если вы подумали, что в качестве картинки к посту я разместил задницу, то
это вовсе не так. Это не задница, а стилизованная буква W, официальный логотип
лицензии WTFPL. Сравните с
&lt;a href="https://en.wikipedia.org/wiki/Copyright_symbol"&gt;©&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RIP Lastfm.ru, ты был хорошим другом.</title>
      <link>https://nevkontakte.com/2012/RIP-Lastfm-ru-you-ve-been-a-good-friend.html</link>
      <pubDate>Thu, 13 Dec 2012 20:11:57 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/RIP-Lastfm-ru-you-ve-been-a-good-friend.html</guid>
      <description>&lt;p&gt;Сегодня вечером пришел нежданчик от Last.fm:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Last.fm вносит ряд изменений в радио, которое ранее было доступно во всем мире. Мы тщательно обдумали эти изменения, и эти изменения не случайны: они были приняты в ответ на на ряд факторов, в разной степени влияющих на наш бизнес в разных странах.&lt;/p&gt;
&lt;p&gt;До сегодняшнего дня радио было функцией только для подписчиков. Однако начиная с 15 Янв 2013 мы вынуждены прекратить предоставление потокового радио в твоей стране в связи с лицензионными ограничениями. Это значит, что ты больше не сможешь слушать радио Last.fm.&lt;/p&gt;
&lt;p&gt;Скробблинг останется бесплатным, и твои данные о прослушивании, чарты и рекомендации не будут затронуты изменением.&lt;/p&gt;
&lt;p&gt;Подписчики по-прежнему смогут пользоваться своими преимуществами: сайтом без рекламы, доступом к демонстрациям в разделе Last.fm Playground и другие возможностями, которые будут добавлены в дальнейшем.&lt;/p&gt;
&lt;p&gt;Однако ты вправе отказаться от подписки. В этом случае тебе следует ознакомиться с соответствующим разделом FAQ. Там ты найдешь информацию об отмене. Если ты заранее оплатил(а) подписку сроком более чем на 30 дней, ты можешь запросить возмещение.&lt;/p&gt;
&lt;p&gt;Мы продолжим отслеживать состояние рынка в разных странах и надеемся расширить нашу аудиторию в будущем, когда это будет целесообразно.&lt;/p&gt;
&lt;p&gt;Прочитай наше объявление. Там ты найдешь более подробную информацию об изменениях Last.fm, новости и сведения о других музыкальных службах, совместимых с Last.fm.&lt;/p&gt;
&lt;p&gt;Будем рады пользователям, которые решат остаться с нами.&lt;/p&gt;
&lt;p&gt;Спасибо,
Команда Last.fm&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Для тех, кому лень было читать, краткое резюме: в России даже платные подписчики теперь не смогут слушать радио. Но пусть они не унывают: у них по-прежнему останется сайт без рекламы, доступ к красивым графикам на playground и стильный значок VIP в профиле.&lt;/p&gt;
&lt;p&gt;Для тех, кому читать не лень, &lt;a href="http://www.lastfm.ru/announcements/radio2013"&gt;вот&lt;/a&gt; то же самое, но подробнее в блоге lasf.fm.&lt;/p&gt;
&lt;p&gt;Так как для меня в last.fm ценность представляют только подборка исполнителей по вкусу и стримминг радио, то после закрытия радио смысл в платной подписке пропадает.&lt;/p&gt;
&lt;p&gt;Вопрос о том, куда мигрировать сейчас активно обсуждается на &lt;a href="http://habrahabr.ru/post/162477/"&gt;Хабре&lt;/a&gt;, а я скорее всего перейду на &lt;a href="http://music.yandex.ru/"&gt;Яндекс.Музыку&lt;/a&gt;. Ещё есть &lt;a href="https://web.archive.org/web/20120919211127/http://libre.fm/"&gt;libre.fm&lt;/a&gt;, но интерфейс и выбор на нём странноват. Кстати, и на YouTube музыку тоже можно послушать, хотя и не очень удобно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Притча о Junior'е</title>
      <link>https://nevkontakte.com/2012/The-parable-of-the-Junior.html</link>
      <pubDate>Mon, 12 Nov 2012 21:00:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/The-parable-of-the-Junior.html</guid>
      <description>&lt;p&gt;&lt;em&gt;Хочу предложить вашему вниманию историю, которая приснилась мне не далее как сегодня под утро. Проснувшись, я первым делом подумал: &amp;ldquo;ну и к чему вообще мне это приснилось?..&amp;rdquo;, но потом понял, что этот нехитрый сюжет имеет прямое отношение к нашей отрасли. Строго говоря, это применимо к молодым специалистам практически в любой области, но именно в программировании это цветёт пышным цветом и даёт сочные плоды :-) Сон получился на удивление связный, так что привожу его почти без литературной правки.&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;История приключилась с двумя мальчишками-приятелями, будем называть их Сашей и Петей. День был солнечный, тёплый — пожалуй, идеальный день с точки зрения шестиклассника на каникулах. Поэтому, когда Петя зашёл за Сашей и позвал его гулять, Саша немедля согласился, задержавшись лишь чтобы завязать шнурки кроссовок. Родители были на работе, а потому предполагалось, что они не против прогулки, по крайней мере, если они о ней не узнают.&lt;/p&gt;
&lt;p&gt;Здесь будет уместно заметить, что жил Саша на шестом этаже довольно нового дома, и его подъезд до сих пор избегала неприятная участь быть загаженным с первого этажа до последнего. Сашу не особо интересовало, кто за этим присматривал, но кого вообще могут интересовать такие скучные вещи? С другой стороны, Саше было приятно, что их подъезд был чистый и аккуратный, по крайней мере в тех местах, где Саше доводилось проходить.&lt;/p&gt;
&lt;p&gt;В этот раз, спускаясь по лестнице вниз и обсуждая с Петей, кого бы ещё позвать, чтобы поиграть в мяч, Саша заметил, что на стене у одного из лестничных пролётов краска некрасиво облупилась и раскрошилась (наверное, кто-то тащил по лестнице что-то тяжёлое и задел стену углом). В принципе, мелочь, но Саше стало как-то обидно, что их подъезд теперь не такой аккуратный, как раньше.&lt;/p&gt;
&lt;p&gt;— Петь, смотри, какой-то дурак нам стену покорябал! Кажется, у нас дома в коридоре как раз стояла банка с краской именно такого цвета! Ты спускайся и зови пацанов в футбол, а я сейчас подкрашу и к вам!&lt;/p&gt;
&lt;p&gt;— А ты умеешь вообще красить? А то влетит тебе от старших, если криво намажешь, или цвет не тот.&lt;/p&gt;
&lt;p&gt;— Да не, меня папка учил, мы в ванной стену подкрашивали. И это точно та самая краска, сто пудов.&lt;/p&gt;
&lt;p&gt;— Ладно, но если что, я не при чём. И ты надолго не зависай, мы же гулять пошли.&lt;/p&gt;
&lt;p&gt;— Да я вообще мигом, тут такое маленькое место, на два взмаха кисти.&lt;/p&gt;
&lt;p&gt;Саша побежал обратно в квартиру, а Петя пошёл вниз, звать остальных друзей гулять. Через полчаса Петя вместе с тремя другими приятелями и мячом подходили к Сашиному подъезду. По подьъезда оставалось метров десять, когда с крыши с грохотом рухнула какая-то железяка. Следом за ней показался виновато улыбающийся Саша:&lt;/p&gt;
&lt;p&gt;— Сори, пацаны, эта железяка тут мешала! Я её приладил удобнее, но она тут как поедет, да как жахнет вниз!&lt;/p&gt;
&lt;p&gt;— А ты вообще какого фига на крышу-то полез?!&lt;/p&gt;
&lt;p&gt;— Да я закрасил ту дырку, а пока красил, понял, что это не долбанули, а с крыши вода протекла во время дождя, вот краска и обвалилась. Я подумал, что лучше уж починить крышу, пока и нашу квартиру не затопило по самые окна!&lt;/p&gt;
&lt;p&gt;— Не гони, не затопит! Вы же не на верхнем этаже живёте! Да и не умеешь ты крыши чинить!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Четыре лика Open Source</title>
      <link>https://nevkontakte.com/2012/The-four-faces-of-Open-Source.html</link>
      <pubDate>Sun, 11 Nov 2012 20:47:48 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/The-four-faces-of-Open-Source.html</guid>
      <description>&lt;p&gt;Поводом к этому посту стала одна дискуссия об хороших и плохих сторонах открытого софта, в которой мне довелось участвовать. Я являюсь давнишним пользователем Linux, а потому поневоле постоянно имею дело с большим количеством open-source проектов. Более того, так повелось, что большинство инструментов и фреймворков для веб-разработки, которой я занимаюсь, так же является открытым. Поэтому в ходе того обсуждения у меня сформулировалось мнение, заслуживющее отдельного упорядоченного изложения.&lt;/p&gt;
&lt;p&gt;На мой взгляд, современный open source радикально отличается от того, каким он был ещё лет семь назад, и состоит он из четырёх мало пересекающихся миров, представители которых различаются буквально во всём.&lt;/p&gt;
&lt;h3 id="мир-первый-большой-open-source"&gt;Мир первый: большой Open Source.&lt;/h3&gt;
&lt;p&gt;Сюда относятся крупнейшие открытые проекты, над которыми работают сотни людей. Именно о них упоминают в первую очередь, когда хотят проиллюстрировать важную роль открытого ПО в IT-индустрии: ядро Linux, Apache, FreeBSD, KDE, GNOME, Mozilla Firefox. Следом за ними идут продукты менее именитые, но от того не менее важные: Drupal, phpBB, OpenJDK, Eclipse, целая плеяда языков программирования и многие другие.&lt;/p&gt;
&lt;p&gt;У этих проектов одна общая черта: за ними стоят различные коммерческие организации, которым открытое ПО служит основой их бизнеса. Для Linux это в первую очередь RedHat, в Apache заинтересована практически вся хостинговая индустрия, FreeBSD прочно прописался на высоконагруженных серверах, в KDE и GNOME заинтересованны множество (полу-)коммерческих дистрибутивов, спонсирующих их разработку, Mozilla Foundation имеет спонсорские соглашения со многими интернет-компаниями, в числе которых Google. Факт тот, что именно наличие заинтересованного бизнеса позволяет открытому проекту перейти в клан тяжеловесов, получая инвестиции в виде долларов или человеко-часов.&lt;/p&gt;
&lt;p&gt;Соответственно, эти проекты чаще всего не уступают в качестве своим коммерческим собратьям, имеют чёткое и стабильное будущее. Да простятся мне эти слова, но, в каком-то смысле, эти продукты и являются коммерческими, только для широкой массы пользователей они доступны бесплатно и их исходные коды открыты, а прибыль из них извлекается иными способами.&lt;/p&gt;
&lt;h3 id="мир-второй-клубы-по-интересам"&gt;Мир второй: клубы по интересам.&lt;/h3&gt;
&lt;p&gt;К этой категории я отношу проекты, которые делаются сравнительно небольшими группами людей, как правило не больше десятка активных контрибьюторов, и делаются just for fun. Первое, что приходит в голову из этой сферы — большая часть открытых игр.&lt;/p&gt;
&lt;p&gt;Работа над ними ведётся потому, что это приятно и интересно самим разработчикам, и как правило вокруг таких проектов собирается достаточно тёплое и заинтересованное сообщество, в которое несложно влиться, если только ваши интересы совпадают с интересами сообщества. Часто сообщество тоже участвует в разработке, особенно если проект живёт на GitHub, но каждый отдельно взятый человек вносит вклад сравнительно небольшой и эпизодический.&lt;/p&gt;
&lt;p&gt;Мне очень симпатичны такие сообщества, и, если в большом Open Source — сила, то здесь — гибкость и свежая кровь. Именно поэтому проекты из этой сферы может ждать самое разнообразное будущее: они могут перейти в лигу тяжеловесов, получив поддержку коммерческих структур и вырастив большое сообщество, могут тихо увянуть, если разработчики потеряют интерес и некому будет подхватить падающее знамя, а могут на многие годы остаться в этом состоянии, не спеша развиваясь на радость фанатам.&lt;/p&gt;
&lt;h3 id="мир-третий-соло-проекты"&gt;Мир третий: соло-проекты.&lt;/h3&gt;
&lt;p&gt;В этой сфере вращаются проекты, поддерживаемые и развиваемые одним разработчиком, редко — парой. Чаще всего эти проекты решают сразу две проблемы — обеспечение портфолио и реализация собственных творческих интересов программиста.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Полгода радиомолчания</title>
      <link>https://nevkontakte.com/2012/Six-months-radio-silence.html</link>
      <pubDate>Thu, 01 Nov 2012 17:05:07 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/Six-months-radio-silence.html</guid>
      <description>&lt;p&gt;Три раза пытался начать этот пост, и три раза получалась полная ерунда — предыдущий пост был написан пол года назад, и, похоже, навык написания постов на человеческом языке я слегка растерял. Почему я упомянул про &amp;ldquo;человеческий&amp;rdquo; язык? Да потому, что за эти пол года мне пришлось написать вагон и маленькую тележку текста на академическом жаргоне, но обо всём по порядку.&lt;/p&gt;
&lt;p&gt;С одной стороны, событий было много, и было о чём рассказать. С другой стороны, в голове царил такой бардак и суматоха, что все силы уходили на то, чтобы удержать в голове все обещания, срочные дела и тому подобное. Соответственно, написание поста в блог постоянно проигрывало борьбу за моё внимание.&lt;/p&gt;
&lt;p&gt;Самым главным квестом была защита диплома — отныне я дипломированный бакалавр информационных технологий. Осознавать это приятно, но, честно говоря, наличие формального диплома мало что изменило. Быть может я окажусь в меньшинстве, но от наличия корочек пользы куда меньше, чем от обучения, им предшествовавшего. Полагаю, мне очень повезло с универом, так как большинство преподавателей действительно знали, о чём говорят, и умели это  объяснить. И хотя в повседневной работе я не пользуюсь большей частью высоких наук, которые мне довелось познать, расширению сознания они весьма поспособствовали. А вот умение абстрактно мыслить в программировании — это наше всё, и математика даёт прекрасный шанс этому научиться.&lt;/p&gt;
&lt;p&gt;Отдельную пару слов посвящу своему дипломному исследованию, посвящённому гомоморфной криптографии. Особенность данного вида шифрования в том, что над зашифрованными данными можно выполнять математические операции таким образом, что после расшифрования результат совпадёт с результатом тех же вычислений над незашифрованными данными. Это, в свою очередь, ключ к безопасным облачным вычислениям и базам данных — данные можно хранить и всячески обрабатывать, но без ключа враг не сможет эти данные прочитать, даже если у него есть доступ к серверам. Если будет время, я, пожалуй, напишу парочку постов об этом с изложение всей этой науки &amp;ldquo;на пальцах&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;В конце мая я так же делал доклад на эту тему на &lt;a href="https://www.phdays.com/ru/"&gt;Positive Hack Days&lt;/a&gt; в секции Young School. Кажется там даже была выложена запись презентации, но я за это не поручусь — не проверял. Впечатления от самой конференции остались самые радужные, тем более, что это мой первый опыт участия в конференциях такого уровня.&lt;/p&gt;
&lt;p&gt;Таким образом, весь май и июнь были посвящены диплому, и, в перерывах, работе. После завершения этой эпопеи и поступления в магистратуру (благодаря хорошему среднему баллу и диплому, это не составило труда) мне пришлось отдать должное работе, так что и июль нельзя было назвать свободным. А во время отпуска в августе я просто не желал думать ни о чём компьютерном, кроме, разве что, игр. Это был самый беззаботный и потому прекрасный месяц :-)&lt;/p&gt;
&lt;p&gt;Последующие два осенних месяца пролетели практически моментально, но писать тут не о чем — сплошная рутина, которая, наконец, стала принимать регулярный характер, и стало легче выкраивать время на дела типа блога :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>10 фитч в Firebug, о которых вы не знали.</title>
      <link>https://nevkontakte.com/2012/10-Fitch-in-Firebug-which-you-did-not-know.html</link>
      <pubDate>Sat, 28 Apr 2012 12:39:17 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/10-Fitch-in-Firebug-which-you-did-not-know.html</guid>
      <description>&lt;p&gt;&lt;em&gt;Вступление от переводчика. Я довольно редко по доброй воле берусь за переводы чужих статей, но в этот раз я всё же хочу поделиться с вами небольшой заметкой, написанной Эриком Венделином &amp;ldquo;&lt;/em&gt;&lt;a href="http://eriwen.com/firefox/10-things-you-didnt-know-about-firebug/"&gt;10 Things you didn’t know about Firebug&lt;/a&gt;&lt;em&gt;&amp;rdquo;. И хотя я довольно давно пользуюсь FireBug&amp;rsquo;ом, до прочтения этой заметки я знал лишь о трёх из упомянутых &amp;ldquo;фитч&amp;rdquo;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Мне доводилось работать со многими инструментами разработки, но &lt;a href="http://www.getfirebug.com/"&gt;Firebug&lt;/a&gt; меня просто поразил. Firebug - это расширение для &lt;a href="http://www.getfirefox.com/"&gt;Firefox&lt;/a&gt;, предназначенное для отладки и оптимизации CSS, JavaScript, HTML&amp;hellip; и многого другого!&lt;/p&gt;
&lt;p&gt;В FireBug есть довольно много возможностей, о которых большинство разработчиков не знают, и я хочу этими находками поделиться.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/_041.png" alt="Firebug Screenshot"&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Вы можете отслеживать время загрузки ваших скриптов (&lt;em&gt;прим. переводчика: и не только скриптов&lt;/em&gt;) во вкладке &amp;ldquo;Net&amp;rdquo;. Бонус: FireBug выделяет запросы, которые обслуживаются из локального кэша светло-серым цветом, что полезно при оптимизации времени загрузки.&lt;/li&gt;
&lt;li&gt;Правый клик на метке брекпойнта позволяет задать условие останова.&lt;/li&gt;
&lt;li&gt;Вывод отладочной информации в консоль с помощью console.log чрезвычайно удобен, но знали ли вы, что эти записи можно группировать с помощью методов console.group(&amp;ldquo;Group Name&amp;rdquo;) и console.groupEnd()?&lt;/li&gt;
&lt;li&gt;Используйте console.profile() и console.profileEnd() для замера времени исполнения каждого вызова функции. А ещё можно просто воспользоваться профайлером.&lt;/li&gt;
&lt;li&gt;Если вы во вкладке CSS наведёте курсор на код цвета, то FireBug покажет вам записку этого цвета.&lt;/li&gt;
&lt;li&gt;Вы можете не только в реальном времени наблюдать изменения структуры HTML вашей страницы, но и самостоятельно менять всё, что угодно.&lt;/li&gt;
&lt;li&gt;Если вы используете FireBug на экране с большим разрешением, и надписи в его интерфейсе для вас слишком мелкие, вы можете увеличить размер шрифта, кликнув по картинке с тараканом и выбрав &amp;ldquo;Размер текста&amp;rdquo; → &amp;ldquo;Увеличить размер текста&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Вы можете использовать команду debugger; в вашем JavaScript-коде, чтобы приостановить его исполнение и вызвать панель FireBug.&lt;/li&gt;
&lt;li&gt;Вы можете логгировать все вызовы какой-либо функции просто сделав правый клик на её имени и выбрав &amp;ldquo;логгировать вызовы myfunction&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;И наконец&amp;hellip; вы можете использовать FireBug в IE, Opera, Safari и Chrome, скачав &lt;a href="http://getfirebug.com/firebuglite"&gt;FireBug Lite&lt;/a&gt;! Правда, в этом режиме функциональность будет несколько ограничена.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если вы всё ещё не хотите начать использовать &lt;a href="http://getfirebug.com/"&gt;FireBug&lt;/a&gt;, то вы, наверное, потратили кучу денег на что-то, вероятно, не сильно лучше.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обновления для разработчиков и людей — несерьезно о серьезном.</title>
      <link>https://nevkontakte.com/2012/Update-for-developers-and-people-not-serious-about-serious.html</link>
      <pubDate>Sun, 18 Mar 2012 00:34:58 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/Update-for-developers-and-people-not-serious-about-serious.html</guid>
      <description>&lt;p&gt;&lt;em&gt;Пост вышел многабукаф, поэтому ленивые могут пропускать части, помеченные как иллюстративные.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;При разработке хоть сколь-нибудь сложных систем среди прочих всегда возникает проблема обновлений, а именно — миграции данных со старой версии в новую. И все бы ничего, но структуры данных имеют свойство меняться от версии к версии. Для веб-приложений это в первую очередь касается схемы БД, но сюда же относится изменение формата конфига, удаление/добавление отдельных параметров настроек, пересборка разных кэшей, индексов и так далее.&lt;/p&gt;
&lt;p&gt;Типичный подход к решению этой проблемы выглядит так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Делается публичный релиз продукта.&lt;/li&gt;
&lt;li&gt;Начинается работа над следующим релизом, в ходе которой пишется и обновляется конвертор с предыдущего релиза в будущий. Таким образом, текущий релиз всегда можно обновить до dev-ветки.&lt;/li&gt;
&lt;li&gt;Публикуется новый релиз, который способен спокойно обновиться с предыдущего, пользователи счастливы.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Казалось бы, все хорошо, но в этом процессе есть одна несчастливая сторона — это сами девелоперы. Их беда заключается в том, что очень часто они не смогут обновиться с одного нестабильного билда на другой, поскольку скриптов миграции данных между этими версиями не существует. В результате им придётся переставлять продукт, заново его конфигурировать таким образом, чтобы было удобно отлаживать, а все это отнимает драгоценные рабочие часы.&lt;/p&gt;
&lt;p&gt;Чтобы осчастливить разработчиков нужно изобрести механизм обновления с любого билда на любой более новый. Такой механизм, если я не ошибаюсь, впервые получил широкое распространение во фреймворке Ruby on Rails под названием &amp;ldquo;Database Migrations&amp;rdquo;, а теперь пробрался и во многие другие среды, например в мой любимый PHP-фреймворк Yii. И так, что же нам предлагают миграции?&lt;/p&gt;
&lt;p&gt;Ключевым элементом в этой схеме является &amp;ldquo;миграция&amp;rdquo; — как правило небольшой скрипт, производящий одну более-менее атомарную операцию над файлами данных программы. Каждая миграция должна иметь свой порядковый номер, при чем более новые миграции должны иметь большие номера, чтобы можно было выстроить и запускать их в порядке появления. В качестве такого номера проще всего использовать UNIX timestamp момента создания миграции, чтобы понизить шансы появления миграций с одинаковыми номерами у разных разработчиков.&lt;/p&gt;
&lt;p&gt;Многие, и я в их числе, ограничивают действия одной миграции изменениями в данных, привносимыми одним коммитом, при чем сама миграция включается в тот же самый коммит. В этом случае миграция должна переводить данные программы из формы, использовавшейся до изменений, привнесённых нашим коммитом, в форму, которая стала использоваться после этого коммита. В определённом смысле это привносит самодостаточность коммиту — он не только изменяет логику приложения, но и заботится о переносе данных на новую версию.&lt;/p&gt;
&lt;p&gt;Запуском миграций управляет отдельная сущность, будем называть её менеджером миграций. Во-первых, он хранит список миграций, которые уже были применены, в момент начальной установки все имеющиеся миграции помечаются как установленные. Во-вторых, при наступлении какого-либо события (например, после установки обновления), этот менеджер получает список доступных приложению миграций и сравнивает его со списком уже установленных. Если найдутся такие миграции, которые не были установлены, менеджер миграций запускает их в хронологическом порядке и добавляет в список установленных.&lt;/p&gt;
&lt;p&gt;Почему же все это должно осчастливить простых разработчиков? В первую очередь потому, что единицей обновления здесь становится один коммит, а не билд и тем более не релиз. Поэтому разработчик спокойно может обновлять свою рабочую копию из репозитория в любой момент, собирать приложение и быть уверенным, что оно корректно обновит все данные. А во вторую — такой подход сильно понижает шансы чего-нибудь забыть дописать в большом скрипте обновления или дописать не туда, поскольку миграция должна создаваться сразу, как только меняется структура данных и суть изменений ещё свежа в голове.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Путь во фрилансеры</title>
      <link>https://nevkontakte.com/2012/The-way-in-freelancers.html</link>
      <pubDate>Fri, 20 Jan 2012 21:36:37 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/The-way-in-freelancers.html</guid>
      <description>&lt;p&gt;Сегодня у меня немного философское настроение, и по такому случаю я хочу
поделиться кое-каким своим опытом, связанным с фрилансом. В первую очередь, я,
опираясь на свой опыт, попытаюсь описать ещё один способ начала фрилансерской
деятельности.&lt;/p&gt;
&lt;p&gt;Сам я довольно долго занимался фрилансом, в основном выполняя заказы, связанные
с форумным движком phpBB. В прошедшем времени — потому что этот род деятельности
мне наскучил, мне стало больше нравиться заниматься длительными и сложными
проектами вроде
&lt;a href="https://web.archive.org/web/20140104111707/http://www.parallels.com/products/plesk/power-pack/plesk-mobile-server-manager/"&gt;Plesk Mobile&lt;/a&gt;
или
&lt;a href="https://web.archive.org/web/20160307162413/http://phpbbconstructor.com/"&gt;phpBB Constructor&lt;/a&gt;.
Однако, это не значит, что во фрилансе нет денег или там только нудятина.
Наоборот, он прекрасно подойдет тем, кто любит делать много не очень больших, но
разнообразных проектов.&lt;/p&gt;
&lt;p&gt;И так, если вы желаете заняться фрилансом, вот что я могу вам посоветовать.&lt;/p&gt;
&lt;h3 id="0-специализируйтесь"&gt;0. Специализируйтесь.&lt;/h3&gt;
&lt;p&gt;На мой взгляд, это самый важный пункт. Конкуренция на рынке фриланса сейчас
весьма велика, и заработать хорошую репутацию на нескольких фронтах будет
непросто. Более того, если вы пока не очень сильны в программировании, изучать
много разных областей и успешно выполнять заказы, требующие совершенно разных
подходов, инструментов и навыков решительно невозможно.&lt;/p&gt;
&lt;p&gt;Кроме того, такая специализация позволит вам обойти стороной крупные
фрилансерские биржи, пропитанные духом недоверия, жадности и кидалова,
обосновавшись в более приятных тематических сообществах. Разница примерно как
между барахолкой и антикварным клубом.&lt;/p&gt;
&lt;p&gt;Поэтому я бы посоветовал чётко очертить вашу сферу коммерческих интересов.
Идеальным на мой взгляд являлась бы специализация на каком-то одном популярном
продукте. За сравнительно небольшие сроки вы сможете досконально его изучить, и
вам будет довольно легко выполнять связанные с ним заказы. Как выбрать продукт?
Дело, в общем-то ваше. Я могу предложить следующие критерии:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Бесплатность или открытость.&lt;/em&gt; Это избавит вас от покупки лицензий для
изучения продукта, а открытый исходный код даст возможность ближе
познакомиться с его подноготной.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Кастомизируемость.&lt;/em&gt; Достаточно очевидный пункт, ведь если в продукте
невозможно поменять решительно ничего, то за что вам будут платить? Разве что
за установку, но это по-настоящему скучно.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Развитое сообщество.&lt;/em&gt; Степень развитости сообщества характеризует
популярность продукта и, следовательно, наличие потенциальных заказчиков.
Масса народу хочет сделать блог на &lt;a href="http://wordpress.org"&gt;Wordpress&lt;/a&gt;, и едва
ли вы найдете десяток тех, кто спит и видит сайт на
&lt;a href="https://web.archive.org/web/20120820135313/http://mosquito.net.ru/"&gt;Mosquito CMS&lt;/a&gt;,
да ещё и готов вам заплатить. Оборотная сторона популярности — повышенная
конкуренция, но к этому я ещё вернусь.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В 2005-м году мой выбор пал на phpBB, при том довольно случайно. Мне был
интересен движок, интересно его сообщество. О фрилансе я тогда не думал (и даже
слова такого не знал :-), но популярность движка и развитость сообщества в
будущем обеспечили мне достаточное количество заказов.&lt;/p&gt;
&lt;h3 id="1-работайте-на-сообщество"&gt;1. Работайте на сообщество.&lt;/h3&gt;
&lt;p&gt;Это особенно актуально на начальном этапе, когда вам нужно стать узнаваемым.
Вливайтесь в сообщество, участвуйте в обсуждениях, помогайте, оказывайте
поддержку другим членам сообщества бесплатно. Пишите моды, аддоны, расширения и
публикуйте их. Предлагайте заказчикам скидки в обмен на право публикации
разработанного вами модуля.&lt;/p&gt;
&lt;p&gt;Да, это требует много усилий, и это &amp;ldquo;окупится только когда-нибудь потом&amp;rdquo;, но
если вы хотите работать, а не клянчить копеечные заказы, вам лучше быть
известным. Более того, ваш авторитет со временем позволит вам диктовать условия
сделки, упростит убеждение заказчика в спорных технических моментах и создаст
поток заказов, который будет литься к вам сам по себе. Кроме того, если вы
сделали удачный выбор продукта, то вся эта деятельность должна наоборот быть вам
приятна. Или же вы не испытываете удовольствия, улучшая нечто нравящееся вам?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Съемка видео о гаджетах — mini how-to.</title>
      <link>https://nevkontakte.com/2012/Shooting-video-about-gadgets-mini-how-to.html</link>
      <pubDate>Thu, 05 Jan 2012 21:09:29 +0000</pubDate>
      <guid>https://nevkontakte.com/2012/Shooting-video-about-gadgets-mini-how-to.html</guid>
      <description>&lt;p&gt;Пользуясь свободным временем на каникулах, я решил проапгрейдить ssd в своем
нетбуке Asus Eee PC 901. Стоявшие там изначально SSD (4+12 Gb в моей
Linux-версии) давно прославились как редкостные тормоза, да и четырех гигабайт
системного раздела под весь необходимый софт мне едва хватало. С другой стороны,
этот нетбук можно было трести, ронять (в разумных пределах, конечно ;-) и даже
использовать в подпрыгивающей на каждом метре маршрутке без страха убить
винчестер. Поэтому я решил заменить один из родных накопителей на устройство
побыстрее и пообъемнее.&lt;/p&gt;
&lt;p&gt;В результате поисков и сравнений выбор пал на Renice X3 Mini PCI-E 60Gb (50mm),
который был приемлем по цене и, что важно, имелся в продаже. В прочем, этот пост
не о том, как делалась замена, а о том, как я снимал видео по ней — не найдя в
интернете годного руководства, я решил заодно исправить и это упущение. Желающие
могут увидеть результат съемки &lt;a href="http://youtu.be/vaOjYGYoB8k"&gt;на ютубе&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Главный инструмент съемки — китайская no-name веб-камера со сносным разрешением
в два мегапикселя и светодиодной подсветкой, которая, впрочем, не особенно
пригодилась. При помощи бумажного скотча, линейки и полки камера была закреплена
над столом. Высота была подобрана так, чтобы в кадр как раз помещался нетбук и
чуть-чуть пространства вокруг, чтобы детали было видно как можно лучше.
Выглядело это вот так:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_4253.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4253.jpg" alt="100_4253.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Чтобы видео не было слишком темным в одних областях и пересвеченным в других,
нужно обеспечить равномерную яркость объектов во всем поле зрения камеры. Для
этого из четырех листов А4 был склеен (все тем же бумажным скотчем) &amp;ldquo;задник&amp;rdquo;:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_4250.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4250.jpg" alt="100_4250.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Если бы нетбук был черным, нужно было бы наоборот делать фон темнее.&lt;/p&gt;
&lt;p&gt;Последняя деталь — освещение. Самый примитивный вариант с прямым освещением
настольной лампочкой нас совершенно не устраивает: предметы будут бликовать, а
тени будут слишком резкими. В итоге на видео будет ничего не понятно. Поэтому
надо организовать рассеянное освещение и самый простой способ этого добиться —
закрепить несколько листов белой бумаги в виде экрана над &amp;ldquo;сценой&amp;rdquo;, которую
будем снимать, и направить настольную лампу на этот экран. Белая бумага будет
отражать достаточно много света, чтобы изображение было ярким и четким, но этот
свет будет рассеянным, что избавит нас от бликов и резких теней. По желанию и
необходимости можно сделать несколько таких источников или даже озаботиться
полноценным
&lt;a href="http://ru.wikipedia.org/wiki/%D0%9B%D0%B0%D0%B9%D1%82%D0%B1%D0%BE%D0%BA%D1%81"&gt;лайтбоксом&lt;/a&gt;.
Если вы планируете снимать много видео, то последний вариант определенно лучший.
Я же ограничился самым простым вариантом:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_4252.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4252.jpg" alt="100_4252.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;UPD от 01.04.2012&lt;/em&gt;: На Хабрахабре появилось довольно бурное
&lt;a href="http://habrahabr.ru/post/141164/"&gt;обсуждение&lt;/a&gt; на тему организации лайтбоксов с
примерами и ссылками. Несмотря на то, что речь в основном о лайтбоксах для фото,
в которых видео снимать не очень удобно, много хороших советов об освещении там
найти легко.&lt;/p&gt;
&lt;p&gt;Из технических приготовлений почти все. Замечу лишь, что на веб-камеру писать
очень удобно, поскольку можно поставить рядом ноутбук, на котором вы в любой
момент легко увидите, как выглядит снимаемое вами видео и сможете подправить
сцену так, чтобы, например, засветка была более равномерной.&lt;/p&gt;
&lt;p&gt;Кроме того, важный совет, который я в своем видео не учел: вектор зрения
веб-камеры желательно направлять не перпендикулярно столу, а под углом, при чем
с наклонов вам &amp;ldquo;в лицо&amp;rdquo;. Тогда вы, во-первых, будете меньше закрывать от камеры
руками, и, во-вторых, меньше шансов, что ваша голова попадет в кадр, когда вы
нагнетесь. К сожалению, я допустил подобный огрех с головой в паре вашных мест в
моем видео.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Собираем домашний сервер. Часть 2, софтовая.</title>
      <link>https://nevkontakte.com/2011/Collect-a-home-server-Part-2-software.html</link>
      <pubDate>Wed, 19 Oct 2011 13:45:42 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Collect-a-home-server-Part-2-software.html</guid>
      <description>&lt;p&gt;В &lt;a href="https://nevkontakte.com/2011/Collect-a-home-server-Part-1-of-iron.html"&gt;предыдущих заметках&lt;/a&gt; я уже осветил требования к домашнему серверу и рассказал о подобранной мною железной конфигурации. Теперь я перейду к разговору о софте.&lt;/p&gt;
&lt;h3 id="операционная-система"&gt;Операционная система&lt;/h3&gt;
&lt;p&gt;Специфика домашних серверов такова, что это машина, которая делает абсолютно все: сетевая файлопомойка, DNS, DHCP, маршрутизация, торренты, GIT и еще бог весть что, вопреки всем рекомендациям экспертов по безопасности. Я тоже поддался на это искушение, успокоив себя тем, что это во-первых, удобно, во-вторых, дешево и, в-третьих, наружу будет торчать VPN-сервер и больше ничего. Зато изнутри будет виден весь зоопарк сервисов, необходимых для комфортной жизни гика.&lt;/p&gt;
&lt;p&gt;Таким образом, выбор ОС делался из соображений &amp;ldquo;изкоробочной&amp;rdquo; поддержки всех необходимых сервисов и удобного интерфейса к ним. Безусловно, настроить все это самому можно без особых проблем, но оно мне надо? После того, как настройка софта из фана превращается в производственную необходимость, удобство и скорость управления резко возрастают в цене.&lt;/p&gt;
&lt;p&gt;Последним пожеланием была совместимость к каким-нибудь популярным дистрибутивом, чтобы можно было легко докручивать компоненты, не доступные из коробки, буде такие понадобятся.&lt;/p&gt;
&lt;h3 id="zentyal"&gt;Zentyal&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/zentyal.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Поиск не был долгим. Увидев трехстраничный список роутерных дистрибутивов в википедии, я просто выбрал те названия, которые были мне хоть чуть-чуть знакомы и сосредоточился на них. И очень быстро выяснил, что из них только &lt;a href="http://zentyal.org"&gt;Zentyal&lt;/a&gt; (бывший eBox) удовлетворяет последнему пожеланию, а именно, в его основу легла Ubuntu 10.04, хорошо мне знакомая.&lt;/p&gt;
&lt;p&gt;Разработчиики позиционируют свой дистрибутив как Small Business Server, но балогдаря развитой модульной структуре, он прекрасно подходит и для домашнего сервера. Сам по себе дистрибутив является не только бесплантым, но еще и лицензирован под GPLv2. Основной козырь этого дистрибутива - хорошо продуманный веб-интерфейс, покрывающий 95% лично моих нужд. Из коробки в нем нет разве что торрентов, но это не проблема.&lt;/p&gt;
&lt;p&gt;Основным источником дохода для команды разработчиков является сервис &lt;a href="https://zentyal.com/"&gt;Zentyal Cloud&lt;/a&gt;, предоставляющий средства управления и детального мониторинга Zentyal-серверов. Бесплатная подписка очень ограничена функционально, а платная стоит довольно круглую сумму за каждый сервер, но для бизнеса это было бы оправдано, а для домашних нужд не особенно-то и надо. Поэтому можно пользоваться бесплатной подпиской, или не пользоваться вообще, на функциональность сервера это не повлияет.&lt;/p&gt;
&lt;h3 id="немного-об-установке-и-настройке"&gt;Немного об установке и настройке&lt;/h3&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/beer.png" alt=""&gt;&lt;/p&gt;
&lt;p&gt;Ставится Zentyal так же как и Ubuntu Server и единственной проблемой оказалось, что не очень понятно, как его инсталлировать в headless режиме. Мне  оказалось проще подключить монитор, чем устраивать сложности с ssh, но не для всех это будет хорошим выходом.&lt;/p&gt;
&lt;p&gt;После установки можно переключаться на веб-интерфейс и все необходимое делать из него. Документация на сайте проекта хорошо покрывает стандартные ситауции, хотя мне несколько раз пришлось поковыряться в исходниках, чтобы понять, как добиться желаемого.&lt;/p&gt;
&lt;p&gt;Наиболее тонким моментом был процесс плавного переключения домашней сети со старого роутера на новый сервер. Напомню, что до сего момента, в центре нашей домашней сети стоял роутер ASUS WL-520GU (очень хорошая и надежная машинка, кстати) с &lt;a href="http://wl500g.info/"&gt;прошивкой от Олега&lt;/a&gt;, он раздавал все остальным интернет через NAT и локальные IP из подсети 192.168.171.0/24. В конце лета к нам к квартиру пришел интернет от РосТелекома и, как более шустрый, вытеснил прежнего провайдера (HomeNet) из WAN порта, оставив его болтаться без дела.&lt;/p&gt;
&lt;p&gt;Поэтому на период первичной настройки подключил HomeNet к новому серверу в качестве WAN и настроил LAN на тот же диапазон, что и &amp;ldquo;боевую&amp;rdquo; сеть, то есть на 192.168.171.0/24. Процесс настройки сети меня приятно поразил своей простотой и продуманностью — задание параметров сетевых интерфейсов и настройка одного из них как WAN прошла как по &lt;a href="http://doc.zentyal.org/en/firststeps.html#network-configuration-with-zentyal"&gt;нотам&lt;/a&gt;. В итоге у меня возникло две параллельных сети с очень похожей топологией, и в процессе настройки я переключал свой ноутбук с WiFi соединения на Ethernet и обратно, чтобы попасть в общую и новую сети соответственно. Сконфигурировав сетевые подключения, я прогулялся по квартире, собрав MAC-адреса всех имеющихся устройств и внес их в настройки DHCP-сервера, не забыв и роутер (это важно, да).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Покойся с миром, Деннис Ритчи</title>
      <link>https://nevkontakte.com/2011/Rest-in-peace-Dennis-Ritchie.html</link>
      <pubDate>Thu, 13 Oct 2011 17:56:24 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Rest-in-peace-Dennis-Ritchie.html</guid>
      <description>&lt;p&gt;8-го октября, на 71-м году жизни скончался Деннис Ритчи (Dennis Ritchie). Об этом стало известно из сообщения его коллеги Роба Пайка.&lt;/p&gt;
&lt;p&gt;Дэннис Ритчи — один из величайших инженеров современности, создатель вездесущего языка C и один из авторов ОС UNIX. Сложно переоценить влияние этого человека на современную IT-индустрию: его идеи легли в основу подавляющего большинства современных систем, и почти все повсеметсно использованные ОС написаны на языке Си.&lt;/p&gt;
&lt;p&gt;Но его труды не ограничиваются этими двумя вещами. Он занимался развитием операционных систем Plan 9 и Inferno, развивавших концепции UNIX и устранявших его недостатки, а так же языком Limbo. Он занимался общей теорией создания ОС и писал книги, одна из которых, «Язык программирования C» стала хрестоматийной.&lt;/p&gt;
&lt;p&gt;Покойся с Миром, Дэннис Ритчи. Человечество благодарно тебе за твои труды.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Собираем домашний сервер. Часть 1, железная.</title>
      <link>https://nevkontakte.com/2011/Collect-a-home-server-Part-1-of-iron.html</link>
      <pubDate>Mon, 19 Sep 2011 14:50:45 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Collect-a-home-server-Part-1-of-iron.html</guid>
      <description>&lt;p&gt;В &lt;a href="https://nevkontakte.com/2011/Collect-a-home-server-Part-0-introduction.html"&gt;предыдущем посте&lt;/a&gt; я
рассказал о предпосылках, сподвигших меня на реогранизацию домашней сети.
Сегодня речь пойдет о подборе железа для сервера.&lt;/p&gt;
&lt;p&gt;На всякий случай напомню ключевые требования, которые предъявлялись к серверу:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Дешевизна железа (бюджет был установлен 5000 руб. ± 1000 руб.).&lt;/li&gt;
&lt;li&gt;Возможность постепенного наращивания мощности в максимально широких рамках.&lt;/li&gt;
&lt;li&gt;При всем при том как можно менее шумный.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Нетрудно заметить, что первые два пункта слегка конфликтуют с последним.
Впрочем, как оказалось, не фатально. Устроенная ревизия закромов показала, что у
меня уже есть в наличии две сетевых карты на 100 Мбит с интерфейсом PCI и
жесткий диск Seagate на 160 Гб, которые решено было использовать. Для основного
хранилища будет использован внешний жесткий диск от WD, работающий в текущем
сервере. Исходя из этих требований, были выдвинуты уже более технические
требования к железу:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Процессор на сокете LGA 1155 (как-то сложилось, что в интеловских процессорах
я ориентируюсь лучше, поэтому AMD был отброшен из рассмотрения). Это даст
возможность апгрейда процессора аж до Core i7, буде оно потребуется.&lt;/li&gt;
&lt;li&gt;Память DDR3. Желательно с возможностью апгрейда до 8 или 16 Гб.&lt;/li&gt;
&lt;li&gt;Минимум 2 слота PCI (для сетевых карт) + гигабитный интерфейс Ethernet на
самой материнке, который будет смотреть в локальную сеть.&lt;/li&gt;
&lt;li&gt;Дополнительно слот PCI или PCI-E, чтобы в будущем добавить Wi-Fi адаптер,
желательно с поддержкой стандарта 802.11n.&lt;/li&gt;
&lt;li&gt;SATAIII-интерфейсы.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;В качестве магазина для покупки компьютерной техники на заметные суммы я уже
года три использую
&lt;a href="https://web.archive.org/web/20250505222407/https://e2e4online.ru/"&gt;Открытые Технологии&lt;/a&gt;,
благодаря вменяемому сайту, самому большому ассортименту и, как ни странно,
самым низким ценам. С другой стороны, не-айтишнику самостоятельно выбрать там
вменяемое железо очень и очень непросто: надо много гуглить, читать отзывы,
сравнивать характеристики и проверять совместимость.&lt;/p&gt;
&lt;p&gt;Учитывая, что у меня уже были две сетевых карты и жесткий диск для системы, мне
удалось уложиться в 6000 с вот таким набором железа:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Процессор
&lt;a href="https://web.archive.org/web/20240623120442/https://www.intel.com/content/www/us/en/products/sku/53414/intel-celeron-processor-g530-2m-cache-2-40-ghz/specifications.html"&gt;Intel Celeron G530 2400MHz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Материнская плата Foxconn H61MX EL&lt;/li&gt;
&lt;li&gt;Память DDR3 DIMM 2Gb PC10600 1333MHz CL9 Kingston (2 шт.)&lt;/li&gt;
&lt;li&gt;Корпус &lt;a href="https://www.gigabyte.com/ie/PC-Case/GZ-F2"&gt;GigaByte GZ-F2&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Блок питания 300W ATX 2.2 FSP&lt;/li&gt;
&lt;li&gt;Cooler CoolerMaster CP6-9HDSA-0L-GP (22dBA, 2200rpm, Al+Cu, 105W)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Суммарно — 5746 руб.&lt;/p&gt;
&lt;p&gt;Оказалось, что найти материнскую плату, полностью отвечающую пожеланиям,
нелегко: из-за &amp;ldquo;свежести&amp;rdquo; сокета цены на материнки несколько задраны, и платы
форм-фактора ATX, на которые реально упихнуть 4 слота для памяти и 4 слота PCI +
пару PCI-E, стоят довольно дорого и позиционируются как
профессиональные-производительные. Поэтому пришлось ограничиться платой mATX
всего с двумя слотами PCI, одним PCI-E и парой слотов памяти.&lt;/p&gt;
&lt;p&gt;Однако, это оказалось единственной жертвой, на которую пришлось пойти. После
сборки выяснилось, что система получилась довольно тихая со вполне приемлемой
для домашнего сервера производительностью. Кстати, пользуясь случаем,
замечу, что очень удобно иметь невесту-айтишницу, которая может оказать
неоценимую помощь при сборке — все-таки тонкими женскими пальчиками гораздо
удобнее копаться в особо дальних уголках корпуса.&lt;/p&gt;
&lt;p&gt;На десерт выложу несколько фотографий процесса сборки.&lt;/p&gt;
&lt;p&gt;Запчасти перед сборкой:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_4004.JPG_smaller.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4004.JPG_smaller.jpg" alt="100_4004.JPG_smaller.jpg"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/100_4006.JPG_smaller.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4006.JPG_smaller.jpg" alt="100_4006.JPG_smaller.jpg"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/100_4007.JPG_smaller.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4007.JPG_smaller.jpg" alt="100_4007.JPG_smaller.jpg"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/100_4010.JPG_smaller.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4010.JPG_smaller.jpg" alt="100_4010.JPG_smaller.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Установленная мать:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_4014.JPG_smaller.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4014.JPG_smaller.jpg" alt="100_4014.JPG_smaller.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ну и после сборки:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_4015.JPG_smaller.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4015.JPG_smaller.jpg" alt="100_4015.JPG_smaller.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Из небольших &amp;ldquo;твиков&amp;rdquo; при сборке стоит упомянуть, пожалуй, только одну тонкость.
На системнике присутствуют индикаторы как для жесткого диска, так и для питания,
при том индикатор питания довольно яркий. Но чтобы этот индикатор не мешал по
ночам, имеет смысл его просто отключить; включенность легко определить по шуму.
Либо, если сервер не планируется использовать в качестве файлопомойки, можно
поменять местами индикаторы жесткого диска и питания. Тогда яркий индикатор
будет загораться очень редко. Но если использовать машину и для файлохранилища,
то такого лучше не делать, ибо часто моргающий яркий огонек будет раздражать
неизмеримо сильнее, чем горящий постоянно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Собираем домашний сервер. Часть 0, вводная.</title>
      <link>https://nevkontakte.com/2011/Collect-a-home-server-Part-0-introduction.html</link>
      <pubDate>Fri, 16 Sep 2011 23:03:16 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Collect-a-home-server-Part-0-introduction.html</guid>
      <description>&lt;p&gt;Этим постом я начинаю серию, в которой расскажу о процессе сборки, настройки и
эксплуатации домашнего сервера.&lt;/p&gt;
&lt;p&gt;Начать же я хочу с изложения предпосылок, которые обусловили выбор железа, софта
и настроек, о которых будет рассказано далее.&lt;/p&gt;
&lt;p&gt;Сейчас в квартире любого гика скапливается изрядное количество довольно умных
девайсов, умеющих ходить в интернет, играть музыку и делать многие другие
полезные вещи. Все это хозяйство в первую очередь увязывается в сеть с помощью
Wi-Fi и, в случае стационарников, Ethernet. В центре сети оказывается
какой-нибудь недорогой роутер-точка-доступа. У некоторых со временем заводится
еще и отдельная машинка, работающая файлопомойкой и торрент-качалкой (свежие
релизы своего любимого дистрибутива раздавать на благо сообщества, а не поганый
пиратский софт качать, вестимо).&lt;/p&gt;
&lt;p&gt;В этом отношении и моя семья не стала исключением. В качестве роутера у нас
трудился ASUS WL-520GU с &lt;a href="http://wl500g.info/index.php"&gt;прошивкой от Олега&lt;/a&gt;. ну
а семейной файлопомойкой работал допотопный ноутбук
&lt;a href="https://web.archive.org/web/20110817172908/http://www.toshiba-europe.com/computers/products/notebooks/satellitepro4600/index.htm"&gt;Toshiba Satellite Pro 4600&lt;/a&gt;
с подключеным внешним USB HDD. До поры до времени эта конструкция всех
устраивала, хотя скорость работы роутера под нагрузкой былаа не ахти какой, а
старенький ноутбук делал файлопомойку не слишком шустрой. Стояло все это дело
под столом:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_4016.JPG_smaller.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_4016.JPG_smaller.jpg" alt="100_4016.JPG_smaller.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Но в один прекрасный момент HomeNet устроил нам эпичный факап с недельным
отсутствием интернета, а РосТелеком как раз в это время заменил у нас телефонную
линию на оптическую G-Pon, предложив заодно более дешевый и быстрый интернет.
Подключение к HomeNet мы решили сохранить на всякий случай, перейдя на младший
тариф.&lt;/p&gt;
&lt;p&gt;Одновременно с этим меня начала неколько раздражать запутанность нашей домашней
сети, в которой теперь болтались роутер, G-Pon модем (это 2 NAT&amp;rsquo;a на пути во
внешку), файлопомойка, все остальные девайсы и два провода от разных
провайдеров, которые надо было по мере необходимости перетыкать руками.
Безобразие? Безобразие.&lt;/p&gt;
&lt;p&gt;Поэтому было принято решение сделать полноценный сервер, который будет выполнять
функции роутера, файл-сервера, принт-сервера и заодно балансировать нагрузку
между двумя провайдерами. При этом было выдвинуто три требования:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Максимально тихий.&lt;/li&gt;
&lt;li&gt;Недорогой, верхняя планка бюджета — 6000 рублей на все.&lt;/li&gt;
&lt;li&gt;Возможность постепенного апгрейда железа в перспективе.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На данный момент могу сказать, что с некоторыми оговорками цель была успешно
достигнута, но подробнее об этом в следующем посте.&lt;/p&gt;</description>
    </item>
    <item>
      <title>С днем программиста!</title>
      <link>https://nevkontakte.com/2011/On-the-day-of-programmer.html</link>
      <pubDate>Tue, 13 Sep 2011 15:22:11 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/On-the-day-of-programmer.html</guid>
      <description>&lt;p&gt;Поздравляю, коллеги, с профессиональным праздником!&lt;/p&gt;
&lt;p&gt;Не буду долго перечислять пожелания — всё всем и так понятно :-) Ну а кому все же хочется пожеланий — добро пожаловать на Хабр, по такому случаю там целых два топика: &lt;a href="http://habrahabr.ru/blogs/development/128279/"&gt;первый&lt;/a&gt; и &lt;a href="http://habrahabr.ru/blogs/programming/128289/"&gt;второй&lt;/a&gt;. А для тех, кому не лень пошевелить мозгами, там же есть &lt;a href="http://habrahabr.ru/blogs/development/128279/"&gt;набор праздничных головоломок&lt;/a&gt;. Сумеете решить?&lt;/p&gt;
&lt;p&gt;Возвращаясь к пожеланиям, я пожелаю лишь одно: не пускайте корни в своей берлоге. Она хоть и уютная, но за ее пределами есть много интересного!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/logovo.jpg" alt=""&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>MODX Library - в Open Source!</title>
      <link>https://nevkontakte.com/2011/MODX-Library-is-Open-Source.html</link>
      <pubDate>Wed, 31 Aug 2011 23:45:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/MODX-Library-is-Open-Source.html</guid>
      <description>&lt;p&gt;Как я и планировал, я начинаю по-тихоньку публиковать полезные наработки, использованные мною в &lt;a href="https://web.archive.org/web/20160307162413/http://phpbbconstructor.com/"&gt;phpBB Constructor&lt;/a&gt;. Сегодня черед, пожалуй, наиболее важной из них — это &lt;a href="https://github.com/nevkontakte/MODX-Lib"&gt;MODX Library&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;MODX Library — это библиотека, обеспечивающая автоматическую обработку инструкций по установке модов в формате &lt;a href="https://github.com/phpbb/modx"&gt;MODX&lt;/a&gt;. Идейно этот формат является развитием патчей со значительно расширенным набором операций, удобных при установке модов. В настоящее время подавляющее большинство модов для phpBB3 распространяется именно в этом формате. MODX Library практически полностью реализует поддержку последней версии стандарта MODX 1.2.5, отличия от стандарта описаны в &lt;a href="https://github.com/nevkontakte/MODX-Lib/blob/master/README.markdown"&gt;README&lt;/a&gt; файле.&lt;/p&gt;
&lt;p&gt;Замечу, что именно с этой библиотеки началась работа над phpBB Constructor в начале февраля 2010 года. Впрочем, история разработки конструктора — это отдельная и местами поучительная тема, которой я коснусь как-нибудь в другой раз.&lt;/p&gt;
&lt;p&gt;Идеологическим предшественником этой библиотеки была другая моя, гораздо более ранняя разработка под названием &lt;a href="https://web.archive.org/web/20111007113841/http://aradmin.org/lite-mod-parser.html"&gt;Lite MOD Parser&lt;/a&gt;, занимавшегося теми же задачами, но только для более раннего формата MOD, популярного в эпоху phpBB2. Сейчас эта штука может быть полезна разве что в исторических целях, а тогда планировалось ее использование в претензиозном проекте &lt;a href="https://web.archive.org/web/20111007113841/http://aradmin.org/web-update.html"&gt;Web Update&lt;/a&gt;, призванном накорню автоматизировать обновление сайтовых движков. И, вероятно, будь у меня тогда больше настырности и опыта, из этого чего-нибудь бы и вышло :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>phpBB Constructor</title>
      <link>https://nevkontakte.com/2011/phpBB-Constructor.html</link>
      <pubDate>Fri, 12 Aug 2011 19:57:32 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/phpBB-Constructor.html</guid>
      <description>&lt;p&gt;Пришло время представить широкой публике проект, над которым я работал все
последнее время. Знакомьтесь,
&lt;a href="https://web.archive.org/web/20130709104113/http://phpbbconstructor.com/"&gt;phpbbconstructor.com&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="вводная"&gt;Вводная&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.phpbb.com/"&gt;phpBB&lt;/a&gt; — один из самых лучших open source движков для
создания форумов. На нем работают сотни тысяч конференций, многие из которых
обладают впечатляющей функциональностью. И несмотря на то, что в базовой
комплектации phpBB3 предоставляет практически все, что может понадобиться для
создания форума, его истинная сила в модах, написанных сообществом. В настоящий
момент только в его официальном каталоге модификаций зарегистрирован 431 мод
разной сложности. И еще больше можно найти на форуме, в разделе бета-версий.&lt;/p&gt;
&lt;p&gt;Однако, несмотря на усилия phpBB Group, установка модов по-прежнему является
непростой задачей для людей, далеких от IT (снобы от phpBB в этом месте
замечают, что это как естественный отбор: не справились с установкой мода —
нечего вам вообще администрированием форума заниматься, а фрилансеры начинают
тонко намекать на свои услуги). Установка модов вручную требует усидчивости и
внимательности, а
&lt;a href="https://www.phpbb.com/customise/db/official_tool/automod/"&gt;AutoMOD&lt;/a&gt; справляется
не со всеми модами (и хорошо, если он сам где-нибудь свалится, хуже, если он мод
установит, а проблемы обнаружатся недели через три, когда уже и непонятно,
откуда у них корни). Кроме того, поиск нужных модов, при условии, что сам толком
не знаешь, что ищешь, остается хитрым и увлекательным квестом.&lt;/p&gt;
&lt;h3 id="эпоха-сборок"&gt;Эпоха сборок&lt;/h3&gt;
&lt;p&gt;Проблемы, описанные мною, стары как &lt;del&gt;мир&lt;/del&gt; phpBB2. На пике популярности phpBB
стали появляться команды энтузиастов, которые вручную делали сборки
дистрибутивов phpBB2, включающие в себя более или менее широкий набор модов,
совершенно необходимых по мнению авторов сборки. Самым известным проектом из
этой серии был, наверное
&lt;a href="https://web.archive.org/web/20110809043015/http://www.phpbb2.de/"&gt;phpBB Plus&lt;/a&gt;,
впечатлявший новичков симпатичной модификацией subsilver и полусотней модов на
борту.&lt;/p&gt;
&lt;p&gt;Однако, и здесь были свои проблемы. Это и задержки с выходом обновлений (пока
команда сборки накатит все новые моды на новую и протестирует, долгая песня&amp;hellip;),
это и разногласия по набору модов в сборке (на всех не уг&lt;del&gt;а&lt;/del&gt;одишь), это и
&amp;ldquo;левые&amp;rdquo; сборки с незаметными бекдорчиками на борту и масса других сложностей.&lt;/p&gt;
&lt;p&gt;С выходом phpBB3 количество активно поддерживаемых сборок существенно
сократилось благодаря богатому функционалу базового дистрибутива и скорому
релизу официального AutoMOD&amp;rsquo;a, но несколько проектов все же осталось на плаву.&lt;/p&gt;
&lt;h3 id="сделай-сам"&gt;Сделай сам!&lt;/h3&gt;
&lt;p&gt;И вот тут-то на сцену выходит
&lt;a href="https://web.archive.org/web/20110907030646/http://phpbbconstructor.com/builder/"&gt;phpBB Constructor&lt;/a&gt;.
Он позволяет самому выбрать состав сборки, которая вам нужна из предлагаемого
набора модов, а так же указать нужные вам локализации. После чего эта сборка
будет автоматически создана на основе свежайшего дистрибутива phpBB3 и отдана
вам :-)&lt;/p&gt;
&lt;p&gt;Таким образом, Конструктор выигрывает и у готовых сборок &amp;ldquo;от умельцев&amp;rdquo;,
поскольку вы можете сами выбирать состав сборки, и у упомянутого AutoMOD&amp;rsquo;a: в
него включены моды, решающие наиболее распространенные проблемы, и они заранее
протестированы на работоспособность и совместимость. В результате, вы в
несколько кликов получаете хороший базовый набор модов, и при желании можете так
же расширить его самостоятельно после установки форума.&lt;/p&gt;
&lt;p&gt;Я записал небольшой скринкаст, демонстрирующий работу с phpBB Constructor:&lt;/p&gt;
&lt;h3 id="участие---приветствуется"&gt; Участие - приветствуется&lt;/h3&gt;
&lt;p&gt;Я с удовольствием выслушаю и постараюсь принять к сведению любую конструктивную
критику и пожелания. Это касается как функционала конструктора, так и набора
модов, который пока невелик, но будет расти (сейчас в очереди на добавление
около 25 модов из официального каталога, потом дело дойдет и до модов в
состоянии бета-версий).&lt;/p&gt;
&lt;p&gt;А пока лишь приведу список наиболее интересный фитч, которые я планирую сделать:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обработка множества исключений: решение</title>
      <link>https://nevkontakte.com/2011/Handling-multiple-exceptions-the-decision.html</link>
      <pubDate>Sun, 31 Jul 2011 23:18:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Handling-multiple-exceptions-the-decision.html</guid>
      <description>&lt;p&gt;Немного позже, чем думал (что простительно, ибо дни выдались хлопотные) привожу свои варианты решения упражнения, которое я озвучил в &lt;a href="https://nevkontakte.com/2011/Exercise-handling-multiple-exceptions.html"&gt;предыдущем посте&lt;/a&gt;. Условие повторять не буду, по приведенной ссылке все описано.&lt;/p&gt;
&lt;h3 id="решение-1-читерское"&gt;Решение 1, читерское.&lt;/h3&gt;
&lt;p&gt;В условии было сказано, что надо обрабатывать исключения в методах init(), run() и shutdown(). И хотя это явно не оговаривалось, по логике функционирования эти методы вызываются подряд. Следовательно, можно сделать так:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Code ...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;ApiDispatcher&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;shutdown&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;MyException1&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Handle exception
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// More exception handling...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Handle exception
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Ну или, чтобы не нарушать инкапсуляцию, этот код можно завернуть в статический метод в ApiDispatcher.&lt;/p&gt;
&lt;p&gt;Достоинства решения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;простота;&lt;/li&gt;
&lt;li&gt;минимум дублирования кода;&lt;/li&gt;
&lt;li&gt;локальность модификации кода.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Недостатки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;жестко привязываемся к сценарию последовательного вызова методов init(), run(), shutdown(), в реальной жизни может потребоваться вызывать их из разных частей приложения в разные моменты времени;&lt;/li&gt;
&lt;li&gt;метод-обработчик исключений должен очень многое знать обо всех возможных исключениях, при появлении нового исключения придется править метод-обработчик.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="решение-2-логичное"&gt;Решение 2, логичное.&lt;/h3&gt;
&lt;p&gt;Следующее решение приходит в голову практически сразу после прочтения условия, и оно действительно хорошо подходит для решения задачи.&lt;/p&gt;
&lt;p&gt;Именно его в комментариях предложил &lt;a href="https://www.rusinov.ie/en/"&gt;Vladimir Rusinov&lt;/a&gt;, за что ему спасибо:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="ch"&gt;#!/usr/bin/env python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ApiDispatcher&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;object&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_exception_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;type&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="ne"&gt;IndexError&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;             &lt;span class="nb"&gt;print&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Check your indexes!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="c1"&gt;# logging, error messages, etc...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyClass&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ApiDispatcher&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="c1"&gt;# do something&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="n"&gt;myfunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_exception_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="c1"&gt;# do something else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="n"&gt;myfunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_exception_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;shutdown&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="c1"&gt;# finish our work&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="n"&gt;myfunction&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="ne"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="bp"&gt;self&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;_exception_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;myfunction&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;#a = []&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;#return a[42]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="ne"&gt;IndexError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;blah-blah-blah&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="n"&gt;c&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MyClass&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="n"&gt;c&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;shutdown&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Достоинства решения:&lt;/p&gt;
&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;/ul&gt;
&lt;p&gt;Недостатки решения:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;метод-обработчик исключений должен очень многое знать обо всех возможных исключениях, при появлении нового исключения придется править метод-обработчик,&lt;/li&gt;
&lt;li&gt;требуется дополнительная логика для прерывания обработки, если упадет init(), либо проброс исключения дальше.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="решение-3-хитрое"&gt;Решение 3, хитрое.&lt;/h3&gt;
&lt;p&gt;Это решение в конечном итоге я и использовал в своем проекте. Сначала я приведу код, а потом дам дополнительные комментарии:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;ApiException&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;MyException&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Just exception without error code and message
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;handleException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$operation_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;foo&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;AnotherException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Failed to perform &lt;/span&gt;&lt;span class="si"&gt;$operation_name&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Custom error message
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;handleException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;public&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;init&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="nx"&gt;OneMoreException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Errors&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;ERROR_CODE_DATABASE&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Custom error code
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;handleException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;handleException&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$error_code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getCode&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$error_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$e&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getMessage&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$error_message&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$error_message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Errors&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;getMessageByCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$error_code&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;Logger&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;get&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$error_code&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$error_message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;// Do other stuff...
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;MyException&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Errors&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;ERROR_CODE_MYERROR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;AnotherException&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Errors&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;ERROR_CODE_ANOTHERERROR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;OneMoreException&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Exception&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;protected&lt;/span&gt; &lt;span class="nv"&gt;$code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Errors&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="na"&gt;ERROR_CODE_ONEERROR&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Здесь я явно использую класс Errors, в котором задефайнены константами все возможные коды ошибок. Кроме того, в нем есть метод, который позволяет по коду ошибки получить его текстовую расшифровку.&lt;/p&gt;
&lt;p&gt;В PHP все исключения имеют по умолчанию два поля (есть и другие, но они нас не интересуют): $message = null и $code = 0, сообщение и код ошибки соответственно. Во всех наших исключениях мы переопределяем значение по умолчанию для кода ошибки, чтобы оно соответствовало типу исключения.&lt;/p&gt;
&lt;p&gt;Теперь, когда мы создаем исключение, мы можем задать ему сообщение, которое описывает причину его возникновения, и, если надо, можем уточнить и код ошибки. Если же мы сообщение вручную не зададим - оно будет получено через класс Errors. В случае, если мы поймаем &amp;ldquo;не наше&amp;rdquo; исключение (типа простого Exception), у него код ошибки будет 0, и класс Errors успешно опишет его как &amp;ldquo;Unknown exception&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Упражнение: обработка множества исключений</title>
      <link>https://nevkontakte.com/2011/Exercise-handling-multiple-exceptions.html</link>
      <pubDate>Wed, 27 Jul 2011 10:22:37 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Exercise-handling-multiple-exceptions.html</guid>
      <description>&lt;p&gt;Хочу предложить программирующей части моей аудитории небольшую задачку, что называется, по мотивам реальных событий. Задачка просто на технику программирования, даже не на алгоритмы, к конкретному языку она, в общем-то, не особенно привязана, лишь бы в нем были предусмотрены исключения.&lt;/p&gt;
&lt;p&gt;Есть корневой класс, условно назовем его ApiDispatcher, который управляет основным потоком исполнения. В нем есть три основных метода:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;init() — инициализирует, необходимые для обработки запроса объекты.&lt;/li&gt;
&lt;li&gt;run() — запускает обработку бизнес-логики.&lt;/li&gt;
&lt;li&gt;shutdown() — освободжает ресурсы.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Каждый из этих методов в основном вызывает методы других объектов, из которых могут прилетать исключения. Исключений много разных, для конкретности будем считать, что десятка два, и для всех трех методов набор возможных исключений одинаков (все двадцать штук).&lt;/p&gt;
&lt;p&gt;Так же будем считать, что нам на любом этапе доступен метод Client::reportError($error_code, $error_message), который обеспечивает вывод клиенту сообщения об ошибке и прекращение работы программы.&lt;/p&gt;
&lt;p&gt;Теперь собственно формулировка проблемы: необходимо во всех трех методах обеспечить обработку всех возможных исключений, для каждого из исключений надо выдать код ошибки и ее текстовое описание, а потом вызвать Client::reportError() с соответствующими параметрами. Замечу, что у исключения может быть задан текст описания ошибки, и в таком случае желательно его сохранить, поскольку он скорее всего будет более информативен, чем стандартная заглушка. В принципе, вы можете модифицировать весь код системы, в т. ч. создавать новые классы и менять существующие, если это необходимо.&lt;/p&gt;
&lt;p&gt;Естественно, решение &amp;ldquo;в лоб&amp;rdquo; не подходит, поскольку оно неизбежно приведет к большому количеству дублирующего кода.&lt;/p&gt;
&lt;p&gt;Как бы вы решили такую задачу? Языки решения принимаются любые в пределах разумного: Java, PHP, C++. Не возбраняется использование языко-специфичных конструкций, если они действительно удобны — расширение кругозора никому лишним не будет ;-)&lt;/p&gt;
&lt;p&gt;Я нашел два приемлемых решения, и опишу оба завтра, если их никто не назовет до меня.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Три top-подобных утилиты, которые должны быть на каждой Linux-машине</title>
      <link>https://nevkontakte.com/2011/Three-top-like-utility-that-should-be-on-every-Linux-machine.html</link>
      <pubDate>Thu, 16 Jun 2011 23:04:07 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Three-top-like-utility-that-should-be-on-every-Linux-machine.html</guid>
      <description>&lt;p&gt;Практически всем пользователям знакома утилита top, показывающая интерактивный
список процессов, отсортированный по нагрузке на процессор. История этой утилиты
идет от 1984 года, когда Уильям ЛеФевр написал такую утилиту для BSD 4.1. С тех
пор top или его аналог есть практически в каждой UNIX-подобной ОС.&lt;/p&gt;
&lt;p&gt;Годами доказав свою практичность, top вдохновил многих других программистов на
разработку похожих утилит, относящихся к разряду must-have на любой
Linux-машине, поскольку они дают возможность быстро оценить ситуацию в системе.&lt;/p&gt;
&lt;h3 id="htop"&gt;&lt;a href="http://htop.sourceforge.net/index.php?page=screenshots"&gt;htop&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;htop — это логическое развитие top. Его интерфейс сделан с помощью ncurses, и
благодаря этому он предоставляет гораздо больше возможностей по визуализации
процессов и общей загрузки системы, а так же значительно более интуитивный
интерфейс настройки всего этого.&lt;/p&gt;
&lt;h3 id="iotop"&gt;&lt;a href="https://github.com/Tomas-M/iotop"&gt;iotop&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Эта замечательная утилита выручит вас, когда надо выяснить, кто же это так
активно пишет на диск, что все остальные процессы едва ли не колом стоят: она
выводит список процессов, отсортированный по скорости чтения/записи на диск.
Полезно запускать ее с ключом -o, тогда она не будет засорять вывод
процессами, которые на диск ничего не пишут.&lt;/p&gt;
&lt;h3 id="iftop"&gt;&lt;a href="http://www.ex-parrot.com/pdw/iftop/"&gt;iftop&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Эта утилита аналогична предыдущей, но показывает она загрузку сетевого
интерфейса. Надо заметить, что в отличие от двух предыдущих программ, она для
работы требует прав root&amp;rsquo;а, и для запуска ей желательно указать имя интерфейса,
который ей надо мониторить с помощью ключа -i.&lt;/p&gt;
&lt;h3 id="бонус-duf"&gt;[Бонус] &lt;a href="https://github.com/muesli/duf"&gt;duf&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;em&gt;(Добавлено 2020-10-03)&lt;/em&gt; Duf — это аналог известной утилиты &lt;code&gt;du&lt;/code&gt;, но с более
приятным текстовым графическим интерфейсом, который отображает состояние
всевозможных устройств хранения, группируя их в удобные таблички по типу.
Утилита не интерактивная в том смысле, что она просто печатает текущее состояние
файловой системы и выходит, но если сильно хочется, то можно сделать так:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ watch duf -width &lt;span class="k"&gt;$(&lt;/span&gt;tput cols&lt;span class="k"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="итог"&gt;Итог&lt;/h3&gt;
&lt;p&gt;Все три утилиты (htop, iotop и iftop) позволяют легко и быстро оценить положение
дел на вашей машине даже в условиях отсутствия иксов или когда система бодро
закапывается в своп и нужно срочно выяснить, почему: в такой ситуации дожидаться
запуска графической утилиты — смерти подобно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Аспекты реализации нового движка блога</title>
      <link>https://nevkontakte.com/2011/Aspects-of-the-implementation-of-the-new-blog-engine.html</link>
      <pubDate>Tue, 14 Jun 2011 02:09:10 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Aspects-of-the-implementation-of-the-new-blog-engine.html</guid>
      <description>&lt;p&gt;В &lt;a href="https://nevkontakte.com/2011/Terms-of-reference-for-a-blog-engine.html"&gt;прошлой заметке&lt;/a&gt; я
сформулировал основные требования к движку блога. Теперь пришло время в общих
чертах разобаться с реализацией. На начальном этапе здесь можно сказать совсем
немного, поэтому пост будет небольшим.&lt;/p&gt;
&lt;h3 id="технические-требования"&gt;Технические требования&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Язык программирования: PHP 5.1+ В принципе, я мог бы себе позволить и
использовать PHP 5.3, мигрировав блог на мою VPS, но я не вижу в этом большой
необходимости, тем более, что
&lt;a href="https://web.archive.org/web/20110615100820/http://www.eomy.net/"&gt;хостинг от EOMY&lt;/a&gt;
за много лет показал себя с лучшей стороны.&lt;/li&gt;
&lt;li&gt;СУБД: MySQL. Здесь выбор тоже практически очевиден: MySQL есть на любом
хостинге и мне привычно с ним работать.&lt;/li&gt;
&lt;li&gt;Фреймворк: &lt;a href="http://www.yiiframework.com/"&gt;Yii Framework&lt;/a&gt; Выбор фреймворка —
тема не простая, так что ее я прокомментирую отдельно.&lt;/li&gt;
&lt;li&gt;Миграция и обратная совместимость: весь контент должен быть перенесен и
адаптирован к новому движку, все ссылки в постах должны остаться действующими,
со старых URL постов должен быть редирект на соответствующие новые.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="yii-framework"&gt;Yii Framework&lt;/h3&gt;
&lt;p&gt;На самом деле, для меня выбор фреймворка практически очевиден, поскольку я уже
имел опыт разработки довольно сложного сайта на Yii Framework и он показал себя
с лучшей стороны.&lt;/p&gt;
&lt;p&gt;Помимо этого есть еще плюсы в его копилку:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Фреймворк сам по себе написан очень хорошо и работает быстро&lt;/li&gt;
&lt;li&gt;Фреймворк быстро развивается и не отягощает себя поддержкой устаревших
технологий (камешек в сторону &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Есть внушительный централизованный репозиторий расширений, которые реализуют
наиболее сложные фитчи &amp;ldquo;из коробки&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Наконец, есть базовый
&lt;a href="https://web.archive.org/web/20170701063357/http://www.yiiframework.com/demos/"&gt;скелет блога на Yii&lt;/a&gt;,
на написании которого построен официальный
&lt;a href="http://www.yiiframework.com/doc/blog/"&gt;тьюториал&lt;/a&gt;. Кроме того, я нагуглил
довольно много попыток развить эту основу до состояния нормального движка,
которые надо внимательно изучить и, возможно, взять за основу.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Этот вечер я посвятил просмотру репозитория расширений и нашел там много
полезного для себя и будущего движка :-)&lt;/p&gt;
&lt;h3 id="с-чего-начать"&gt;С чего начать?&lt;/h3&gt;
&lt;p&gt;Перечислю для истории все проекты, которые я рассматриваю как потенциальную базу
для движка:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/dmtrs/bliig"&gt;Bliig&lt;/a&gt; — произвел на меня наиболее
положительное впечатление, судя по всему более-менее серьезная разработка.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/imehesz/YiiBlog"&gt;YiiBlog&lt;/a&gt; — развитие Yii Blog Demo с
официального сайта. Суда по всему, автор, как и я, затачивает его исходя
исключительно из собственных пожеланий, которые немного расходятся с моими. Но
все же он заслуживает рассмотрения, хотя и во вторую очередь.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/yii-blogdemo-extended/"&gt;Yii BlogDemo Extended&lt;/a&gt; —
другая попытка развить демо-приложение блога. К сожалению, развитие не имеет
четкого направления и поэтому в нем появилась такая глупость как флеш-часы.
Кроме того, проект уже год никак не развивается, поэтому он пригоден разве что
для подсматривания идей решения разных задач, но не как полноценная основа.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://web.archive.org/web/20180611020808/https://github.com/petrgrishin/yiiapp"&gt;YiiApp&lt;/a&gt;
— попытка содать универсальный каркас приложения на Yii. Попытка, судя по
всему, достойная, но для меня не очень подходящая.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/yay-cms/"&gt;yay-cms&lt;/a&gt; — простая CMS на базе Yii. В
качестве основы для блога подходит плохо, но в отношении создания обычных
сайтов проект интересный, поэтому заслуживает упоминания.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кроме того, для всех этих проектов имеет место фактор априорного недоверия к
неизвестным мне разработчикам, но это лишь второстепенный момент. В конце
концов, мне все равно придется ознакомиться со всем исходным кодом движка.&lt;/p&gt;
&lt;p&gt;Внимательное изучение этих проектов мне, видимо, еще предстоит, но я вижу два
наиболее вероятных варианта:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Взять за основу Bliig и танцевать от него.&lt;/li&gt;
&lt;li&gt;Взать за основу официальное демо, а найденные проекты использовать как
шпаргалки для подсматривания решений.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="open-source"&gt;Open Source&lt;/h3&gt;
&lt;p&gt;Я до сих пор еще не принял окончательного решения, но скорее всего движок будет
приватным по двум причинам:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Техзадание для движка блога</title>
      <link>https://nevkontakte.com/2011/Specification-engine-s-blog.html</link>
      <pubDate>Sat, 11 Jun 2011 00:14:49 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Specification-engine-s-blog.html</guid>
      <description>&lt;p&gt;Вот уже чуть &lt;a href="https://nevkontakte.com/2008/Moving-to-a-new-engine-and-other-Goodies.html"&gt;больше трех лет&lt;/a&gt; этот блог крутится на Drupal, но последнее время в все чаще задумываюсь о том, чтобы отказаться от него в пользу самописного движка. Причина этого желания состоит не в том, что в своей жизни я изобрел мало велосипедов, а в том, что Drupal — слишком мощный движок для моих целей.&lt;/p&gt;
&lt;p&gt;За эти три года я достаточно много работал с Drupal&amp;rsquo;ом и могу с чистой совестью подтвердить: из него можно построить сайт абсолютно любой сложности и с любым мыслимим и немыслимым функционалом. Засада лишь в том, что такая мощь мне на этом блоге не нужна, тем более, что за нее приходится платить тяжеловесностью сайта. Поэтому в качестве отправной точки я решил составить список требований которые я предьявляю к движку блога. Этому и будет посвящен пост.&lt;/p&gt;
&lt;h2 id="общее-назначение-движка"&gt;Общее назначение движка&lt;/h2&gt;
&lt;p&gt;Движок предназначен для ведения (преимущественно) однопользовательских персональных блогов.&lt;/p&gt;
&lt;h3 id="пользовательская-система"&gt;Пользовательская система&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Движок должен поддерживать многопользовательскую модель.&lt;/li&gt;
&lt;li&gt;Контроль доступа с помощью механизма ролей. Набор ролей фиксирован: админ, блоггер, комментатор.&lt;/li&gt;
&lt;li&gt;Анонимный пользователь имеет роль комментатора.&lt;/li&gt;
&lt;li&gt;Желательна поддержка авторизации как по логину-паролю, так и через сторонние сайты (Twitter, Google, Open ID). Оптимально, если будет возможность привязки к одной учетке нескольких методов авторизации.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="размещение-постов-и-создание-статических-страниц"&gt;Размещение постов и создание статических страниц&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Движок должен позволять публиковать посты и статические страницы, с разметкой в HTML.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Пост включает в себя следующие параметры:&lt;/p&gt;
&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;Имя поста для URL&lt;/li&gt;
&lt;li&gt;Поле для традиционного видеоролика в конце поста&lt;/li&gt;
&lt;li&gt;Теги&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Визуальный редактор &lt;a href="http://ckeditor.com/"&gt;CKEditor&lt;/a&gt; полным набором панелей инструментов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Загрузка файлов и изображений через интерфейс редактирования поста. Желательна интеграция с CKEditor.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Создание миниатюр изображений. Желательно иметь возможность задавать размер миниатюр, если &amp;ldquo;умолчальный&amp;rdquo; размер не подходил, либо просто отключать миниатюры для конкретных изображений.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Планирование постов. Если у поста статус &amp;ldquo;опубликован&amp;rdquo;, но дата публикации — в будущем, то он не будет отображен до наступления даты публикации.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Блоггеры должны видеть неопубликованные записи, все остальные - нет.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Черновики и отложенные записи должны визуально отличаться от обычных постов и друг от друга.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Включение/отключение комментирования для конкретных постов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Желательно автосохранение черновиков как в WP.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Посты должны быть доступны через RSS.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Разделение на тизер и основной текст не требуется.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Поддержка размещения листингов кода с соответствующей подсветкой.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="комментирование"&gt;Комментирование&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Возможность комментировать посты и страницы, для которых это не было запрещено.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Желательна поддержка древовидных комментариев&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Комментатор может указать свой ник, сайт и email, все, кроме ника - не обязательно.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Желательна возможность логиниться прямо при комментировании.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Комментатору доступен ограниченный набор html тегов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Форма добавления комментария имеет визуальный редактор с набором инструменов, ограниченным набором разрешенных тегов.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;В форму комментирования встроен антиспам, невидимый для пользователей со включенным JavaScript.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Возможна подписка на комментарии по email.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Для блоггеров каждого комментария должны быть дополнительные опции:&lt;/p&gt;
&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;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Желательно иметь возможность детектирования скрытых ссылок в комментариях.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Желательно экспортировать комментарии в RSS&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="многоязычность"&gt;Многоязычность&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Интерфейс должен поддерживать как минимум два языка: английский и русский.&lt;/li&gt;
&lt;li&gt;Весь контент может быть привязан к одному из языков. Если привязка не задана, он отображается для любого языка.&lt;/li&gt;
&lt;li&gt;Комментарии наследуют языковую привязку от поста или страницы, к которой они относятся.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="интерфейс"&gt;Интерфейс&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Шаблон должен быть отделен от логики и быть максимально простым.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Жизнь со вкусом</title>
      <link>https://nevkontakte.com/2011/Life-tastefully.html</link>
      <pubDate>Sun, 08 May 2011 16:39:38 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Life-tastefully.html</guid>
      <description>&lt;p&gt;Этот пост несколько выбивается из общей канвы блога, но я просто не могу промолчать. Что нужно настоящему программисту для счастливой жизни? Думаю, все согласятся, что в этот список точно входят интересная работа, комфорт дома и на рабочем месте и, конечно же, вкусная еда, приготовленная любимой девушкой. Вот о последнем и пойдет речь.&lt;/p&gt;
&lt;p&gt;Надо сказать, мне жутко повезло, я ухитрился найти самую замечательную девушку на свете, к числу талантов которой принадлежит и умение &lt;em&gt;очень&lt;/em&gt; вкусно готовить. Да так, что за последний год я из состояния вечно тощего дистрофика, в котором я прибывал с самого рождения, превратился в солидного упитанного программиста ;-)&lt;/p&gt;
&lt;p&gt;Извиняюсь перед теми, кто читает и думает «Ну хватит уже душу травить!», и перехожу к содержательной части. С этого момента все те вкусные рецепты, о которых я только что говорил, иллюстрируются и публикуются заботливой Олиной &lt;del&gt;рукой&lt;/del&gt; лапой на ее &lt;a href="http://web.archive.org/web/http://kittykitchen.org.ru/"&gt;кулинарном блоге&lt;/a&gt;. Так что все голодные программисты России могут вооружаться посудой и ссылкой на блог и приступать к изготовлению вкусной и полезной еды для себя любимых. Или, если вам повезло так же, как и мне, вооружать своих девушек. А если вы не будете забывать им помогать (с мытьем посуды, например), то у вас все шансы вкусно кушать не только по большим праздникам :-)&lt;/p&gt;
&lt;p&gt;Ну и для затравки опубликую несколько фотографий блюд, приготовленных по этим рецептам (заголовки кликабельны).&lt;/p&gt;
&lt;h3 id="π-рог"&gt;&lt;a href="http://web.archive.org/web/http://kittykitchen.org.ru/content/pi-pie"&gt;π-рог&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/w_a58301a4.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/w_a58301a4.jpg" alt="w_a58301a4.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="песочное-печенье-пески-времени"&gt;&lt;a href="http://web.archive.org/web/http://kittykitchen.org.ru/content/sands-of-time"&gt;Песочное печенье «Пески Времени»&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/w_05790914.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/w_05790914.jpg" alt="w_05790914.jpg"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/w_90344263.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/w_90344263.jpg" alt="w_90344263.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="бисквитный-тортик"&gt;&lt;a href="http://web.archive.org/web/http://kittykitchen.org.ru/content/sponge-cake"&gt;Бисквитный тортик&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/w_b0163c67.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/w_b0163c67.jpg" alt="w_b0163c67.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="мини-тортики-по-кошачьи"&gt;Мини-тортики по-кошачьи&lt;/h3&gt;
&lt;p&gt;А это вообще эксклюзив, рецепт пока не опубликован ;-)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/w_9cb4c53e.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/w_9cb4c53e.jpg" alt="w_9cb4c53e.jpg"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/w_c292f04f.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/w_c292f04f.jpg" alt="w_c292f04f.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="и-просто-немного-капучино"&gt; И просто немного капучино.&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/w_485ebc31.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/w_485ebc31.jpg" alt="w_485ebc31.jpg"&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Длинная задержка перед запросом пароля в SSH</title>
      <link>https://nevkontakte.com/2011/Long-delay-before-prompting-for-a-password-to-SSH.html</link>
      <pubDate>Fri, 29 Apr 2011 12:10:37 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Long-delay-before-prompting-for-a-password-to-SSH.html</guid>
      <description>&lt;p&gt;Микро-заметка для себя и для тех, кто столкнется с аналогичной проблемой.&lt;/p&gt;
&lt;h3 id="симптоматика"&gt;Симптоматика&lt;/h3&gt;
&lt;p&gt;При попытке подключиться к удаленному хосту по ssh между установлением соединения и запросом пароля возникает длинная пауза (секунд 15-30). Она может появляться и пропадать в зависимости от того, из какой сети вы подключаетесь, однако никак не корреллирует со скоростью доступа.&lt;/p&gt;
&lt;h3 id="решение"&gt;Решение&lt;/h3&gt;
&lt;p&gt;В файле /etc/ssh/sshd_config установить следующие параметры:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;GSSAPIAuthentication no
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;После этого неприятная пауза исчезнет.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Собираем bash, запускающийся где угодно.</title>
      <link>https://nevkontakte.com/2011/Collect-bash-starting-anywhere.html</link>
      <pubDate>Tue, 12 Apr 2011 23:34:10 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Collect-bash-starting-anywhere.html</guid>
      <description>&lt;p&gt;Ну, если быть честным, то не совсем где угодно, а на любом дистрибутиве линукса. Возможно, так же заработает и на других *NIX системах, хотя я в этом и не уверен: проверить не на чем, а знание матчасти в этом отношении подкачало.&lt;/p&gt;
&lt;p&gt;И так, наша цель собрать минималистичный bash свежей версии, без зависимостей и не требующий установки, чтобы потом запускать его с флешки или, как в моем случае, для выполнения скриптов для bash 4 в условиях CentOS 5.5, поставляющегося с ископаемым bash 3.2.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Кстати, только сегодня &lt;a href="http://lists.centos.org/pipermail/centos-announce/2011-April/017282.html"&gt;узнал&lt;/a&gt;, что на той неделе вышел CentOS 5.6, с более актуальными версиями софта, но в моем случае это ничего не меняет.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Для пущего осложнения жизни собирать будем 32-битный bash (чтобы запускался и на 32-х и на 64-х битах) в 64-битной Ubuntu.&lt;/p&gt;
&lt;p&gt;Далее, пошаговые инструкции:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;code&gt;$ sudo apt-get install build-essential gcc-multilib&lt;/code&gt;
Это мы устанавливаем инструменты для сборки + библиотеки для кросс-компиляции под x86 (помним, что Ubuntu у нас x86_64 и компилятор в ней по дефолту тоже 64-битный).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ wget http://ftp.gnu.org/gnu/bash/bash-4.2.tar.gz &amp;amp;&amp;amp; tar -xzf bash-4.2.tar.gz &amp;amp;&amp;amp; cd cd bash-4.2/&lt;/code&gt;
Качаем и распаковываем исходники bash. Я привел ссылку на актуальную на момент написания этого поста версию, однако возможно, вам в будущем захочется bash 4.3 или даже 5.0 ;-)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ export CC=&amp;quot;gcc -m32&amp;quot; CFLAGS=&amp;quot;-m32&amp;quot;&lt;/code&gt;
Это и есть главная хитрость, необходимая для сборки 32-битного bash. То ли я не до конца разобрался, то ли у них Makefile корявый, но каждой из этих опций по отдельности недостаточно для сборки не под текущую архитектуру. Равно как и не работают параметры &amp;ndash;host и &amp;ndash;target у скрипта ./configure.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ ./configure --enable-static-link --without-bash-malloc&lt;/code&gt;
Конфигурируем сборку. Параметр &amp;ndash;enable-static-link требует статически линковать исполняемый файл с необходимыми библиотеками, тем самым минимизируя зависимости, а &amp;ndash;without-bash-malloc устраняет один не вполне понятный для меня конфликт при линковке. Так же возможно вам захочется добавить свои параметры, включив дополнительный функционал. В моем случае нужен был &amp;ndash;enable-array-variables, ради которого все и затевалось.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;$ make&lt;/code&gt;
Собираем :-) Если у вас многоядерный процессор, можно добавить параметр -j N, где N - количество параллельных потоков сборки. Обычно его рекомендуют ставить равным удвоенному количеству реальных ядер. Кстати, в моем случае этот параметр существенно ускорил сборку, так что игнорировать его не стоит.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если все шаги завершились успешно, то мы должны получить в текущем каталоге исполняемый файл bash, о котором утилита file должна говорить примерно следующее:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ file bash
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;bash: ELF **32-bit** LSB executable, Intel 80386, version &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux&lt;span class="o"&gt;)&lt;/span&gt;, **statically linked**, &lt;span class="k"&gt;for&lt;/span&gt; GNU/Linux 2.6.15, not stripped
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обратите внимание на выделенные жирным фрагменты. Если они отличаются, то значит при сборке что-то пошло не так, и bash собрался 64-х битный, либо со внешними зависимостями.&lt;/p&gt;
&lt;p&gt;Если хочется, можно немного уменьшить размер бинарника, сделав &lt;code&gt;$ strip bash&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;У меня это дало экономию аж в 202365 байта.&lt;/p&gt;
&lt;p&gt;Теперь этот файл можно копировать куда угодно и запускать, а он должен работать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Прощай, FriendFeed</title>
      <link>https://nevkontakte.com/2011/Farewell-FriendFeed.html</link>
      <pubDate>Wed, 16 Feb 2011 13:55:24 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Farewell-FriendFeed.html</guid>
      <description>&lt;p&gt;Удалил нафиг ленту блога из френдфида. Хочу видеть реальное количество подписчиков. А заодно и сам аккаунт на френдфиде снес, все равно пользоваться так и не научился.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Удобная разработка букмарклетов</title>
      <link>https://nevkontakte.com/2011/Convenient-development-bookmarklet.html</link>
      <pubDate>Tue, 15 Feb 2011 16:56:35 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Convenient-development-bookmarklet.html</guid>
      <description>&lt;p&gt;В процессе работы над &lt;a href="http://pastemark.nevkontakte.com"&gt;Pastemark&lt;/a&gt;
(&lt;a href="https://nevkontakte.com/2011/Pastemark-stop-typing-the-same-thing.html"&gt;пост-анонс&lt;/a&gt;) мне
понадобилось, во-первых, написать довольно сложный букмарклет и, во-вторых,
сделать динамическую генерацию букмарклетов с разными параметрами. Не возьмусь
претендовать на новизну, а лишь просто поделюсь найденным мною подходом.&lt;/p&gt;
&lt;h3 id="о-букмарклетах"&gt;О букмарклетах&lt;/h3&gt;
&lt;p&gt;Для тех, кто с ними еще не сталкивался с букмарклетами, букмарклет — это
разновидность закладки, но от обычной закладки он отличается тем, что вместо
адреса страницы в ней записан скрипт, как правило не очень большой.&lt;/p&gt;
&lt;p&gt;Спектр применений букмарклетов довольно широк: от простого изменения размера
шрифта на текущей странице до анализа ее содержимого и передачи извлеченных
данных какому-нибудь третьему сервису. В качестве примера можно привести
&lt;a href="https://web.archive.org/web/20250215230730/https://blog.x.com/en_us/a/2010/tweet-button-bookmarklet-share-links-from-any-page"&gt;букмарклет твиттера&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Кроме того, букмарклет — это практически единственный шанс для честного
вебмастера выполнить свой код в контексте чужого сайта (-:&lt;/p&gt;
&lt;h3 id="когда-нужно-писать-букмарклет"&gt; Когда нужно писать букмарклет?&lt;/h3&gt;
&lt;p&gt;Собственно, ответ уже дан в предыдущем параграфе. Фактически, букмарклет
занимает промежуточную роль между скриптами на сайте и расширением браузера: его
функциональность все еще ограничена по сравнению с полноценным расширением, но
он уже не привязан к какому-то одному сайту. Еще одна приятная сторона — один и
тот же букмарклет может работать во всех браузерах сразу, включая те, которые не
поддерживают расширения как таковые (реверанс в сторону мобильных браузеров).&lt;/p&gt;
&lt;h3 id="так-как-же-его-написать"&gt;Так как же его написать?&lt;/h3&gt;
&lt;p&gt;Основные концепции написания букмарклетов хорошо изложены в
&lt;a href="http://javascript.ru/unsorted/bookmarklet"&gt;статье на javascript.ru&lt;/a&gt;. Я же не
буду лишний раз повторяться и сразу перейду к своей методике.&lt;/p&gt;
&lt;p&gt;Мы все привыкли писать нормальные JS-функции, пользуясь IDE или просто
блокнотом, а букмарклеты требуют от нас вытягивать весь код в одну строчку да
еще и экранировать, что довольно муторно. Поэтому логично переложить эту работу
на программу, а еще лучше — позволить программе самой себя приводить в нужный
вид.&lt;/p&gt;
&lt;p&gt;И так, прежде всего, нам нужно написать функцию, из которой мы будем делать
букмарклет. Здесь нам все близко и знакомо, лишь только вместо привычного
синтаксиса&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;my_bookmarklet&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Мы прибегнем к альтернативному варианту:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;my_bookmarklet&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;arg1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;arg2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="cm"&gt;/* ... */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Это связано с тем, что в букмарклете нам нужна не именованная функция, а
&lt;a href="http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%BE%D0%BD%D0%B8%D0%BC%D0%BD%D0%B0%D1%8F_%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D1%8F"&gt;анонимная&lt;/a&gt;,
чтобы не засорять пространство имен и избежать конфликтов.&lt;/p&gt;
&lt;h3 id="генерация-итогового-букмарклета"&gt;Генерация итогового букмарклета&lt;/h3&gt;
&lt;p&gt;После того, как мы написали функцию, нам нужно превратить ее в букмарклет.
Краткости ради я сразу приведу фрагмент кода, выполняющий эту функцию:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Ключевой момент: делаем из анонимной функции строку с ее исходниками.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;my_bookmarklet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toString&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Вырезаем однострочные и многострочные комментарии.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\/\/.*/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\/\*[\s\S]*\*\//&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Заменяем переносы строк пробелами
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\n/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Вырезаем повторяющиеся пробелы.  Если у вас внутри строковых литералов
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// есть повторяющиеся пробелы, то этого лучше не делать.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sr"&gt;/\s+/g&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34; &amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Генерируем uri, при этом экранируем спецсимволы.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;encodeURI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="s2"&gt;&amp;#34;javascript:void(&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;code&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="s1"&gt;&amp;#39;(&amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;value_for_arg1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="s1"&gt;&amp;#39;&amp;#34;, &amp;#34;&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;value_for_arg2&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="s1"&gt;&amp;#39;&amp;#34;))&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обратите внимание на переменные value_for_arg1 и value_for_arg2. Если вам нужно
(как в моем случае) генерировать параметризованные букмарклеты, то вы можете это
легко реализовать, передавая параметры вашей анонимной функции.&lt;/p&gt;
&lt;p&gt;Далее с переменной link можно делать все, что хотите — генерировать и вставлять
на страницу ссылку с этим значением href, отображать просто так или что вам еще
в голову придет.&lt;/p&gt;
&lt;h3 id="грабли"&gt;Грабли&lt;/h3&gt;
&lt;p&gt;Есть только одни грабли, на которые легко попасться в процессе написания
букмарклета таким способом: ни в коем случае нельзя пользоваться какими-либо
функциями или переменными, объявленными вне экспортируемой функции, ведь во
время исполнения букмарклета (а это почти наверняка произойдет не на вашем сайте
и в чужом окружении) все они доступны не будут. Я, кстати, на эти грабли тоже
наступил, правда, довольно быстро это обнаружил и исправился.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pastemark: перестаем печатать одно и то же!</title>
      <link>https://nevkontakte.com/2011/Pastemark-stop-typing-the-same-thing.html</link>
      <pubDate>Sat, 12 Feb 2011 00:47:51 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/Pastemark-stop-typing-the-same-thing.html</guid>
      <description>&lt;p&gt;Вот и пришло время анонсировать
&lt;a href="http://pastemark.nevkontakte.com/"&gt;мини-проект&lt;/a&gt;, над которым я работал
последнее время.&lt;/p&gt;
&lt;h3 id="предыстория"&gt;Предыстория&lt;/h3&gt;
&lt;p&gt;Отправной точкой для мысли послужил тот факт, что в процессе модерирования на
&lt;a href="http://phpbbguru.net/community"&gt;phpBB Guru&lt;/a&gt; мне довольно часто приходилось
писать служебные посты и личные сообщения примерно одинакового содержания. В
какой-то момент мне это окончательно надоело и я занялся поиском расширения для
браузера, которое позволило бы хранить и быстро вставлять сниппеты с шаблонами
этих сообщений. Каково же было мое удивление, когда я не нашел ничего
вменяемого.&lt;/p&gt;
&lt;p&gt;Следующим витком поиска стал поиск десктопной проги, но я быстро отказался от
этой затеи, поскольку на десктопе и нетбуке у меня используются разные среды и
не хочется ни терпеть белую ворону на одном из них, ни привыкать к двум разным
прогам. Да и опять же, на нетбуке не так уж и много оперативки, чтобы вешать
туда еще что-то.&lt;/p&gt;
&lt;p&gt;Третий шаг был типичен для любого программиста — написать свою мини-тулзу.
Расширение для FireFox мне писать не захотелось, я уже когда-то связывался с
этим и мне совершенно не понравилось: муторно, документация разрозненная,
неудобно отлаживать и долго тестировать. И тогда я вспомнил про букмарклеты.&lt;/p&gt;
&lt;h3 id="идея"&gt;Идея&lt;/h3&gt;
&lt;p&gt;Сделать набор букмарклетов, которые будут при активации на нужной станице искать
поле по заданному критерию и вставлять туда заготовленный текст.&lt;/p&gt;
&lt;p&gt;Для удобства использования я на коленке набросал простенький генератор «для
себя». Он принимал id поля и текст, выдавал — ссылку-букмарклет. Потом пришли
мысли о том, что не всегда можно найти поле по id и была добавлена поддержка
атрибута name, а потом еще и выбор по клику. О генераторе, кстати, будет
отдельный пост.&lt;/p&gt;
&lt;p&gt;Чем дальше я совершенствовал инструмент, тем больше мне хотелось сделать из него
что-то общеполезное, и в итоге я решил сделать из него микро-вебсервис и заодно
поупражняться в &lt;del&gt;свистелках и перделках&lt;/del&gt; верстке и JavaScript.&lt;/p&gt;
&lt;h3 id="pastemark"&gt;&lt;a href="http://pastemark.nevkontakte.com/"&gt;Pastemark&lt;/a&gt;.&lt;/h3&gt;
&lt;p&gt;Название сервиса было образовано из двух слов ­— «paste» и «bookmark» (и тут же
было переведено моей девушкой на русский как «пастомарка» (-: ).&lt;/p&gt;
&lt;p&gt;Вот что в итоге этот сервис умеет:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Автоматическая генерация букмарклета с заданным названием и вставляемым
текстом.&lt;/li&gt;
&lt;li&gt;Возможность выбора целевого поля по id, name или кликом мыши.&lt;/li&gt;
&lt;li&gt;Простой инструмент для автонастройки генератора на нужное поле, тоже
выполненный в виде букмарклета. (Бета-тестирование показало, что люди,
далекие от веб-разработки совершенно теряются в том, как задать целевое
поле).&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="за-кулисами"&gt;За кулисами&lt;/h3&gt;
&lt;p&gt;Поскольку в своей работе я занимаюсь сервер-сайд программированием, этот проект
стал для меня хорошим шансом разнообразить дела и поупражняться в верстке и
клиентских финтифлюшках. Поэтому в итоге получилось, что основу сервиса я
написал за два неполных вечера, а потом еще неделю оттачивал дизайн и лепил
маленькие, но удобные плюшки. Например, сайт умеет подсказывать пользователю,
что есть более удобная ему локализация, основываясь на содержимом заголовка
Accept-Language. И таких мелочей получилось довольно много, что доставило мне
массу удовольствия в процессе написания и тестирования :-)&lt;/p&gt;
&lt;p&gt;Разместил я новый сервис, кстати на
&lt;a href="https://web.archive.org/web/20120221131120/http://www.eomy.net/vds-hosting.php"&gt;vps от eomy.net&lt;/a&gt;.
Правда о vps я сказал не просто ради пиара, а чтобы поделиться своей находкой.
Недавно я открыл для себя очень интересный веб-сервер
&lt;a href="http://www.cherokee-project.com/"&gt;cherokee&lt;/a&gt;, просто подкупившим меня своею
легковесностью и изумительным
&lt;a href="http://cherokee-project.com/doc/other_bundle_cherokee-admin.html"&gt;веб-интерфейсом для его настройки&lt;/a&gt;.
Уверен, будущее именно за таким софтом - свободным, быстрым и юзабельным.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Я жив</title>
      <link>https://nevkontakte.com/2011/I-m-alive.html</link>
      <pubDate>Wed, 19 Jan 2011 21:59:17 +0000</pubDate>
      <guid>https://nevkontakte.com/2011/I-m-alive.html</guid>
      <description>&lt;p&gt;Я не умер, не забил, не подался в отшельники :-)&lt;/p&gt;
&lt;p&gt;Причина для молчания довольно банальна — в моей жизни наступил довольно интересный период, который поедает массу времени, почти не оставляя времени на блог. Беда в том, что есть масса тем, на которые я хотел бы написать, но они все довольно емкие и требуют времени, которого вечно нет.&lt;/p&gt;
&lt;p&gt;Стыд и позор, но последняя запись в этом блоге датируется аж ноябрем и это надо исправлять, чем я и постараюсь заняться. Я даже немного приоткрою завесу тайны и скажу, что это будет цикл статей по внутреннему устройству &lt;a href="http://www.phpbb.com"&gt;phpBB&lt;/a&gt; с точки зрения модописателя. Естественно, будут посты и на другие темы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Кодекс саппортера.</title>
      <link>https://nevkontakte.com/2010/The-code-of-sapporter.html</link>
      <pubDate>Sat, 27 Nov 2010 22:38:29 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/The-code-of-sapporter.html</guid>
      <description>&lt;h3 id="вступление"&gt;Вступление&lt;/h3&gt;
&lt;p&gt;Сила мира open source — сообщество. Фокус силы — его ядро, те, кто поддерживают, развивают свой любимый продукт. И помогают другим полюбить его. Я пишу для тех, кто волей судьбы стал таким человеком, добровольно взвалив на себя тяжелый труд тех поддержки.&lt;/p&gt;
&lt;h4 id="мы--гики"&gt;Мы — гики&lt;/h4&gt;
&lt;p&gt;Мы выбираем технологию, мы ее любим, холим и пытаемся развивать просто потому, что она нам нравится. Но таких, как мы, мало. Большая часть сообщества — простые пользователи, им не важна технология и ее внутренняя красота, а результат. То, что интересно нам, не интересует их. То, что нам очевидно, для них выглядит бессмыслицей.&lt;/p&gt;
&lt;h3 id="пользователь-заслуживает-уважения"&gt;Пользователь заслуживает уважения&lt;/h3&gt;
&lt;p&gt;Какие бы глупые вопросы он не задавал. Я готов поспорить, что любой из нас начал свое знакомство с IT с глупого вопроса. И на этот вопрос был дан понятный ответ. Прошедшие годы ничего не изменили, и новички по-прежнему имеют право на понятный ответ.&lt;/p&gt;
&lt;h3 id="практически"&gt;Практически&lt;/h3&gt;
&lt;p&gt;Уважай себя. Делай так, чтобы тебя уважали другие. «Боятся — значит уважают» — это не про нас. &lt;em&gt;Да и вообще ни про кого, если уж на то пошло.&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Будь корректен, ты пример для всех.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Эмоции — плохой помощник, они отвлекают от дела.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Знаешь ответ — ответь. Не знаешь — промолчи. Не уверен, скажи об этом прямо или запроси нужную дополнительную информацию.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вопрос уже обсуждался — дай ссылку на то, где обсуждался, и закрой тему. Посылаешь в поиск — дай запрос, по которому искать. Придумывать правильные запросы легко, но только когда знаешь, что искать. Ты — знаешь, но пользователь — нет, иначе не спрашивал бы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Если вопрос требует времени, потрать его. Ведь ты здесь в первую очередь для решения сложных проблем.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Если времени нет, просто молча пройди мимо. У кого-нибудь другого оно найдется и все будут довольны.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Если кто-то ответил неправильно, поправь и объясни, почему его ответ неправильный. Аргументы в духе «ты идиот и кругом неправ» не канают.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Иди на контакт. Не бойся общаться в личке, если это требуется для решения проблемы. Пользователю будет приятно, что тебе небезразлична его проблема, а тебе — что пользователь будет тебе благодарен.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Если тебе хамят, будь еще корректнее. Умение вежливо отвечать на грубость даст тебе лишь преимущество. Напрашивается на бан — забань, но вежливо и согласно правилам.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Наказывай всех. Если кто-то нарушил правила, то он должен получить наказание, независимо от репутации и стажа.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Будь снисходителен. Если ты видишь, что нарушение несущественно и сделано неумышленно, просто объясни пользователю в личке, в чем он нарушил правила и, что больше так не надо делать.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Это очень важное правило! Я неоднократно убеждался, что пользователи после такого обращения начинают гораздо тщательнее придерживаться правил, чем после бана или ворнинга. Так же важно это обращение делать именно в личке, ибо всякому будет обидно, если его огрехи будут обсуждаться публично. Найти золотую середину между этим и предыдущим пунктом непросто, но очень важно.&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Позволь пользователю исправиться и сними наказание. Для тех, кто нарушил правила не со зла это будет очень хорошим стимулом придерживаться правил.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Если пользователь не может исправить нарушение сам, сделай это за него. Права модератора тебе даны именно для этого, а не для нажатия кнопки «бан».&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Другие будут уважать тебя тогда и только тогда, когда ты уважаешь других. Так устроен мир.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Let's cloud!</title>
      <link>https://nevkontakte.com/2010/Let-s-cloud.html</link>
      <pubDate>Sat, 20 Nov 2010 23:27:01 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Let-s-cloud.html</guid>
      <description>&lt;p&gt;Признаюсь, я давно хотел написать этот пост. Уже недели три точно. Однако, учеба и работа успешно съедали все мое время и пост постоянно откладывался. И все же я наконец выкроил свободный вечер и хочу поделиться с вами своими мыслями по поводу облачных сервисов.&lt;/p&gt;
&lt;p&gt;Несмотря на то, что термин &amp;ldquo;облачные вычисления&amp;rdquo; был затаскан маркетологами совершенно не милосердно, тенденция переносить данные в &amp;ldquo;облака&amp;rdquo; видна очень ясно. Почему это происходит? Я полагаю, все дело в том, что сейчас у каждого из нас есть пачка гаджетов различной степени умности и потребность синхронизировать данные между ними. Во всяком случае, это стало решающей причиной для меня: в разные моменты я использую нетбук, настольный компьютер, рабочий компьютер и телефон и, понятно, хочу иметь доступ к своей почте, файлам и контактам отовсюду.&lt;/p&gt;
&lt;p&gt;Отправной точкой для меня стала почта. Исторически у меня было 7 разных почтовых ящиков, которые нужно было читать. Они все были забиты в настройки почтовика на моем настольном компе и на нем же был примерно четырехлетний архив переписки. В итоге, доступ к большей части почты у меня был только из дома, что создавало массу неудобств. В какой-то момент я принял волевое решение настроить сборку почты на моем основном ящике GMail&amp;rsquo;a и импортировать туда весь архив, заодно сменить kmail на более продвинутый Thundebird и архаичный POP3 на IMAP.&lt;/p&gt;
&lt;p&gt;Потратив один выходной, я все это сделал и принялся наслаждаться результатами труда: дома я по-прежнему пользовался почтовиком, с остальных девайсов — веб-интерфейсом GMail. И через пару недель я начал осознавать, что IMAP не вполне корректно работает с ярлыками GMail&amp;rsquo;a, а основная польза от почтовика — счетчик писем в трее. В итоге, Thunderbird в одночасье оказался заменен на аддон для Firefox &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/4490/"&gt;WebMail Notifier&lt;/a&gt; и веб-интерфейс почты. Так я полностью перенес поту в облако.&lt;/p&gt;
&lt;p&gt;Параллельно с этим я стал пользоваться такими штуками, как &lt;a href="https://www.dropbox.com/"&gt;DropBox&lt;/a&gt; (&lt;a href="http://www.dropbox.com/referrals/NTIxMDgzMTU5?src=7"&gt;рефералка&lt;/a&gt; принесет мне и вам лишних 200 мб бесплатной квоты), с помощью которого я стал обмениваться файлами с коллегами и значительно уменьшил беготню с флешкой от компа к нетбуку и обратно. &lt;a href="http://readitlaterlist.com/"&gt;Read It Later&lt;/a&gt; стал перекидывать ссылки на почитать между компами и на телефон. &lt;a href="http://todoist.com/"&gt;Todoist&lt;/a&gt; заменил стикеры и выгодно отличается от них тем, что он не приклеен к одному монитору. Оказалось, что даже для телефона есть его клиент (глючноватый, но есть). &lt;a href="https://alternativeto.net/software/xmarks/"&gt;Xmarks&lt;/a&gt; утащил в облако мои закладки (хотя тут с облачностью можно поспорить, но тем не менее). Жить стало чуточку легче.&lt;/p&gt;
&lt;p&gt;Но всему есть цена, и облачность — не исключение. Платить приходится тремя вещами:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;**Конфиденциальность.**Отправляя данные сервис-провайдеру мы должны доверять ему и надеяться, что никто посторонний наши данные не увидит.&lt;/li&gt;
&lt;li&gt;**Интернет.**Облачность практически всегда требует постоянной связи с интернетом. Та же почта — чтобы прочесть старую переписку нам придется подключаться к интернету и потом уже смотреть. В классическом случае с почтовым клиентом весь архив почты у вас на жестком диске и доступен хоть в Антарктиде. Ситуацию смягчает растущая доступность мобильного интернета, но сотовый ведь ловит не везде.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Зависимость от третьих лиц.&lt;/strong&gt; Решит ваш сервис закрыться или стать платным, и вам придется тратить силы на поиск альтернативы и привыкание к ней. Тот же Xmarks не так давно &lt;a href="http://web.archive.org/web/20101115010803/http://blog.xmarks.com/?p=1886"&gt;напугал&lt;/a&gt; всех пользователей тем, что он в скором времени собирается закрыться. К счастью, довольно скоро было &lt;a href="http://web.archive.org/web/20101208132516/http://blog.xmarks.com/?p=2007"&gt;объявлено&lt;/a&gt;, что апокалипсис отменяется, а у сервиса будет новый владелец.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Я довольно долго шел к тому ,чтобы принять эту цену, но в конце концов удобство окупило ее.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Железобетонные мьютексы в PHP</title>
      <link>https://nevkontakte.com/2010/Reinforced-concrete-mutexes-in-PHP.html</link>
      <pubDate>Wed, 13 Oct 2010 18:56:50 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Reinforced-concrete-mutexes-in-PHP.html</guid>
      <description>&lt;p&gt;Я хочу рассказать об одном нестандартном применении механизма сессий в PHP. Вспомнилось мне это в связи с &lt;a href="http://brokenbrake.biz/2010/10/11/file-DB-PHP"&gt;позавчерашним постом&lt;/a&gt; Тормоза на тему, что опять в Даосе проблема с параллельным доступом к файлам - функция блокировки дала очередной сбой. И хотя Тормоз в комментах уже писал, что обкатывает исправленный алгоритм, успешно выдерживающий стресс-тест, я все же поделюсь своим решением. Сразу оговорюсь, все нижеизложенное было проделано just for fun и имеет свои недостатки. Зато и работает практически безотказно.&lt;/p&gt;
&lt;p&gt;Перейду к технической части. По умолчанию механизм сессий в PHP использует хранилище данных в файлах - каждая сессия лежит в своем файле. При этом, чтобы обеспечить целостность данных используется нехитрый подход эксклюзивной блокировки доступа к файлу. Иными словами, в момент, когда мы делаем session_start(), движок PHP захватывает файл с требуемой сессией и отпускает ее только в момент явного вызова session_write_close() или завершения скрипта. И если в то время, пока мы работаем с сессией в рамках одного запроса, произойдет еще один запрос, использующий ту же сессию, то он заблокируется на session_start() до тех пор, пока первый не освободит файл. Обычно разные клиенты работают в разных сессиях и проблемы не возникает, однако (немного огрубляю) у одного и того же клиента в один момент времени исполняется только один запрос.&lt;/p&gt;
&lt;p&gt;Реально проблема встает, когда во время выполнения некоторого длительного запроса (стримминг потока или long polling) надо обеспечить клиенту возможность посылать и другие запросы (ходить по страничкам) и вовремя получать ответы. Решают задаю обычно одним из трех путей:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Реализуют полностью свой механизм сессий.&lt;/li&gt;
&lt;li&gt;Переопределяют обработчики операций с данными сессии во встроенном механизме (с помощью session_set_save_handler(), этим вариантом я в свое время и воспользовался).&lt;/li&gt;
&lt;li&gt;Как можно раньше освобождают сессию с помощью session_write_close().&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Но я отвлекся. В нашем случае мы не только не будем избавляться от этого, но наоборот будем использовать для реализации мьютекса: будем создавать сессию с заранее известным session_id, к примеру db_mutex, выполнять критические действия и закрывать сессию. Именно эту функциональность и реализует мой класс PHP_Mutex.&lt;/p&gt;
&lt;p&gt;Надо признать, такой подход имеет ряд недостатков по сравнению с полноценными мьютексами:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Захватить можно не более одного мьютекса в одно и то же время.&lt;/li&gt;
&lt;li&gt;Механизм хранения сессий не должен быть переопределен.&lt;/li&gt;
&lt;li&gt;Если вы при этом используете стандартный механизм сессий, возможны потери данных сессии, поскольку на время использования мьютекса блокировка на файл основной сессии снимается.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Но если все условия удовлетворены (кстати, класс по мере возможности сам отслеживает потенциально проблемные ситуации и выдает ворнинги), то блокировка будет железной - разработчики PHP постарались, чтобы данные сессии были в безопасности в любой среде окружения :) Поэтому класс вполне сгодится в небольших скриптах типа Даоса, где сессии не очень нужны. Ну а в сложных системах можно прибегнуть и к тяжелой артиллерии вроде &lt;a href="http://php.net/manual/en/book.sem.php"&gt;встроенных семафоров&lt;/a&gt;, у которых лишь один недостаток - по умолчанию они отключены.&lt;/p&gt;
&lt;p&gt;Сам класс вы найдете во вложении, распространяется он свободно согласно лицензии New BSD License. Если кому пригодится - на здоровье :-)&lt;/p&gt;
&lt;p&gt;Скачать: &lt;a href="https://gist.github.com/nevkontakte/e8f8e0fe631c51ad035c04394270698c"&gt;mutex.php&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="ps-arsis---a-diamond-for-disease"&gt;PS. Arsis - A Diamond For Disease&lt;/h3&gt;</description>
    </item>
    <item>
      <title>Я в Parallels</title>
      <link>https://nevkontakte.com/2010/I-Parallels.html</link>
      <pubDate>Sat, 09 Oct 2010 13:52:57 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/I-Parallels.html</guid>
      <description>&lt;p&gt;С начала октября в моей жизни произошло одно существенное изменение - я стал сотрудником в компании Parallels. Пока лишь как интерн, но в условиях совмещения работы и учебы это оптимально, особенно при таком печальном расписании как в этом семестре :)&lt;/p&gt;
&lt;p&gt;Конечно, почивать на лаврах было бы глупо - уволят нафиг, но это в мои планы и не входит, поскольку наша команда будет работать над новым и интересным проектом, что вообще большая удача для меня. Удача потому, что большая часть программистского труда в крупных компаниях приходится на поддержку и развитие уже существующих проектов, со всеми их &amp;ldquo;исторически сложившимися&amp;rdquo; архитектурными костылями и задачами. Тут всегда найдутся темные куски кода, которые никто до конца не понимает или баги, бережно хранимые во имя обратной совместимости. А начало нового проекта - это шанс поучаствовать в гораздо более творческом процессе, поработать над архитектурой, исследовать технологии и не задумываться об обратной совместимости, до тех пор, пока проект не перестанет быть новым ;)&lt;/p&gt;
&lt;p&gt;Что касается самой компании Parallels, то в зону моего внимания она попала достаточно давно, однако ее продукты у меня вызывали самые разные чувства. Два основных продукта, с которыми мне приходилось иметь дело - это Parallels Plesk Panel и OpenVZ.&lt;/p&gt;
&lt;p&gt;С OpenVZ дело обстояло довольно просто, года два назад (офигеть, этому блогу уже два с половиной года и он мне еще не надоел) у меня случился пик интереса к технологиям серверной виртуализации и я естественно &lt;a href="https://nevkontakte.com/2008/OpenVZ-first-impressions.html"&gt;не мог обойти вниманием OpenVZ&lt;/a&gt;. Тогда я получил массу удовольствия, играясь с контейнерами и прикидывая, для чего оно мне могло бы сгодиться в хозяйстве, но так и не придумал и отложил в долгий ящик. Но теплые воспоминания остались. Позже я столкнулся с этой технологией уже как клиент и на данный момент обе мои VPS работают именно под этой технологией.&lt;/p&gt;
&lt;p&gt;А вот с Plesk&amp;rsquo;ом у меня отношения сложились не так гладко. Года эдак три назад я работал с один человеком, у которого на VPS (точные параметры уже не вспомню, но довольно мощной) был установлен Plesk 7. Это было нечто. С одной стороны, он жрал почти половину памяти сервера даже в простое, держал много файловых дескрипторов и давал небольшую, но постоянную нагрузку на проц за счет постоянно запущенного собственного демона. В результате, сайт весьма основательно тормозил и падал с разными ошибками о нехватке ресурсов. Ну а интерфейс меня вообще приводил в тихое отчаянье: сделанный в стиле Windows XP он требовал для каждого осмысленного действия 3-4 перехода со страницы на страницу, каждый из которых происходил секунд по 10-15 еще и блокируя все действия на время загрузки страницы. То есть, если ты промахнулся и кликнул не туда, то ты не кликаешь тут же куда надо, а ждешь 10 секунд, пока загрузится ненужная тебе страница, потом еще 10 - пока вернешься назад и еще 10 - пока грузится та страница, куда ты хотел изначально. К счастью, клиент был вполне солидарен со мной и мы волевым решением избавились от панели управления вовсе, благо особой нужды в ней не было - на впс жил всего один сайт. С тех пор моими любимыми панелями стали Kloxo и ISPManager за легкость и эффективность.&lt;/p&gt;</description>
    </item>
    <item>
      <title>GRUB: Получаем полный доступ к системе</title>
      <link>https://nevkontakte.com/2010/GRUB-Get-full-access-to-the-system.html</link>
      <pubDate>Sun, 19 Sep 2010 19:15:55 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/GRUB-Get-full-access-to-the-system.html</guid>
      <description>&lt;p&gt;Дублирую сюда мой &lt;a href="http://habrahabr.ru/blogs/infosecurity/104536/"&gt;пост&lt;/a&gt; на Хабре:&lt;/p&gt;
&lt;p&gt;GRUB, безусловно, является самым продвинутым загрузчиком на сегодняшний день, и за это любим админами и разработчиками по всему миру. Его функционал настолько широк, что он практически монополизировал рынок загрузчиков в мире *NIX, а некоторые вообще говорили, что GRUB2 — это скорее маленькая операционная система, чем просто загрузчик. Эдакий швейцарский нож в мире загрузчиков.&lt;/p&gt;
&lt;p&gt;Но в этот раз я хочу обратить внимание на то, что с помощью швейцарского ножа можно не только открывать консервы, но и вырезать неприличные слова на парте.&lt;/p&gt;
&lt;h2 id="сценарий-1-загружаемся-со-внешнего-носителя"&gt;Сценарий 1: загружаемся со внешнего носителя&lt;/h2&gt;
&lt;p&gt;Ситуация, когда в BIOS заблокирована загрузка со внешних носителей, — отнюдь не редкость. Делается ли это из соображений безопасности или иных причин не так уж и важно. Важно то, что GRUB может помощь нам преодолеть этот барьер. Ниже описана последовательность действий, которая позволит нам загрузиться с флешки.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Изготавливаем загрузочную флешку любым способом, например, с помощью &lt;a href="http://unetbootin.sourceforge.net/"&gt;unetbootin&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Вставляем флешку и включаем компьютер.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Дожидаемся появления экрана grub (иногда для того, чтобы успеть его поймать, надо держать &lt;code&gt;Shift&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Перед нами появляется список вариантов загрузки.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Нажимаем &lt;code&gt;c&lt;/code&gt; и входим в интерактивный режим.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Теперь требуется указать носитель, с которого будем грузиться. Обычно (hd0) — это родной жесткий диск компьютера, а флешка становится (hd1). Выяснить, как назовется флешка в вашем случае, нетрудно просто опытным путем.&lt;/p&gt;
&lt;p&gt;Так или иначе, вводим: &lt;code&gt;root (hd1)&lt;/code&gt; для GRUB Legacy или &lt;code&gt;set root=(hd1)&lt;/code&gt; для GRUB2&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Просим передать управление загрузчику на указанном диске: &lt;code&gt;chainloader +1&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Загружаемся! &lt;code&gt;boot&lt;/code&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Если вы все сделали правильно, то в результате вы успешно загрузитесь со своей флешки, несмотря на запрет в биосе. Опытным путем мне удалось выяснить, что метод не работает если ваша материнка не умеет грузиться с usb или не опрашивает устройства при каждой загрузке (как, например, на моем eee PC при включенном Boot Booster).&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Лирическое отступление:&lt;/em&gt; этот метод мне удалось опробовать в одном из терминальных классов нашего университета, где на компах стояли в дуалбуте винда с линуксом. Прелесть того случая в том, что факультетский сервер экспортировал /home по NFS и та терминалка была занесена в разрешенные подсети. В результате, мне удалось прочитать домашние каталоги пользователей того сервера и уйти так никем и незамеченным.&lt;/p&gt;
&lt;h2 id="сценарий-2-получаем-консоль-roota"&gt;Сценарий 2: получаем консоль root&amp;rsquo;a&lt;/h2&gt;
&lt;p&gt;Опять-таки, ситуация, когда пароль рута не сообщают конечным пользователям компьютера, ни у кого удивления не вызывает. Однако все тот же GRUB поможет нам это досадное ограничение обойти. В отличие от предыдущего способа, удобного для доступа в духе «незаметно пришел, скопировал и ушел, не наследив», этот способ удобнее для внесения нужных нам изменений в установленную систему. Кроме того, для этого нам уже не нужны никакие флешки.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Аналогично, добираемся до списка вариантов загрузки.&lt;/li&gt;
&lt;li&gt;Выбираем нужный нам вариант.&lt;/li&gt;
&lt;li&gt;Входим в режим редактирования. Здесь есть небольшие отличия между GRUB Legacy и GRUB2. В GRUB2 после нажатия клавиши &lt;code&gt;e&lt;/code&gt; мы сразу попадаем в режим редактирования, а в GRUB Legacy нужно нажать &lt;code&gt;e&lt;/code&gt; первый раз, выбрать строку для редактирования и еще раз нажать &lt;code&gt;e&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Выбираем строку, которая начинается со слова linux или kernel.&lt;/li&gt;
&lt;li&gt;Удаляем из нее слова &lt;code&gt;quiet&lt;/code&gt; и &lt;code&gt;splash&lt;/code&gt;, если они есть, и дописываем в конец &lt;code&gt;single init=/bin/bash&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Если у нас GRUB2, то сразу жмем &lt;code&gt;Ctrl+X&lt;/code&gt;, а если GRUB Legacy — &lt;code&gt;Esc&lt;/code&gt; и потом &lt;code&gt;b&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В результате мы загрузимся в рутовую консоль безо всяких паролей и ненужных вопросов.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nevkontakte.me — introducing Qby CMS</title>
      <link>https://nevkontakte.com/2010/Nevkontakte-me-introducing-Qby-CMS.html</link>
      <pubDate>Fri, 17 Sep 2010 10:50:55 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Nevkontakte-me-introducing-Qby-CMS.html</guid>
      <description>&lt;p&gt;Пришло время опубликовать первый из проектов, которые я упоминал в &lt;a href="https://nevkontakte.com/2010/Summer.html"&gt;позапрошлом&lt;/a&gt; посте. Позвольте представить вам мой новый сайт-визитку: &lt;a href="https://web.archive.org/web/20111011235808/http://nevkontakte.me/"&gt;Nevkontakte.ME&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Мысль о том, что неплохо было бы сделать небольшой сайт-визитку проскальзывала у меня уже довольно давно, однако делать еще один тупой трехстраничник в духе &amp;ldquo;Главная, обо мне, контакты&amp;rdquo; было неинтересно. И тут я вспомнил об одном из старых &lt;a href="http://brokenbrake.biz/2009/10/24/cuby"&gt;постов&lt;/a&gt; Тормоза, в котором он предлагал концепт Cuby CMS — движка для микросайтов в виде, как это ни странно, куба. Однако у Тормоза дело не пошло дальше концепта, а у меня как раз была нужда в чем-то оригинальном и в добавок желание поупражняться в JavaScript-fu.&lt;/p&gt;
&lt;p&gt;Взяв за основу идею Тормоза, я добавил анимацию перехода между сторонами с помощью CSS3 2D Transforms (по началу хотел для большей реалистичности юзать 3D Transforms, однако его пока поддерживают только nightly-билы вебкита), немного плюшек для более прозрачной навигации и удобную AJAX-админку.&lt;/p&gt;
&lt;p&gt;Однако, поскольку я при этом юзал достаточно свежие технологии, в конце пришлось озаботиться совместимостью со старыми браузерами, в результате чего был порожден упрошенный режим без анимаций для динозавров. Кроме того, для полноты счастья был сделан и режил для работы без JavaScript вовсе.&lt;/p&gt;
&lt;p&gt;Вживую все это вы можете повертеть на &lt;a href="https://web.archive.org/web/20101223062651/http://nevkontakte.me/"&gt;Nevkontakte.ME&lt;/a&gt;, а админку посмотреть на скриншоте:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/acp-qby.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/acp-qby.jpg" alt="acp-qby.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Единственное, что я не уверен, стоит ли ее распространять, ибо тогда потеряется главная изюминка — оригинальность, ради которой все и затевалось.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Полнотекстовый RSS - это удобно!</title>
      <link>https://nevkontakte.com/2010/Full-text-RSS-is-convenient.html</link>
      <pubDate>Mon, 13 Sep 2010 00:56:23 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Full-text-RSS-is-convenient.html</guid>
      <description>&lt;p&gt;Сегодня, заглянув очередной раз в RSS-ридер и бегло проглядев список новых постов, понял, что больше половины блогов, на которые я подписан, отдают в RSS лишь жалкие огрызки постов и меня это жутко удручает. В частности, читать такие посты мне уже не хочется и я зачастую их пропускаю практически машинально - разве что заголовок зацепит, но это бывает не часто. И в то же время я отдаю себе отчет в том, что будь пост целиком в моем ридере - я бы его прочитал, хотя бы по диагонали.&lt;/p&gt;
&lt;p&gt;Почему же такая практика стала популярной? Я сходу могу назвать такие причины:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Защита от автоматического воровства контента (по-видимому, самая главная).&lt;/li&gt;
&lt;li&gt;Стимуляция пользователя лишний раз зайти на блог.&lt;/li&gt;
&lt;li&gt;Желание защитить пользователя от &amp;ldquo;попадания на трафик&amp;rdquo; на случай, если вдруг получится большой пост с кучей картинок.&lt;/li&gt;
&lt;li&gt;Все так делают.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Все эти аргументы кажутся мне довольно неубедительными, и вот почему:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Современные парсеры-грабберы достаточно умны, чтобы пройти по ссылке из ленты на сайт и стащить полный пост.&lt;/li&gt;
&lt;li&gt;На самом деле тут все, как мне кажется, наоборот: пользователь как правило или ленив или спешит, поэтому он не будет утруждать себя чтением огрызка и кликом, если тот его не заинтересует с первого взгляда. А заинтересовать не так-то просто. Кроме того, все мы знаем о собственном любопытстве и что если начнем читать - наверняка захочется прочитать все, а кликать лень, лучше не напрягаться и не начинать читать вовсе. В результате блоггер не только не увеличивает посещаемость блога, но и &amp;ldquo;теряет&amp;rdquo; часть подписчиков из-за того, что они не читают его посты целиком.&lt;/li&gt;
&lt;li&gt;Признайтесь честно, вы не так уж и часто пишете такие посты. И если вдруг случится, что напишете, то вручную поставить кат совсем недолго.&lt;/li&gt;
&lt;li&gt;Ну это вообще просто стадный эффект.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Помимо этого я вижу еще как минимум один минуса:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Этот актуален для многих блоггеров, а именно - тех, кто сидит на Вордпрессе. ВП имеет дурное свойство при автоматической генерации тизера для RSS срезать половину форматирования, которое пересекает границу отсечения и в результате выглядит этот тизер ну совсем непривлекательно. Да и обрыв на полуслове тоже не добавляет изящества.&lt;/li&gt;
&lt;li&gt;Здесь затронуты мобильные пользователи вроде меня - те, кому удобно закачать обновления ленты дома, а потом спокойно читать в том же транспорте, не тратя деньги на мобильный трафик, цены которого всегда казались мне сильно завышенными.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Поэтому я призываю блоггеров - отдавайте в RSS полные посты, не мучайте своих читателей!&lt;/strong&gt; И если вы согласны со мною, то опубликуйте заметку, постовой или еще что-нибудь с тем же призывом, пусть блогосфера станет немного удобнее.&lt;/p&gt;
&lt;p&gt;Вообще, самое грамотное решение этой проблемы я видел у &lt;a href="http://vitashok.com/"&gt;vitashok&lt;/a&gt;&amp;lsquo;a: у него есть два фида: &lt;a href="http://feeds2.feedburner.com/vit_v"&gt;полный&lt;/a&gt; и &lt;a href="http://feeds.feedburner.com/Vitashok"&gt;урезанный&lt;/a&gt;. Рекомендую все брать с него пример ;)&lt;/p&gt;
&lt;p&gt;А что же делать читателям до тех пор, пока мир не изменится к лучшему? Например, пользоваться сервисами вроде &lt;a href="http://www.wizardrss.com/"&gt;этого&lt;/a&gt;.  Фиды блогов с не слишком дурацкой версткой от вполне успешно превращает в полнотекстовые, но, к сожалению, бывают и сбои.&lt;/p&gt;
&lt;p&gt;PS. В RSS я полные посты отдаю уже давно, а с этого момента и на главной блога посты тоже будут отображаться целиком.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Летнее</title>
      <link>https://nevkontakte.com/2010/Summer.html</link>
      <pubDate>Mon, 06 Sep 2010 18:27:22 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Summer.html</guid>
      <description>&lt;p&gt;Вот и прошло лето :-)&lt;/p&gt;
&lt;p&gt;Несмотря на практически партизанское молчание в этом блоге, лето у меня было наполнено событиями выше крыши, о которых вкратце я и расскажу.&lt;/p&gt;
&lt;p&gt;Как и у любого студента приход лета знаменуется не первым обгоранием на пляже и даже не легко одетыми девушками, а сессией. Какие уж тут девушки, когда надо за месяц пройти семестровую программу по 5 предметам :D Тем не менее, мне удалось побороть даже самые зверские предметы и избежать троек, честно заработав стипендию (1300р./мес. !).&lt;/p&gt;
&lt;p&gt;А вот дальше все пошло гораздо приятнее. Весь июль у меня прошел под знаком Parallels®, поскольку я в этом году все же решил изменить &lt;a href="https://ssyp.ru"&gt;ЛШЮП&amp;rsquo;у&lt;/a&gt; (прости, в следующем году постараюсь наверстать) и пошел на &lt;a href="http://parallels.nsu.ru/"&gt;летнюю практику&lt;/a&gt; в лабораторию Параллелс-НГУ. Там я работал в довольно большой команде аж из 16 человек над проектом PCI Scanner.&lt;/p&gt;
&lt;p&gt;С этим проектом связана достаточно забавная история. Согласно задумке нашего куратора-научрука в команду набрали студентов, окончивших 1-2 курсы и из тех, кто после летней школы останется на стажировку в лаборатории, будет сформирована команда, ориентированная на информационную безопасность. В конце концов, именно эта команда должна заняться изготовлением инструмента проверки биллинговых систем стандарту безопасности PCI. Но, учитывая общую неопытность команды в качестве триального проекта, который позволит нам набить руку в программировании и веб-технологиях в частности, было выбрано создание сайта с играми, основанными на разных математических проблем. Так, например, игра &lt;a href="https://web.archive.org/web/20101226034747/http://nphardgames.com/game/onearmed"&gt;Complexity&lt;/a&gt; имеет в своей основе тот факт, что решение системы уравнений над кольцом Z2 - задача NP-трудная, то есть разрешима только полным перебором.&lt;/p&gt;
&lt;p&gt;Таким образом, весь июль у меня был посвящен проекту &lt;a href="https://web.archive.org/web/2010/http://nphardgames.com/"&gt;NP-Hard Games&lt;/a&gt;, где в мои обязанности входила разработка самого движка сайта. И несмотря на то, что новичком в веб-программировании я уже давно себя не считаю, мне довелось столкнуться с несколькими новыми для меня интересными проблемами и получить массу полезного опыта. В частности я познакомился с новым для меня фреймворком &lt;a href="http://www.yiiframework.com/"&gt;Yii&lt;/a&gt; и уже успел его полюбить :-) Еще одной новой для меня задачей стала разработка API для сетевого взаимодействия в играх (да, даже в математических играх бывает мультиплеер ;-)&lt;/p&gt;
&lt;p&gt;Происходило все это с 28 июня по 29 июля, и финишной чертой в виде отчетной конференции 30-го июля. Все это время я работал в режиме фулл-тайм, по 8 часов в день с 9 до 18 и часовым перерывом на обед, тоже довольно занимательный опыт. Зато пятидневная рабочая неделя для нас стала раем на земле!&lt;/p&gt;
&lt;p&gt;Тем не менее, 30 июля я с облегчением последний синхронизировал продакшен с девелоперской веткой и позволил себе забыть об этом проекте аж до сегодняшнего дня.&lt;/p&gt;
&lt;p&gt;На август у меня была запланирована поездка в город Абаза, что в Хакасии, в гости к родителям моей девушки, аж на целых три недели. И, надо отдать должное, эти три недели не сумели омрачить даже такие прелести жизни в частном секторе, как &amp;ldquo;туалет типа сортир&amp;rdquo; на улице. 3 недели полной безответственности, вкусной еды, свежего воздуха и позитивного общения оказались именно тем, что нужно измученному учебой, сессией, а потом и летней практикой студенту. Так что теперь я точно знаю, где проведу следующий август :-) Кстати, несмотря на то (или скорее благодаря тому), что Абаза - довольно маленький город, он очень симпатичный, а природа вокруг просто зашибись, да еще и мошек нет (те, кто живут в Академгородке меня поймут). Взять хотя бы то, что я, насквозь городское дитя, с удовольствием дважды съездил по грибы, второй и третий раз в жизни соответственно. Еще одним результатом поездки стало, что я наконец вплотную занялся своим проектом-долгостроем и теперь он уверенно движется к завершению, что не может не радовать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RoboMap: привет из прошлого.</title>
      <link>https://nevkontakte.com/2010/RoboMap-Hello-from-the-past.html</link>
      <pubDate>Sun, 01 Aug 2010 14:02:02 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/RoboMap-Hello-from-the-past.html</guid>
      <description>&lt;p&gt;Чуть больше двух лет назад я запустил один небольшой эксперимент с кодовым названием &lt;a href="https://nevkontakte.com/2008/RoboMap-Project-detailed-study-of-search-engine-indexing.html"&gt;RoboMap.txt&lt;/a&gt;. Суть его заключалась в том, чтобы на практике выяснить какие ссылки способны опознать поисковики. Спустя три недели после начала эксперимента я подвел итоги и забыл о нем. До сегодняшнего дня.&lt;/p&gt;
&lt;p&gt;В прошлое воскресенье мне пришло уведомление от хостера о том, что я выбрал 80% квоты трафика. Я слегка удивился, поскольку все мои сайты, размещенные на этом аккаунте (включая этот блог =) особой популярностью не пользуются, глянув на календарь, решил не дергаться, ведь месяц подходил к концу и квота скоро должна была возобновиться. Я оказался почти прав, квота таки кончилась, но в самый последний день месяца. Именно поэтому вчера весь день мой блог был недоступен. Поскольку целый день я бегал вдали от компа, обнаружил я проблему только к вечеру и решил не дергаться и просто подождать конца суток.&lt;/p&gt;
&lt;p&gt;Сегодня утром я первым делом убедился, что сайт снова онлайн, и стал разбираться, в чем причина. Каково же было мое удивление, когда я увидел, что 70% квоты трафика пришлось на robomap.nevkontakte.org.ru - тот самый проект двухлетней давности! Я тут же полез смотреть его собственную статистику и увидел, что &lt;a href="https://web.archive.org/web/2010/http://robomap.nevkontakte.org.ru/"&gt;лог посещений&lt;/a&gt; поисковиками за два года раздулся до полутора сотен тысяч записей, при чем последние записи датировались сегодняшним днем!&lt;/p&gt;
&lt;p&gt;Вот тут-то на мнея и снизошло озарение. Изначально я запретил поисковикам индексировать лог посещений, но в результате небольшой ошибки в robots.txt Яндекс таки проиндексировал эти страницы. Мне стало интересно, будут ли остальные поисковики их индексировать, и я убрал запрет вообще.&lt;/p&gt;
&lt;p&gt;Оказалось, что будут и еще как. Google и Rambler принялись с таким энтузиазмом жрать страницы, что в июле выкачали с сайта 16 Гб абсолютно неинтересного, генерированного контента. Почему? Хотел бы я знать, но в индексе Google в данный момент сидит 5 тысяч страниц, а у Рамблера - 14. Яндекс оставил только заглавную и еще парочку, а на остальных я не смотрел.&lt;/p&gt;
&lt;p&gt;Есть ли от этого практическая польза? Думаю, нет. Об этом говорит статистика &lt;a href="http://www.liveinternet.ru/stat/robomap.nevkontakte.org.ru/"&gt;Liveinternet&lt;/a&gt;. С другой стороны я даже не пытался оптимизировать все это под какие-то запросы, так что может профи бы и сумел извлечь из этого хороший результат.&lt;/p&gt;
&lt;p&gt;Тем не менее, сейчас я возвращаю запрет на индексацию лога, чтобы не грузить бесполезным трафиком сервер. Эксперимент удался и закрыт.&lt;/p&gt;
&lt;p&gt;PS. Все чаще встречаю на блогах вместо стандартных комментариев комментарии от сервиса Disqus. Лично у меня они вызывают противоречивые чувства, но если кому интересно, то вот: &lt;a href="http://seomoney.me/sajtostroenie/ustanovka-plagina-disqus-na-wordpress"&gt;установка плагина Disqus на Wordpress&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Концепт всесторонне полезного файлохранилища.</title>
      <link>https://nevkontakte.com/2010/The-concept-thoroughly-useful-file-sharing-sites.html</link>
      <pubDate>Fri, 02 Jul 2010 22:46:23 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/The-concept-thoroughly-useful-file-sharing-sites.html</guid>
      <description>&lt;p&gt;В этом посте я процитирую свой ответ на одно из заданий в олимпиаде по веб-технологиям, о которой я писал в &lt;a href="https://nevkontakte.com/2010/As-I-participated-in-Olympiad-on-web-technologies.html"&gt;прошлом посте&lt;/a&gt;. Задание формулировалось примерно так: придумать концепт файлохранилища, полезного для пользователя и владельца, описать возможные схемы монетизации.&lt;/p&gt;
&lt;p&gt;Вот что мне удалось сочинить за час, который я потратил на это задание:&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="i-термины"&gt;I. Термины.&lt;/h3&gt;
&lt;p&gt;Для удобства я сразу оговорю значение терминов, которыми буду пользоваться ниже.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Пользователь - зарегистрированный пользователь сервиса, владелец файлов и хранилища.&lt;/li&gt;
&lt;li&gt;Посетитель - незарегистрированный пользователь сервиса, скачивающий файлы и основной потребитель рекламы.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="ii-общая-концепция"&gt;II. Общая концепция.&lt;/h3&gt;
&lt;p&gt;Учитывая последние тенденции (которые некоторыми называются web 3.0) для создания успешного файлового хранилища стоит следовать трем важным условиям:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Простота использования&lt;/li&gt;
&lt;li&gt;Простота интеграции&lt;/li&gt;
&lt;li&gt;Персонализация&lt;/li&gt;
&lt;li&gt;Так же следует принять во внимание популяризацию облачных хранилищ (Ubuntu One, Dropbox).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Из этих посылок можно прийти к таким выводам относительно свойств файлового хранилища:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Должно предоставляться удобное API для управления файлами в персональном хранилище с одной стороны и API для доступа к публичным файлам с другой.&lt;/li&gt;
&lt;li&gt;Необходимо реализовать софт на базе первого API для прозрачной интеграции в систему пользователя. Это могут быть решения на базе fuse для Linux и Installable File System для Windows.&lt;/li&gt;
&lt;li&gt;Пользователь может открывать общий доступ к некоторым файлам, что позволяет посетителям их скачивать. Возможно устанавление стоимости скачивания файла - посетитель должен будет оплатить доступ к файлу.&lt;/li&gt;
&lt;li&gt;Пользователь может присваивать файлам дополнительную метаинформацию, на основе которой он может структурировать файлы (это в дополнение, но не взамен папок)&lt;/li&gt;
&lt;li&gt;Для посетителя не должно быть прямых препятствий для получения доступа к желаемому файлу. Реклама демонстрируется в процессе скачивания/поиска нужного файла.&lt;/li&gt;
&lt;li&gt;Глобальная система поиска по публичным файлам (для этого можно так же использовать метаинформацию из п. 4.&lt;/li&gt;
&lt;li&gt;Реклама таргетируется на конкретного посетителя с учетом его интересов. Для этого можно использовать его историю скачивания файлов и, возможно, интеграцию с какой-нибудь популярной системой web-статистики (Liveinternet.ru и т. п.) для получения сведений о посещаемых сайтах.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="iii-реклама"&gt;III. Реклама.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Контекстная.&lt;/strong&gt;&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;ol&gt;
&lt;li&gt;Водяные знаки на изображении/видео. Перед отдачей файла пользователю эта реклама (выбранная с учетом интересов пользователя) накладывается на контент и после этого передается в браузер. Вариант более щадящий в отношении нагрузки на сервер - добавление рекламы к файлу в момент добавления на сервис в соответствии с извлеченной метаинформации, предусмотренной форматом файла, и дополнительно указанной пользователем.&lt;/li&gt;
&lt;li&gt;Рекламные ролики в начале/конце/середине видео файлов. Подход аналогично предыдущему.&lt;/li&gt;
&lt;li&gt;Дополнительные файлы с рекламой в архивах. А архивы пользователя добавляются дополнительные файлы какого-либо формата с рекламой.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;При этом хранится и не модифицированная версия файла, чтобы иметь возможность корректно заменять рекламу и предоставлять файл пользователю в исходном виде.&lt;/p&gt;
&lt;h3 id="iv-монетизация-сервиса"&gt;IV. Монетизация сервиса.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Пользователь (владелец файлов):&lt;/strong&gt;&lt;/p&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;/ol&gt;
&lt;p&gt;&lt;strong&gt;Посетитель:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как я участвовал в олимпиаде по веб-технологиям</title>
      <link>https://nevkontakte.com/2010/As-I-participated-in-Olympiad-on-web-technologies.html</link>
      <pubDate>Sat, 26 Jun 2010 19:25:28 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/As-I-participated-in-Olympiad-on-web-technologies.html</guid>
      <description>&lt;p&gt;Изначально я хотел лишь кратко описать саму олимпиаду и подробнее сфокусироваться на одном из заданий в ней, но рассказ вышел большим и я разделил пост на два. Так что тут будет немного жизнеописания, а в следующем - вещи уже более близкие тематике этого блога.&lt;/p&gt;
&lt;p&gt;Речь пойдет об олимпиаде по веб-технологиям под эгидой Бийского технологического института, прошедшей в апреле этого года. Узнал я о ней еще в начале семестра благодаря объявлению, появившемуся на доске деканата. Поскольку веб-программирование - это мой профиль, то я заинтересовался и тут же залез на сайт. К моему удивлению, зарегистрироваться там не получилось: регистрация начиналась за месяц до начала олимпиады, а пресс-релиз был повешен гораздо раньше. Какой смысл этого ограничения - понятия не имею, пришлось ставить себе напоминалку в огранайзер, чтобы тупо не забыть про них.&lt;/p&gt;
&lt;p&gt;Как только регистрация стала доступна, я быстро заполнил форму, а потом получил ошибку, гласящую о том, что письмо со ссылкой для подтверждения отправить не удалось, в то время как реально письмо отправилось и дошло. Организаторы олимпиады по веб-технологиям не могут заставить нормально работать собственный сайт, надо же. Сайт, кстати, на джумле, которую я саму по себе не уважаю, но это вопрос вкуса.&lt;/p&gt;
&lt;p&gt;Когда дошло до самого тура, я получил выбор между тремя секциями: веб-дизайн, анимация и веб-программирование. Я выбрал последнее, как наиболее близкое по духу. После этого передо мною оказался список из семи (или что-то около того) заданий на разные веб-технологии, включая CSS, PHP и немного JS. Были и &amp;ldquo;теоретические&amp;rdquo; задачи, об одной из которых я напишу в следующем посте. но в целом все они были простые и довольно легко решались при наличии базовых навыков. Разве что в задаче про CSS мне пришлось погуглить, чтобы разобраться с трехмерными эффектами в CSS3. В общем, отведенного времени мне вполне хватило, чтобы выполнить большую часть заданий с хорошими баллами и перейти в фазу ожидания результатов.&lt;/p&gt;
&lt;p&gt;Через пару дней на сайте появилось сообщение о том, что проверка близка к концу и скоро результаты будут. Еще через пару - появились результаты секций веб-дизайн и анимация, а веб-программирование было обещано &amp;ldquo;совсем скоро&amp;rdquo;. &lt;a href="http://olympweb.e-digit.ru/napr3"&gt;Результаты&lt;/a&gt; появились лишь через неделю после тура, но долгое ожидание компенсировалось приятной новостью: я занял первое место с почти двукратным отрывом. Одновременно на сайте появилась просьба сообщить контактные данные для рассылки призов, что я тут же и проделал.&lt;/p&gt;
&lt;p&gt;Следующий виток событий имел место уже в мае, через месяц. Сайт висел в том же виде, что и в момент публикации результатов, никакой информации о ходе рассылки призов не было. Попытки писать на почтовые ящики, указанные на сайте давали только отлуп &amp;ldquo;Mainbox is full&amp;rdquo;. Видимо не я один такой любопытный был, хотел узнать где мои обещанные &amp;ldquo;ценные призы&amp;rdquo;. Поэтому мне осталось долбиться в аську, указанную среди прочих контактов. Спустя несколько дней мне все же ответили. при чем весьма вежливо, что посылки и письма уже переданы в общий отдел и скоро будут отправлены. Я успокоился еще на месяц.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/IMG_0255.JPG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0255.JPG" alt="IMG_0255.JPG"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Через месяц (в сумме - через два после тура) я снова задался вопросом, где мой &amp;ldquo;ценный приз&amp;rdquo;, но пошел с ним уже в свой деканат, так как считал, что пота почтой, но за месяц-то посылка из Бийска до Новосибирска дойти должна. В деканате удивились и сказали, что они вообще без понятия и пишите в оргкомитет олимпиады. И только когда я был в дверях, одна из женщин, сидевших в кабинете припомнила, что им вчера пришло какое-то извещение о посылке из Бийска. Однако, вовремя я пришел. На вопрос, когда же они получат посылку и я смогу забрать приз, я получил совет зайти на следующей неделе, дескать &amp;ldquo;посылка прислана на имя деканата, а у деканата паспорта нет и на почту он прийти не может. Придется через отдел снабжения получать&amp;rdquo;. На следующей неделе мне торжественно отдали диплом, но сказали, что посылку еще не забрали (&amp;ldquo;нужный человек&amp;rdquo; находится незнамо где, бывает), посоветовали зайти еще через пару дней.&lt;/p&gt;</description>
    </item>
    <item>
      <title>План битвы API - Сражение за будущее</title>
      <link>https://nevkontakte.com/2010/Battle-plan-API-the-Battle-for-the-future.html</link>
      <pubDate>Mon, 07 Jun 2010 19:54:01 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Battle-plan-API-the-Battle-for-the-future.html</guid>
      <description>&lt;p&gt;Публикую перевод статьи &lt;a href="http://www.optimizeandprophesize.com/jonathan_mendezs_blog/2009/06/api-battle-plans-fighting-for-next.html"&gt;API Battle Plans: Fighting for Next&lt;/a&gt;, давным-давно сделанный мною в рамках акции &lt;a href="http://homelerss.ru/post/top-50-seo-posts-of-the-year-2009.html"&gt;50 лучших SEO-постов 2009 года&lt;/a&gt; и благополуно забытый в пылу учебы и работы :) Только чейчас наткнулся на него в Гуглодоках, когда искал кое-какие материалы по одной интересующей меня теме. Тем не менее, лучше уж поздно, чем никогда, посему публикую.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="план-битвы-api---сражение-за-будущее"&gt;План битвы API - Сражение за будущее&lt;/h2&gt;
&lt;p&gt;В наши дни API достигли такого уровня зрелости, что все три ключевые компоненты Веба - контент, службы и данные можно легко получить с их помощью. Результатом этого процесса стало ничто иное как рождение новго Веба. Более умного Веба, предоставляющего более релевантную информацию, более удобного и дающего более широкие возможности получения прибыли. После того, как стали очевидны преимущества этого подхода, у современных компаний не осталось иного выбора, кроме как поддерживать суперструктуру API, столпами которой являются контент, сервисы, разработка и аналитика.&lt;/p&gt;
&lt;p&gt;Но с чего дальновидному бизнесу начинать?&lt;/p&gt;
&lt;p&gt;Несмотря на то, что API уже довольно давно применяются для доступа к информации, мы все еще находимся в состоянии зарождения API для контента и сервисов. Удивительно, но мы находимся в еще более зачаточном состоянии в отношении применения API для оптимизации цифровых носителей и представления информации. Вы можете себе представить полностью динамическую Сеть? Я знаю, это может показаться непростым, имея за плечами опыт мешапов, которые мы оставляем позади вместе с остальной эпохой Веб 2.0.&lt;/p&gt;
&lt;p&gt;Окружающий нас Веб требует применения стратегий, распространяющих вездесущность динамического Веба, и API являются ключом к достижению этого. Так же будет играть важную роль и Семантический Веб (или более новый термин «связанные данные»). Ниже я постараюсь как можно яснее изложить свои мысли о том, как стартапы, прежние цифровой и традиционный бизнес могут применять стратегию API для своего дела. Так же я с удовольствием выслушаю ваше мнение по этому вопросу в комментариях. Единственное, что я абсолютно точно знаю — это какими последствиями грозит отсутствие подробного плана битвы для тех, кому придется иметь с этим дело.&lt;/p&gt;
&lt;h3 id="bitly-модель-армии"&gt;Bit.ly: Модель армии&lt;/h3&gt;
&lt;p&gt;Существует много подходов к использованию общедоступных источников контента и данных, но все равно до тех пор пока вы не создадите нечто, что объединяет ключевые компоненты API (контент, сервисы, разработка и аналитика), вы всегда будете уязвимы или будете проигрывать конкурентам. Хорошим примером этому может служить сокращение ссылок.&lt;/p&gt;
&lt;p&gt;Существует не так уж и много сервисов сокращения ссылок и из них лишь bit.ly объединяет контент (страница, на которую он ссылается), сервис (сокращение ссылок), разработку (платформа Calais) и аналитику (статистика кликов). Вместе все компоненты дают нечто большее, чем по отдельности, но даже сами по себе они могут быть полезны в различных случаях, в зависимости от целей пользователя (и направления развития бизнеса bit.ly). Этот многоуровневый подход и стал причиной прорыва, совершенного bit.ly, и того, почему это хороший пример для изучения, как создавать решения на базе API.&lt;/p&gt;
&lt;p&gt;Так что давайте вместе углубимся в каждый из компонентов API взаимодействия с Вебом и посмотрим, что мы можем из этого почерпнуть.&lt;/p&gt;
&lt;h3 id="ксра-cuda-стек-api"&gt;КСРА (CUDA): Стек API.&lt;/h3&gt;
&lt;p&gt;Сегодня все любят говорить о разнообразных стеках, поэтому я представлю план битвы за API в вашей организации именно в этом стиле.&lt;/p&gt;
&lt;p&gt;Я называю это КСРА (CUDA) потому что&amp;hellip; просто потому что я маркетолог и это звучит круто.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Парочка хабрапостов.</title>
      <link>https://nevkontakte.com/2010/A-couple-of-khabrapost.html</link>
      <pubDate>Sun, 30 May 2010 12:59:10 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/A-couple-of-khabrapost.html</guid>
      <description>&lt;p&gt;Хочу поделиться ссылками на пару моих статей на хабре, одна из которых была написана в апреле, потом неизвестно как попала в черновики и сегодня была возврращена на место. Вторая была написана вчера по мотивам возникшей у меня проблемы.&lt;/p&gt;
&lt;h3 id="7-способов-определить-хостера-сайта"&gt;7 способов определить хостера сайта&lt;/h3&gt;
&lt;p&gt;Периодически перед многими из вебмастеров возникает задача определить хостера, у которого живет тот или иной сайт. Мотивация для этого бывает самая разная, как простое любопытство, так и желание поселиться по соседству на хорошем и стабильном хостинге или наоборот не вляпаться в такое соседство. В этом посте я приведу несколько известных мне методов с их достоинствами и недостатками.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;NS-сервера домена&lt;/li&gt;
&lt;li&gt;Страницы ошибок 403/404&lt;/li&gt;
&lt;li&gt;Виртуалхост по умолчанию&lt;/li&gt;
&lt;li&gt;Reverse DNS lookup&lt;/li&gt;
&lt;li&gt;Traceroute&lt;/li&gt;
&lt;li&gt;Whois&lt;/li&gt;
&lt;li&gt;Сигнатура SMTP сервера&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://habrahabr.ru/blogs/hosting/91278/"&gt;Статья целиком.&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="добавление-поддержки-php-52-в-xampp"&gt;Добавление поддержки PHP 5.2 в XAMPP&lt;/h3&gt;
&lt;p&gt;&lt;img src="http://lh4.ggpht.com/_NLuvnV5o9tk/TAEfoi3ECYI/AAAAAAAAABM/ZOMcrUpfXuc/3366.gif" alt=""&gt;&lt;a href="http://www.apachefriends.org/ru/xampp.html"&gt;XAMPP&lt;/a&gt; — это связка PHP-Apache-MySQL, а так же Perl, ProFTPd, phpMyAdmin и много другого в одной готовой связке. У него есть свои плюсы и свои минусы, и информацией по исправлению одного из таких недостатков я хочу поделиться в этом посте.&lt;/p&gt;
&lt;p&gt;«Недостаток» состоит в том, что разработчики стараются включить в паке скорее свежие, нежли стабильные версии софта, которые порою еще не поддерживаются сторонними расширениями. Для меня камнем преткновения стали PHP 5.3, присутствующий в XAMPP с версии 1.7.2, и Zend Optimizer, которого для PHP 5.3 еще нет (хотя и давно &lt;a href="http://forums.zend.com/viewtopic.php?p=4985#p4985"&gt;обещали&lt;/a&gt;).
&lt;a href="http://habrahabr.ru/blogs/php/94908/"&gt;Статья целиком.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Кстати, про XAMPP я уже дважды писал у себя в блоге, вот эти статьи:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/2008/Installing-the-Zend-Optimizer-on-XAMPP-under-Linux.html"&gt;Установка Zend Optimizer на XAMPP под Linux&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/2008/LAMPP-is-run-by-a-normal-user.html"&gt;LAMPP - запуск от обычного пользователя.&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;### Приглашаю&lt;/p&gt;
&lt;p&gt;Всех, кому интересны мои статьи, так же подписываться на &lt;a href="https://habr.com/ru/users/nevkontakte/posts/"&gt;мой канал&lt;/a&gt; на хабре или просто заглядывать в &lt;a href="https://habr.com/ru/users/nevkontakte/posts/"&gt;хабрацентр&lt;/a&gt;. BTW, инвайтов нет, ибо карма пока тощая.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обход AdBlock</title>
      <link>https://nevkontakte.com/2010/Bypass-AdBlock.html</link>
      <pubDate>Tue, 18 May 2010 10:18:07 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Bypass-AdBlock.html</guid>
      <description>&lt;p&gt;На досуге добавляя в фильтры AdBlock очередную баннерную сеть, подумал такую очевидную мысль: все популярные и как бы доходные рекламные сети, включая столь любимые публикой тизеры, уже давно добавлены во все возможные баннерорезки, коих уже немало. Одно только расширение &lt;a href="https://addons.mozilla.org/ru/firefox/addon/1865/"&gt;AdBlock&lt;/a&gt; для Firefox, которым я успешно пользуюсь, имеет &lt;strong&gt;813599&lt;/strong&gt; загрузок в неделю и является самым популярным расширением. Кроме того, во многих популярных виндоовых фаерволах, включая Outpost,  уже давно есть встроенные баннерорезки.&lt;/p&gt;
&lt;p&gt;Оценили насколько сужается аудитория и потенциальная прибыль?&lt;/p&gt;
&lt;p&gt;У алчных манимейкеров должен возникнуть вопрос: как бабки вернуть и к себе в карман перенаправить. Вывод напрашивается из самого принципа фильтрации: В первую очередь баннерорезки пытаются срезать скрипты и картинки по URL. При этом в первую очередь под нож идут домены известных сетей, а потом характерные маски URL типа /banner/* или *banner.* Соответственно решать проблему нужно подменой адресов скриптов баннерных систем. Сделать это легко при помощи проксирущих скриптов на своем хостинге. Если при этом имя скрипту дать не /ad/banner.js.php, то баннерорезка скорее всего его пропустит =&amp;gt; PROFIT!&lt;/p&gt;
&lt;p&gt;Но тут сразу возникает одно &amp;ldquo;но&amp;rdquo;: большинство рекламных сетей категорически запрещают модифицировать свой код. Пресловутый AdSense за это лихо отправляет в баню аккаунты с денежками на нем. Соответственно, попытайся вебмастер повысить прибыль, он автоматически встает на грань бана и потери оной прибыли.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Отсюда встает вопрос:&lt;/strong&gt; &lt;del&gt;тянуться за журавлем&lt;/del&gt; обходить баннерорезки или не рисковать всем доходом? Каково ваше мнение?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;И еще один вопрос:&lt;/strong&gt; какие сети не запрещают модификацию их кода?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;И для любителей последний, каверзный вопрос:&lt;/strong&gt; какого это с этической точки зрения? Представьте, что в один прекрасныый момент все ваши любимые сайты, блоги и форумы расцветут рекламой, с которой ваша баннерорезка не будет в силах справиться. Каково?&lt;/p&gt;
&lt;p&gt;Ваши ответы приветствуются в комментариях.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Заметка на манжетах</title>
      <link>https://nevkontakte.com/2010/Note-cuffs.html</link>
      <pubDate>Sun, 25 Apr 2010 11:35:26 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Note-cuffs.html</guid>
      <description>&lt;p&gt;Я должен был написать этот пост еще очень давно, три недели назад. Но все как-то руки не доходили. Теперь наконец дошли. Моя любимая девушка сделала мне вот такой замечательный подарок на День Вебмастера:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/100_1513.JPG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_1513.JPG" alt="100_1513.JPG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/100_1514.JPG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_1514.JPG" alt="100_1514.JPG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/100_1515.JPG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_1515.JPG" alt="100_1515.JPG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/100_1516.JPG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/100_1516.JPG" alt="100_1516.JPG"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;А вот и прототип:&lt;/p&gt;
&lt;p&gt;&lt;img src="http://img1.liveinternet.ru/images/attach/b/3/26/72/26072450_priznak_koshkosti_87.jpg" alt=""&gt;Кстати, всем &lt;a href="http://www.liveinternet.ru/community/1148378/post90969774/"&gt;рекомендую&lt;/a&gt;. Кто держит (держал) кошку, тот поймет :-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Opera Mini для iPhone</title>
      <link>https://nevkontakte.com/2010/Opera-Mini-for-iPhone.html</link>
      <pubDate>Tue, 13 Apr 2010 20:58:21 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Opera-Mini-for-iPhone.html</guid>
      <description>&lt;p&gt;Свершилось!&lt;/p&gt;
&lt;h1 id="opera-mini-для-iphone-уже-в-appstore"&gt;Opera Mini для iPhone уже в &lt;a href="http://itunes.apple.com/ru/app/opera-mini-web-browser/id363729560?mt=8"&gt;AppStore&lt;/a&gt;!&lt;/h1&gt;
&lt;p&gt;И она работает!&lt;/p&gt;
&lt;p&gt;Общее впечатление - быстрая, но еще шероховато. Есть небольшие глюки с рендерингом страниц и обработкой форм, но в основном юзабельно. Галерея скриншотов,в котороя я постарался отразить все асперты работы с новым браузером - под катом.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/IMG_0180.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0180.PNG" alt="IMG_0180.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0181.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0181.PNG" alt="IMG_0181.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0182.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0182.PNG" alt="IMG_0182.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0183.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0183.PNG" alt="IMG_0183.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0184.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0184.PNG" alt="IMG_0184.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0187.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0187.PNG" alt="IMG_0187.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0188.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0188.PNG" alt="IMG_0188.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0189.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0189.PNG" alt="IMG_0189.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0191.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0191.PNG" alt="IMG_0191.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0192.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0192.PNG" alt="IMG_0192.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0193.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0193.PNG" alt="IMG_0193.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0194.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0194.PNG" alt="IMG_0194.PNG"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/IMG_0195.PNG"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/IMG_0195.PNG" alt="IMG_0195.PNG"&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>lint, large file, _FILE_OFFSET_BITS 64, problem, solaris, llib-lc</title>
      <link>https://nevkontakte.com/2010/lint-large-file-FILE-OFFSET-BITS-64-problem-solaris-llib-lc.html</link>
      <pubDate>Mon, 29 Mar 2010 21:17:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/lint-large-file-FILE-OFFSET-BITS-64-problem-solaris-llib-lc.html</guid>
      <description>&lt;h2 id="achtung"&gt;Achtung!&lt;/h2&gt;
&lt;p&gt;If you are using long file (more than 4Gb) support for C standart library (via defining _FILE_OFFSET_BITS 64 macro or something else) and lint shows you errors like this:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(88) warning: constant in conditional context

argument unused in function
    (18) sig in sighandler

value type declared inconsistently
    lseek               llib-lc:unistd.h(396) long () :: unistd.h(396) long long ()
    tell                llib-lc:unistd.h(515) long () :: unistd.h(515) long long ()
    ftello              llib-lc:stdio.h(319) long () :: stdio.h(319) long long ()

function returns value which is always ignored
    fflush              fprintf             printf              fwrite
    signal              alarm               lseek64

function argument ( number ) declared inconsistently
    ftruncate (arg 2)   llib-lc:unistd.h(320) long  :: unistd.h(320) long long
    lockf (arg 3)       llib-lc:unistd.h(394) long  :: unistd.h(394) long long
    lseek (arg 2)       llib-lc:unistd.h(396) long  :: unistd.h(396) long long
    pread (arg 4)       llib-lc:unistd.h(410) long  :: unistd.h(410) long long
    pwrite (arg 4)      llib-lc:unistd.h(434) long  :: unistd.h(434) long long
    truncate (arg 2)    llib-lc:unistd.h(520) long  :: unistd.h(520) long long
    fseeko (arg 2)      llib-lc:stdio.h(318) long  :: stdio.h(318) long long

declared global, could be static
    min                 main.c(13)
    sighandler          main.c(18)
    fp                  main.c(11)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;hellip;Don&amp;rsquo;t panic! It&amp;rsquo;s &lt;strong&gt;known bug&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The&lt;/em&gt;&lt;strong&gt;lint&lt;/strong&gt;&lt;em&gt;(1B) utility will generate spurious error messages when &lt;strong&gt;_FILE_OFFSET_BITS&lt;/strong&gt; is set to 64. This is because the binary &lt;strong&gt;libc&lt;/strong&gt; lint library, &lt;strong&gt;/usr/lib/llib-lc.ln&lt;/strong&gt;, is compiled only for the standard interfaces, not with &lt;strong&gt;_FILE_OFFSET_BITS&lt;/strong&gt; set to 64. This deficiency hampers static error-checking for programs compiled in the large file compilation environment. (&lt;a href="http://docs.sun.com/app/docs/doc/816-0220/6m6nkorq2?a=view"&gt;Source&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Damn it, I lost 3 hours before I found it.&lt;/p&gt;
&lt;h2 id="внимание"&gt;Внимание!&lt;/h2&gt;
&lt;p&gt;Если вы используете в своей программе поддержку больших файлов (больше 4 Гб) в стандартной библиотеке C (с помощью задания макроса _FILE_OFFSET_BITS 64 или как-то иначе) и lint выдает вам ошибки вроде этих:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;(88) warning: constant in conditional context

argument unused in function
    (18) sig in sighandler

value type declared inconsistently
    lseek               llib-lc:unistd.h(396) long () :: unistd.h(396) long long ()
    tell                llib-lc:unistd.h(515) long () :: unistd.h(515) long long ()
    ftello              llib-lc:stdio.h(319) long () :: stdio.h(319) long long ()

function returns value which is always ignored
    fflush              fprintf             printf              fwrite
    signal              alarm               lseek64

function argument ( number ) declared inconsistently
    ftruncate (arg 2)   llib-lc:unistd.h(320) long  :: unistd.h(320) long long
    lockf (arg 3)       llib-lc:unistd.h(394) long  :: unistd.h(394) long long
    lseek (arg 2)       llib-lc:unistd.h(396) long  :: unistd.h(396) long long
    pread (arg 4)       llib-lc:unistd.h(410) long  :: unistd.h(410) long long
    pwrite (arg 4)      llib-lc:unistd.h(434) long  :: unistd.h(434) long long
    truncate (arg 2)    llib-lc:unistd.h(520) long  :: unistd.h(520) long long
    fseeko (arg 2)      llib-lc:stdio.h(318) long  :: stdio.h(318) long long

declared global, could be static
    min                 main.c(13)
    sighandler          main.c(18)
    fp                  main.c(11)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&amp;hellip;Не пугайтесь! Это известный баг:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The&lt;/em&gt;&lt;strong&gt;lint&lt;/strong&gt;&lt;em&gt;(1B) utility will generate spurious error messages when &lt;strong&gt;_FILE_OFFSET_BITS&lt;/strong&gt; is set to 64. This is because the binary &lt;strong&gt;libc&lt;/strong&gt; lint library, &lt;strong&gt;/usr/lib/llib-lc.ln&lt;/strong&gt;, is compiled only for the standard interfaces, not with &lt;strong&gt;_FILE_OFFSET_BITS&lt;/strong&gt; set to 64. This deficiency hampers static error-checking for programs compiled in the large file compilation environment. (&lt;a href="http://docs.sun.com/app/docs/doc/816-0220/6m6nkorq2?a=view"&gt;Источник&lt;/a&gt;)&lt;/em&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Этот пост посвящается таким же несчастным, как я, которые пытаются нагуглить, как поправить эти ошибки. Мне понадобилось чуть больше 3х часов, чтобы найти эту маленькую заметочку. В моем случае это был вопрос &amp;ldquo;на засыпку&amp;rdquo; - не ответил бы, не приняли бы лабу. Черт возьми, самое обидное, что к самой лабе это не имеет отношения, чисто повозить мордой об стол.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Simple AJAX Long Request</title>
      <link>https://nevkontakte.com/2010/Simple-AJAX-Long-Request.html</link>
      <pubDate>Tue, 23 Mar 2010 23:03:40 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Simple-AJAX-Long-Request.html</guid>
      <description>&lt;p&gt;Для одного из моих проектов, над которым я сейчас активно работаю понадобилось сделать возможность выполнения длинных запросов с &amp;ldquo;обратной связью&amp;rdquo;, т. е. с возможностью отсылки информации о ходе выполнения скрипта. Поскольку подключать к проекту какого-нибудь монстра типа JQuery ради одной этой возможности я посчитал нецелесообразным, решено было написать свою простую библиотеку, выполняющую эту функцию. результат я представляю вам в этом посте.&lt;/p&gt;
&lt;h2 id="simple-ajax-long-request-salr-10"&gt;Simple AJAX Long Request (SALR) 1.0&lt;/h2&gt;
&lt;h3 id="возможности"&gt;Возможности:&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;Отправка GET запросов с произвольными данными, переданными в виде хеша.&lt;/li&gt;
&lt;li&gt;Отправка форм POST и GET запросами.&lt;/li&gt;
&lt;li&gt;Автоматическая конвертация PHP-типов в соответствующие типы объектов JS.&lt;/li&gt;
&lt;li&gt;Глобальный доступ к PHP API благодаря реализации в виде статического класса.&lt;/li&gt;
&lt;li&gt;Перехват многих фатальных ошибок (см. &lt;a href="http://dklab.ru/chicken/nablas/45.html"&gt;http://dklab.ru/chicken/nablas/45.html&lt;/a&gt;)&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;p&gt;Совместимость:&lt;/p&gt;
&lt;p&gt;Протестирован в Firefox 3.5, Opera 10.10, Konqueror 4.3.5r0 и IE 7. Теоретически должен работать и в остальных браузерах, включая IE6 (а может и 5) и WebKit-based браузерах.&lt;/p&gt;
&lt;h3 id="javascript-api"&gt;JavaScript API&lt;/h3&gt;
&lt;p&gt;После подключения к веб-странице файла longreq.js становится доступен объект lreq, через который и происходит взаимодействие с библиотекой.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;lreq.send(url, data, callback)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Отправляет запрос на адрес url с данными data с переданной функцией callback в качестве обработчика.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Параметры:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;url - строка. Адрес скрипта, на который следует отправить запрос.&lt;/p&gt;
&lt;p&gt;data - хэш. Хэш с GET-параметрами, передаваемыми в запросе. Преобразование ключей и значений производится вызовом метода .toString()&lt;/p&gt;
&lt;p&gt;callback - функция. Функция, которая будет вызываться всякий раз, когда приходят данные с сервера. Подробное описание функции и аргументов приведено ниже.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;lreq.sendForm(url, form, callback)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Отправляет форму form на адрес url с переданной функцией callback в качестве обработчика.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Параметры:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;url - строка. Адрес скрипта, на который следует отправить запрос.&lt;/p&gt;
&lt;p&gt;form - DOM-узел. Объект формы, которая будет отправлена.&lt;/p&gt;
&lt;p&gt;callback - функция. Функция, которая будет вызываться всякий раз, когда приходят данные с сервера. Подробное описание функции и аргументов приведено ниже.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Замечание:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Форма может по умолчанию иметь обработчик, отличный от указанного в параметре url и он не будет потерян при отправке формы с помощью SALR.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Функция callback.&lt;/strong&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;function callback(mode, jaData, htmlData)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Параметры:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;mode - режим вызова функции.&lt;/p&gt;
&lt;p&gt;0, если это первый вызов, произведенный функцией send() на стороне сервера&lt;/p&gt;
&lt;p&gt;1, если это не первый вызов, произведенный функцией send() на стороне сервера&lt;/p&gt;
&lt;p&gt;2, если это вызов во время завершения работы скрипта.&lt;/p&gt;
&lt;p&gt;jaData - это данные, переданные в качестве аргумента функции LongRequest::send(). При mode == 2 всегда null&lt;/p&gt;
&lt;p&gt;htmlData - это все данные, выведенные скриптом в браузер в обход функции LongRequest::send(). При моде != 2 всегда null&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Замечание:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;callback вызывается всегда хотя бы один раз когда серверный скрипт завершает работу с mode, равным 2.&lt;/p&gt;
&lt;h3 id="php-api"&gt;PHP API&lt;/h3&gt;
&lt;p&gt;После подключения файла longreq.php становится доступен статический класс LongRequest, через который происходит взаимодействие с библиотекой.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;LongRequest::init()
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Инициализирует работу с библиотекой, включает буферизацию вывода и пытается снять ограничение по времени выполнения скрипта.&lt;/p&gt;
&lt;p&gt;Весь вывод, произведенный с этого момента и до завершения работы скрипта будет отправлен непосредственно перед завершением скрипта и передан в качестве аргумента htmlData в callback-функцию.&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Longrequest::send($data)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Отправляет произвольные данные в браузер. Данные будут переданы callback-функции в качестве аргумента jsData.&lt;/p&gt;
&lt;p&gt;Данные приводятся к JS-типам следующим образом:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;null - в null&lt;/li&gt;
&lt;li&gt;Число - в число.&lt;/li&gt;
&lt;li&gt;Строка - в строку.&lt;/li&gt;
&lt;li&gt;Массив - в хэш, все его элементы будут рекурсивно преобразованы согласно этим же правилам.&lt;/li&gt;
&lt;li&gt;Все прочее (объекты) - сериализованы функцией serialize() и представлены как строка.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Параметры:&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Молниеносная верстка с помощью Zen Coding</title>
      <link>https://nevkontakte.com/2010/Lightning-layout-using-Zen-Coding.html</link>
      <pubDate>Sat, 20 Mar 2010 20:04:27 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Lightning-layout-using-Zen-Coding.html</guid>
      <description>&lt;p&gt;Всем нам приходится писать html-код, кому-то больше, кому-то меньше.&lt;/p&gt;
&lt;p&gt;В частности, у меня написание шаблонов для моих движков зачастую занимает до трети времени от разработки. Главная причина тому - сравнительная многословность html, да и css. Так бы я и мучился, если бы очередной раз не наткнулся на статью по &lt;a href="http://code.google.com/p/zen-coding/"&gt;Zen Coding&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="как-постичь-дзен"&gt;Как постичь Дзен?&lt;/h3&gt;
&lt;p&gt;Если кратко, то Zen Coding - это целое семейство плагинов к разным редакторам, позволяющее писать сокращенный код, который потом будет автоматически развернут с полную конструкцию. Вот вам сразу пример:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;div#page&amp;gt;h3.title+ul.menu&amp;gt;li.item*3&amp;gt;a
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Будет развернут в конструкцию&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;div id=&amp;#34;page&amp;#34;&amp;gt;   &amp;lt;h3 class=&amp;#34;title&amp;#34;&amp;gt;&amp;lt;/h3&amp;gt;   &amp;lt;ul class=&amp;#34;menu&amp;#34;&amp;gt;      &amp;lt;li class=&amp;#34;item&amp;#34;&amp;gt;&amp;lt;a href=&amp;#34;#&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;      &amp;lt;li class=&amp;#34;item&amp;#34;&amp;gt;&amp;lt;a href=&amp;#34;#&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;      &amp;lt;li class=&amp;#34;item&amp;#34;&amp;gt;&amp;lt;a href=&amp;#34;#&amp;#34;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;   &amp;lt;/ul&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Выигрыш в количестве набираемых символов примерно четырехкратный. Впечатляет, не так ли? Правда на первый взгляд синтаксис сокращенного варианта мутный и плохо запоминаемый, но это лишь на первый взгляд. Этот синтаксис основан на близком и родном всем нам синтаксисе css селекторов. Приведенный выше пример интерпретируется так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Внешний элемент - &lt;div&gt; с id &amp;ldquo;page&amp;rdquo; (помним, что когда мы в css хотим указать стиль для элемента по его id мы пишем [имя_тега-опционально]#id_элемента)&lt;/li&gt;
&lt;li&gt;Внутри &lt;div&gt; создаем элеменит &lt;h3&gt; с атрибутом &amp;ldquo;title&amp;rdquo;&lt;/li&gt;
&lt;li&gt;На том же уровне, что и &lt;h3&gt; (т. е. прямо внутри &lt;div&gt;) пишем тег &lt;ul&gt; с классом &amp;ldquo;menu&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Внутри &lt;ul&gt; создаем три тега &lt;li&gt; с классом &amp;ldquo;item&amp;rdquo;, внутри каждого из которых вложенный тег &lt;a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Муторным это выглядит лишь на первый взгляд. Я освоился примерно за полчаса.&lt;/p&gt;
&lt;h3 id="но-это-еще-не-все"&gt;Но это еще не все.&lt;/h3&gt;
&lt;p&gt;Zen Coding не чужды и такие простые радости, как просто сокращения имен тегов и css-свойств. Например, bq он автоматом разворачивает в&lt;/p&gt;
&lt;blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;(в &lt;strong&gt;12&lt;/strong&gt;! раз меньше символов писать руками), а bcg - в background-color. Манна небесная, это очевидно.&lt;/p&gt;
&lt;h3 id="вам-все-еще-не-завидно"&gt;Вам все еще не завидно?&lt;/h3&gt;
&lt;p&gt;Ну тогда посмотрите демонстрацию от мастера дзена :)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://vimeo.com/7405114"&gt;Zen Coding v0.5&lt;/a&gt; from &lt;a href="http://vimeo.com/user2060676"&gt;Sergey Chikuyonok&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;A new way of writing HTML code using CSS-like selector syntax. Read &lt;a href="http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/"&gt;http://www.smashingmagazine.com/2009/11/21/zen-coding-a-new-way-to-write-html-code/&lt;/a&gt; for more info.&lt;/p&gt;
&lt;h3 id="окончательно-заинтересовались"&gt;Окончательно заинтересовались?&lt;/h3&gt;
&lt;p&gt;Ну тогда вот вам серьезные ссылки, а не понты с финтифлюшками:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://pepelsbey.net/2009/04/zen-coding-concept/"&gt;Концепт Zen Coding&lt;/a&gt; - можно считать основным учебником, после прочтения уже можно приступать к использованию.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/zen-coding/wiki/ZenHTMLSelectorsRu"&gt;Селекторы и псевдонимы для плагинов Zen HTML&lt;/a&gt; - первая часть подробной библии Дзена. Полный справочник по конструкциям вроде той, которую я привел вначале.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/zen-coding/wiki/ZenHTMLElementsRu"&gt;HTML-элементы и их псевдонимы для плагинов Zen HTML&lt;/a&gt; - вторая часть оной библии. Длиннейшая скатерть с полезнейшими сокращениями. Тоже можно юзать в качестве справочника и запоминать по ходу использования.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/zen-coding/wiki/ZenCSSPropertiesRu"&gt;CSS-свойства и их псевдонимы для плагинов Zen CSS&lt;/a&gt; - третья часть. Использовать аналогично предыдущей.&lt;/li&gt;
&lt;li&gt;Домашняя страница &lt;a href="http://code.google.com/p/zen-coding/"&gt;Zen Coding&lt;/a&gt;. Самая вкусная ссылка. Там есть все вышеуказанные ссылки, а так же много других, не менее интересных, включая ссылки на добрых два десятка плагинов для разных редакторов и сред.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;### Кому говорить спасибо?&lt;/p&gt;
&lt;p&gt;За такие вещи точно надо говорить спасибо, особенно учитывая то, что это чудо мысли бесплатно и опенсорсно.&lt;/p&gt;
&lt;p&gt;Спасибо надо сказать в первую очередь &lt;a href="http://pepelsbey.net/"&gt;Вадиму Макееву&lt;/a&gt;, придумавшему концепт Zen Coding в его нынешнем виде, а так же автору ранних версий, и &lt;a href="http://chikuyonok.ru/"&gt;Сергею Чикуёнку&lt;/a&gt;, воплотившему его в коде. Так же можно сказать спасибо автору плагина для вашего любимого редактора или же вам самим, если вы таковым пожелаете стать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>О том, почему интернет-банк работает только в IE6.</title>
      <link>https://nevkontakte.com/2010/Why-Internet-Bank-only-works-in-IE6.html</link>
      <pubDate>Fri, 05 Feb 2010 17:07:09 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Why-Internet-Bank-only-works-in-IE6.html</guid>
      <description>&lt;p&gt;Много слов (в том числе нелицеприятных) было сказано о различных интернет-банках и подобных системах, отличающихся крайне кривым интерфейсом, который зачастую еще и работает только в ИЕ6. Безумное количество лучей различного содержания было послано их разработчикам и Биллу Гейтсу заодно, огромное количество нервов вымотано и, по некоторым данным, с несколькими известными дизайнерами и юзабилити-экспертами случился инфаркт.&lt;/p&gt;
&lt;p&gt;Почему все это происходит? Недавно мне представился случай увидеть это со стороны программиста. Один из моих друзей работает в компании, разрабатывающей какую-то крупную систему, помимо прочего работающую с финансами и документами. В детали я не вникал, но система здоровенная, работает над ней куча людей. Мой друг работает в этой компании Java-кодером. Сразу скажу, что программист он толковый, гораздо опытнее меня, но с вебдевом дела не имел чуть менее, чем вообще. Недавно он стукнулся ко мне в аську с вопросами по html-верстке, ибо его отрядили писать веб-интерфейс к той системе. Сами вопросы воспроизводить не вижу особого смысла, но куски кода, которые он приводил, просто выносили мозг запутанностью и &amp;ldquo;семантичностью&amp;rdquo; верстки. Часть объяснялась применением достаточно запутанного, с моей точки зрения, шаблонизатора wicket (по ощущениям - что-то вроде Smarty, только для Java). Однако были там и такие вещи, как таблица внутри и аналогичные прелести. Неудивительно, что браузер от таких финтов бесился и отрисовывал все как попало.&lt;/p&gt;
&lt;p&gt;К чему я это говорю? Да к тому, что мой друг &lt;strong&gt;Java-кодер&lt;/strong&gt;, а не верстальщик. И в его обязанности изначально не входила верстка. Однако кто-то решил сэкономить (опять кризис виноват?) и свалить на него и верстку тоже. Результат: все выглядит совсем не так, как хотелось бы, html-код до жути избыточен и трудночитаем. Думаю, что не погрешу против истины, если скажу, что зачастую та же ситуация возникала и при разработке других систем, интернет-банков и пр. А потом мы сидим на каком-нибудь хабре и поливаем говном разработчиков интернет-банка.&lt;/p&gt;
&lt;p&gt;PS. Кстати, когда я подключал себе интернет-банк в альфа-банке, мне в офисе сказали, что он работает только в IE. Однако я уже почти полгода спокойно пользуюсь им из-под Linux&amp;rsquo;a в Firefox. Так что еще не все потеряно :-)&lt;/p&gt;
&lt;p&gt;PPS. Кто-то ищет &lt;a href="http://www.host-food.ru/"&gt;недорогой хостинг&lt;/a&gt;, кто-то говорит, что это миф, а между тем он таки существует :-)&lt;/p&gt;
&lt;p&gt;PPPPS. Что-то много сегодня постскриптумов получилось :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Coffiem lilsum dolor sit amet</title>
      <link>https://nevkontakte.com/2010/Coffiem-lilsum-dolor-sit-amet.html</link>
      <pubDate>Wed, 20 Jan 2010 20:55:55 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Coffiem-lilsum-dolor-sit-amet.html</guid>
      <description>&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis nec metus at arcu commodo aliquam a vitae sapien. Donec ipsum massa, pellentesque et pharetra a, commodo non turpis? Quisque ultricies pellentesque augue, at mollis arcu vestibulum ac. Integer hendrerit rhoncus lectus. Aenean mauris dui, faucibus suscipit semper nec, eleifend ac lacus. In blandit eros ut libero dignissim vulputate tempus enim lobortis? Curabitur lorem urna, gravida quis pretium ac; porttitor vitae ante. Donec tincidunt purus non libero scelerisque consectetur. Donec lobortis sapien eget tellus vulputate facilisis ut eget justo? Nunc gravida porttitor quam ac pellentesque. Donec at turpis sit amet ante lobortis mollis eget quis dolor? Pellentesque quis mi sit amet libero suscipit accumsan quis a sem. Sed bibendum risus et sapien pretium in mollis tellus posuere? Nulla mi massa, tristique sodales tincidunt quis, posuere in nulla.&lt;/p&gt;
&lt;p&gt;Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Donec porttitor semper iaculis. Vivamus facilisis dignissim venenatis. Aliquam varius auctor vestibulum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Nullam tempor semper felis, eget bibendum magna faucibus eget. Vestibulum malesuada odio ut nunc mattis vel viverra urna mollis. Nam sed lorem et orci convallis sollicitudin id ut nibh. Donec sed est ac lacus ullamcorper vulputate auctor a mi. Pellentesque feugiat, dolor sed tincidunt ultrices, enim felis semper tellus, non ultricies neque felis at mi. Quisque posuere tortor ac nisl molestie et volutpat lectus gravida. Phasellus eu erat in nunc consectetur lacinia eu sed erat. Integer laoreet viverra velit, non placerat dolor pellentesque ac. In eu risus nulla, ut pharetra lorem. Cras nec nisl ut urna cursus viverra nec sit amet felis. Sed id quam quis mi tincidunt lobortis suscipit luctus diam! Nulla ac leo sed felis dapibus porta quis ut ante! Proin sit amet velit nec neque facilisis adipiscing non at metus.&lt;/p&gt;
&lt;p&gt;In porttitor, nisi ac pulvinar lacinia, nisl risus rutrum elit, eu dapibus enim lorem ac justo. In ac tortor quis nunc imperdiet sagittis. Integer id risus leo. Mauris ac est enim! Etiam velit justo, vehicula in commodo nec; aliquam quis sem. Donec porttitor, tortor ac luctus ornare, eros quam adipiscing lacus, sit amet cursus dolor elit at metus! Proin sit amet ligula arcu, sed lobortis enim. Suspendisse potenti. Sed ac neque quam, non egestas turpis. Donec vel porttitor nulla. Sed aliquam rutrum iaculis. Nunc quis lacinia justo. Cras felis nibh; tempor ac luctus sed, faucibus eu est. Quisque porttitor tempus felis vel venenatis.&lt;/p&gt;
&lt;p&gt;Pellentesque at tellus dui, ut mattis tellus? Donec in auctor nibh! Suspendisse dignissim commodo enim sit amet fermentum. Fusce quis magna non mauris aliquam varius. Curabitur laoreet ligula et lacus hendrerit ut dapibus velit rutrum? Aenean quam metus, tincidunt sed posuere at, posuere ut neque. А внимательным - подарок. Первым трем, кто напишет мне на &lt;img src="https://nevkontakte.com/files/email.gif" alt=""&gt; я подарю &lt;a href="https://nevkontakte.com/2009/Scripts-Google-Cache-Dumper-Bing-Cache-Dumper.html"&gt;Google Cache Dumper&lt;/a&gt;. Просто ради позитива. Fusce bibendum sem sit amet ante euismod eleifend placerat elit imperdiet. Proin ornare faucibus varius. Donec non cursus eros. Aenean facilisis, massa vel consequat pharetra, nulla libero hendrerit nibh, id mollis massa diam vitae sem.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Заметки на манжетах #2</title>
      <link>https://nevkontakte.com/2010/Notes-on-the-cuffs-2.html</link>
      <pubDate>Fri, 15 Jan 2010 17:56:27 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Notes-on-the-cuffs-2.html</guid>
      <description>&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Как обычно на сессии, в голове есть масса хороших идей, но из-за необходимости готовиться к экзаменам совсем нет времени на реализацию. Пора составлять список дел, которые надо будет переделать за неделю каникул после нее.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Меня ужасает монструозность Wordpress. Если версии 2.9 в стандартной конфигурации не всегда хватает 32 мб памяти, то подумать только, сколько оно жрет с приличным набором плагинов. И, честно говоря, я абсолютно не понимаю, какие такие фитчи в нем есть, что они требуют столько памяти. Далеко не всякий &lt;a href="http://www.host-food.ru/"&gt;PHP хостинг&lt;/a&gt; позволяет такое безобразие у себя запускать и я с ними согласен. Вы все еще хотите &lt;a href="http://seotalk.by/wordpress"&gt;скачать wordpress&lt;/a&gt;?&lt;/p&gt;
&lt;p&gt;Если вспомнить историю, то увидим,  что пару лет назад нормой было 8 мб памяти на поток. Потом вышел WP 2.4 (если не вру) и phpBB3. Нормой стало 16 мб. Потом вышел WP 2.8 и народ стал кидаться дерьмом в тех хостеров, у кого был лимит ниже 32 мб. С WP 2.9 придется, видимо, всем поднимать лимит еще до 48. Более того, очевидно, что чем дальше, тем быстрее растет потребление памяти в WP, но значимых фитч не добавляется.&lt;/p&gt;
&lt;p&gt;Ей, разработчики, вы совсем офигели? Ну не пишите же говно, побойтесь бога! Для БЛОГА не нужно 48 мб памяти!&lt;/p&gt;
&lt;p&gt;Боюсь себе представить WP 3.0&amp;hellip;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://homelerss.ru/post/friend-feed-burner-haos.html"&gt;Бездомный Бродяга&lt;/a&gt; предлагает устроить флешмоб по накрутке фидбернера френдфидом, чтобы дискредитировать последний. Будет весело. Присоединяйтесь!&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;del&gt;Челябинские&lt;/del&gt; Липетские автобусы настолько суровы, что &lt;a href="http://habrahabr.ru/blogs/infosecurity/80842/"&gt;посылают пассажиров на хуй&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;UPD.&lt;/strong&gt; Обнаружил, что на антикапче случился апдейт системы и автоматическая &lt;a href="https://web.archive.org/web/20091229140218/http://nevkontakte.org.ru/anticaptcha-invite"&gt;выдача инвайтов&lt;/a&gt; сломалась. Починил.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Удачной пятницы!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пишем простой авторегистратор. Часть 6 - пишем для RegSubmitter.</title>
      <link>https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html</link>
      <pubDate>Mon, 11 Jan 2010 21:38:32 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html</guid>
      <description>&lt;h3 id="содержание"&gt;Содержание&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;Инструментарий&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;Основы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html"&gt;Боремся с капчей&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;Подключаем антикапчу&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html"&gt;Подтверждение по email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html"&gt;&lt;strong&gt;Пишем модуль для RegSubmitter&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В этой заключительной статье я покажу, как можно легко и аккуратно реализовать материал, изложенный в предыдущих статьях, при помощи &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="введение-в-предмет"&gt;Введение в предмет.&lt;/h3&gt;
&lt;p&gt;RegSubmitter изначально задумывался мною как гибкий фреймворк для быстрого написания авторегистраторов. Поэтому в отличие от предыдущих разов, вам не надо будет задумываться обо всякой рутине вроде считывания данных из файла/запроса, заморачиваться с одновременной регистрацией нескольких аккаунтов и т.д. Вы напишете логику, а RegSubmitter сделает все остальное.&lt;/p&gt;
&lt;p&gt;Сразу скажу, что в этой статье я буду пользоваться версией RegSubmitter 1.4.0, которая пока официально не зарелизена, но уже скоро будет :) Впрочем, все нижеизложенное будет работать и в 1.3.6, за исключением подтверждения по email.&lt;/p&gt;
&lt;h3 id="структура-модуля"&gt;Структура модуля&lt;/h3&gt;
&lt;p&gt;Прежде всего, отмечу, что в RS есть два типа модулей: простые и &amp;ldquo;универсальные&amp;rdquo;. Простые работают только с одним конкретным сервисом, и &amp;ldquo;универсальные&amp;rdquo; могут работать со многими сайтами на одинаковых движках. В рамках этой статьи мы каснемся только простых модулей и будем рассматривать все на примере &lt;a href="http://memori.ru"&gt;memori.ru&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Модули в RegSubmitter разбиваются по категориям, и располагаются в папке modules/Category_Name/Module_ID/module_ID.php. Здесь module_ID - это буквенно-цифровой идентификатор модуля, который должен быть уникален для каждого модуля (впрочем, это не означает, что он должен быть нечитаем ;) ). Например, модуль, работающий с сервисом Memori.ru находится по адресу /modules/Rus/Memori/Memori.php.&lt;/p&gt;
&lt;p&gt;В этом файле должен находиться класс с именем, совпадающим с Module_ID, и при этом унаследованным от класса Module.&lt;/p&gt;
&lt;h3 id="код-модуля"&gt;Код модуля&lt;/h3&gt;
&lt;p&gt;Ниже я приведу полный код модуля с комментариями, но перед этим сделаю несколько заметок.&lt;/p&gt;
&lt;p&gt;Первая состоит в том, что в начале класса идут параметры, задающие свойства модуля и то, как он будет обрабатываться RegSubmitter-ом. Во-вторых, я не буду отдельно описывать API RegSubmitter&amp;rsquo;a, но по ходу дела буду пояснять назначение тех или иных функций и их параметров.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;Memori&lt;/span&gt; &lt;span class="k"&gt;extends&lt;/span&gt; &lt;span class="nx"&gt;Module&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="c1"&gt;// Параметры модуля
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Memori&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Имя сервиса, отображаемое пользователю
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Memori&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Все тот же Module_ID
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;http://memori.ru/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// URL сервиса. Настоятельно рекомендую указывать правильный :-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$icon&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;memori.png&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Имя иконки. Должна лежать в одной папке с файлом модуля.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$notice&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Дополнительная информация, которую мы желаем сообщить пользователям
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$email_confirm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Требуется ли подтверждение по email
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$core_version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Версия ядра, на которую рассчитан модуль, необходимо для проверки совместимости. Нынешняя, как не трудно догадаться - 3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;var&lt;/span&gt; &lt;span class="nv"&gt;$encoding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cp1251&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Кодировка сайта.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Функция, ответственная за загрузку капчи.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Если ввод капчи не требуется, возвращает null. В противном случае возвращает массив данных,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * которые понадобятся при отправке формы, в т. ч. имя временного файла с кукисами, различные токены и т. п.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Обязательно в массиве должен быть элемент image_file, чтобы RegSubmitter мог отобразить капчу пользователю для ввода.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;GetForm&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Запрашиваем страницу регистрации.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://memori.ru/registration/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Извлекаем токен
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;lt;input type=&amp;#34;hidden&amp;#34; name=&amp;#34;token&amp;#34; value=&amp;#34;([0-9a-z]+)&amp;#34; /&amp;gt;#is&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$page&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Ноу-хау: допываем картинку из рекапчи
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$js&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;http://api.recaptcha.net/challenge?k=6LfV6wgAAAAAAF327mU7j7lzG6s-p1SolxPA2Wx2&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;#challenge : &amp;#39;([^&amp;#39;]+)&amp;#39;#&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$js&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Собственно скачиваем картинку
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$image&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://api.recaptcha.net/image?c=&lt;/span&gt;&lt;span class="si"&gt;$key[1]&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Генерируем имена временных файлов для хранения кукисов и картинки. Параметр - префикс имени файла.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$cookies_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;TempFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cookie&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nv"&gt;$image_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;TempFile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;image&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;SaveCookies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cookies_file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Сохраняем кукисы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$image_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$image&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Сохраняем картинку
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Возвращаем данные, которые нам понадобятся потом.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="s1"&gt;&amp;#39;image_file&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$image_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Картинку капчи. ОБЯЗАТЕЛЬНО!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;cookies_file&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$cookies_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Файл с кукисами
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;key&amp;#39;&lt;/span&gt;			&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Токен формы, добытый в начале
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;recaptcha&amp;#39;&lt;/span&gt;		&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Токен рекапчи
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Эта функция занимается собственно произведением регистрации.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Параметры:
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * - $account массив из элеменитов login, password, email. Назначение, думаю, очевидно :)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * - $data тот самый массив, который мы вернули из функции GetForm()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * - $captcha текст, написанный по мнению пользователя на капче.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Функция возвращает null в случае успеха или массив сообщений об ошибках, если они возникли.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;SubmitReg&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$account&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Собираем запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$post_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="s1"&gt;&amp;#39;login&amp;#39;&lt;/span&gt;			&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$account&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;login&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Логин
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;			&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$account&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Емейл
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;		&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$account&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;password_confirm&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$account&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// И снова пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;recaptcha_response_field&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Текст с картинки
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;recaptcha_challenge_field&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;recaptcha&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Токен рекапчи
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;token&amp;#39;&lt;/span&gt;			&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="c1"&gt;// Токен формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="s1"&gt;&amp;#39;inviter&amp;#39;&lt;/span&gt;		&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Просто пустое поле. Видимо, для какой-то реферральной системы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Загружаем сохраненные кукисы с прошлого раза
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;LoadCookies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$data&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;cookies_file&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Отправляем запрос. Первый параметр - куда, второй - параметры запроса,
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="c1"&gt;// третий (опциональный, по умолчанию - false) - надо ли преобразовывать страницу из кодировки сайта в родную для RS (utf-8)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="c1"&gt;// Очевидно, что для веб-страниц его надо ставить true, а дял картинок - false. Аналогичный параметр есть и у метода $this-&amp;gt;Get()
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Post&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://memori.ru/register/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Проверяем успешность регистрации
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;На указанный Вами электронный адрес&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="c1"&gt;// Если не прошло, добываем ошибки.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="nx"&gt;preg_match_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;lt;p class=&amp;#34;error&amp;#34;&amp;gt;([^&amp;lt;]+)&amp;lt;/p&amp;gt;#mu&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Функция подтверждения по почте.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * Параметр $account содержит те же данные о логине, пароле и email-e, что и в случае с методом SubmitReg.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   * возвращает null в случае успеха или массив с сообщениями об ошибках в ином случае.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;   */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;Confirm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$account&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Ищем письмо по отправителю. Кроме того, в теле письма должен упоминаться домен из поля $this-&amp;gt;url
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$mail&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;findMail&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;no-reply@memori.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Загружаем тело сообщения
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getMailBody&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$mail&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;msg_id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Извлекаем ссылку подгверждения
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#http://memori.ru/regconfirm/[0-9]+/[0-9a-z]+/#i&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Отправляем запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$this&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;Get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$url&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Проверяем успешность
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;/logout/&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="c1"&gt;// Если что не так - ругаемся.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Произошла ошибка активации или аккаунт уже был ранее подтвержден&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Alles :-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Напоследок замечу, что в RS имеется очень удобная для отладки функция dbg($var). Будучи вызванная в любом месте кода она выведет дамп переменной var внизу страницы. Она особенно хороша тем, что работает в том числе и тогда, когда скрипт вызывается через AJAX.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Свободная цена на RegSubmitter: итоги</title>
      <link>https://nevkontakte.com/2010/Free-price-on-RegSubmitter-results.html</link>
      <pubDate>Sat, 02 Jan 2010 17:53:22 +0000</pubDate>
      <guid>https://nevkontakte.com/2010/Free-price-on-RegSubmitter-results.html</guid>
      <description>&lt;p&gt;С 26 декабря по 1 января я раздавал новогодние подарки - все желающие имели возможность приобрести одну из версий &lt;a href="https://nevkontakte.com/2009/RegSubmitter-at-a-free-price-and-blog-updates.html"&gt;RegSubmitter по свободной цене&lt;/a&gt;. Только что я ответил на последние письма и начинаю подводить итоги.&lt;/p&gt;
&lt;p&gt;Для начала немного чисел:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Общая выручка: 18,39 (WMZ) + 458,1 (WMR) + 549,50 (руб, ЯД) ≈ 1552.98 (руб) ≈ $51.4231&lt;/li&gt;
&lt;li&gt;Минимальная сумма: 1 коп.&lt;/li&gt;
&lt;li&gt;Максимальная сумма: 350 руб.&lt;/li&gt;
&lt;li&gt;Самая популярная сумма: $1.&lt;/li&gt;
&lt;li&gt;Переводов ≤$1 было 15 штук — примерно 60%.&lt;/li&gt;
&lt;li&gt;Популярность версий: &lt;strong&gt;RSB&lt;/strong&gt; - 15 шт, ESB - 8 шт, UMSB - 1 шт.&lt;/li&gt;
&lt;li&gt;Свой ключ уже активировали 16 пользователей из 24 поучаствовавших в акции.&lt;/li&gt;
&lt;li&gt;Лишь трое запросили доступ в скрытый раздел форума поддержки.&lt;/li&gt;
&lt;li&gt;В период акции посещаемость сайта regsubmitter.ru выросла более, чем в 4 раза. При этом, основной вклад был у серча, за ним с небольшим отрывом шел маулнет.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Теперь я поделюсь некоторыми общими соображениями о свободной цене и рунете. Главное соображение таково: в целом рунет еще морально не готов. Однако, возможны варианты, в которых этот подход применим. Необходимым для условием является яркий бренд, под которым продается товар. Пользователи должны любить этот бренд, и тогда они будут платить.&lt;/p&gt;
&lt;p&gt;Другими важными на мой взгляд аспектами являются с одной стороны достаточно широкая целевая аудитория и с другой - высокий уровень культуры в ней. То есть, вряд ли получится успешно продавать по свободной цене артефакты для WoW, но вполне можно попробовать продавать классическую музыку (насколько мне известно, первопроходцами свободной цены стали именно музыканты в лице группы Radiohead).&lt;/p&gt;
&lt;p&gt;Другое соображение, которое у меня возникло в ходе проведения акции и аналогичными экспериментами Тормоза, это &amp;ldquo;эффект личного общения&amp;rdquo;. В случае, если процесс автоматизирован, как это было сделано, например, с μTodo, то у покапателя возникает ощущение анонимности и ему гораздо легче заплатить мало, чем в случае личного общения по email,  как было сделано с Regsubmitter-ом. Хотя находятся личности, на которых это не распространяется ;) Иными словами, если человек платит роботу, он не чувствует себя обязанным платить по совести (ведь у робота нет совести, он не оценит). А вот когда человек платит человеку, то тогда включается совесть и требует заплатить справедливую цену.&lt;/p&gt;
&lt;p&gt;Ну и на десерт скажу, что помимо меня аналогичную акцию проводили &lt;a href="http://brokenbrake.biz/2010/01/01/2009-2010-fin"&gt;Тормоз&lt;/a&gt; и &lt;a href="http://makeprosoft.ru/2010/itogi-akcii-svobodnaya-cena/"&gt;Abiron&lt;/a&gt;, на отчеты которых вы можете взглянуть по этим ссылкам.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Итоги-2009 и Планы-2010</title>
      <link>https://nevkontakte.com/2009/Results-2009-and-Plans-for-2010.html</link>
      <pubDate>Thu, 31 Dec 2009 14:38:56 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Results-2009-and-Plans-for-2010.html</guid>
      <description>&lt;p&gt;10 часов до конца года. Работать лень, да и времени до начала празднования осталось не так уж много, чтобы что-то начинать. Поэтому попытаюсь подвести итоги года.&lt;/p&gt;
&lt;p&gt;Год был очень противоречивым. С одной стороны, это был очень тяжелый год, с другой - было сделано немало добрых и полезных дел. Но для начала &lt;a href="https://nevkontakte.com/2008/Year-ended-long-live-the-new-year-2008.html"&gt;вернемся в прошлое&lt;/a&gt; и взглянем на планы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Успешно сдать две сессии и быть готовым к третьей.&lt;/strong&gt; Цель более-менее достигнута. Более-менее - это потому что я таки схлопотал одну тройку и в этом семестре жил без стипендии.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Собрать свою группу и выйти на сцену.&lt;/strong&gt; Нихрена не достигнута. Нет времени, нет сил, нет людей.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Захватить мировое господство.&lt;/strong&gt; Опять фейл. Всему виной моя лень и добродушие.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Узнать то, чего не узнал за этот год.&lt;/strong&gt; О, да. Много узнал. Порою кажется, что даже слишком много. Но в будущем все равно наверное пригодится.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Написать много-много интересных статей в этот блог.&lt;/strong&gt; Тут уже судить вам. После НГ завершу серию про &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;авторегистраторы&lt;/a&gt;, после чего буду придумывать еще чего-нибудь :)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Придумать и реализовать еще больше идей, чем в этом году.&lt;/strong&gt; По первому пункту план перевыполнен. По второму - не ахти, хотя есть и немало результатов. Большую часть из них я собрал &lt;a href="https://nevkontakte.com/pages/Soft.html"&gt;здесь&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;??????&lt;/strong&gt;!!!!!!&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PROFIT&lt;/strong&gt; Миллионов не заработал. Но это еще впереди :)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Резюмируя, в отношении поставленных целей год был не очень успешным, но с этим уже ничего не поделаешь. Зато есть шанс поправить ситуацию в будущем году ;)&lt;/p&gt;
&lt;h3 id="что-жея-успел-за-год"&gt;Что же я успел за год?&lt;/h3&gt;
&lt;p&gt;Больше всего времени и сил у меня отняла учеба и тут результаты вполне пристойные. Надеюсь на этой сессии вернуть стипендию, ибо лишней не бывает. Да и не люблю я быть троечником. Кстати, наконец-то начались более-менее серьезные профильные курсы, жить уже не так скучно. Дальше будет еще веселее.&lt;/p&gt;
&lt;p&gt;Летом я в третий раз съездил в ЛШЮП. Снова масса позитива и полуночных сидений за отладкой наколбашенного детьми кода (писали, кстати, не абы что, а распознавалку текста. Вышло не бог весть что, но все ре работоспособное). Опять же, один из самых счастливых периодов жизни в этом году.&lt;/p&gt;
&lt;p&gt;В Вебе ситуация существенно не изменилась главным образом потому, что ему я на самом деле уделял недостаточно внимания, чтобы получить хороший прогресс. Я потихоньку развивал &lt;a href="https://web.archive.org/web/20120101043121/http://regsubmitter.ru/index.html"&gt;RegSubmitter&lt;/a&gt;, реализовывал &lt;a href="https://web.archive.org/web/20100612002448/http://zabora.net.ru/"&gt;мелкие забавные идеи&lt;/a&gt;, много фрилансил. Последний, как и в прошлый раз, составил основную долю дохода.&lt;/p&gt;
&lt;p&gt;Более-менее четко самоопределился именно как программист, а не какой-нибудь сеошник-бомж-манимейкер. Писать код гораздо приятнее, чем ругаться с Платонами. Кроме того, окончательно решил, что стоит идти от фриланса в сторону развития и продажи собственных продуктов и сервисов. Это даст большую стабильность и свободу в деньгах, и значительно менее хлопотно.&lt;/p&gt;
&lt;h3 id="что-будет-в-новом-году"&gt;Что будет в Новом году?&lt;/h3&gt;
&lt;p&gt;На этот раз у меня цели гораздо более конкретные и прагматичные.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Учеба. На мой взгляд, самая важная инвестиция в будущее и поэтому она снова не первом месте.&lt;/li&gt;
&lt;li&gt;Выйти на месячный доход не менее 20 000 руб./мес. Примерно такая сумма мне необходима для более-менее свободного маневра и удовлетворения бытовых потребностей.&lt;/li&gt;
&lt;li&gt;Написать и запустить два сервиса, которые я вынашиваю в уме уже больше месяца. Один из них будет бесплатный и немонетизируемый - на правах хобби. Второй скорее всего платный, но дешевый и полезный в том числе и мне. Думаю, свою долю в достижение пункта №2 он внесет.&lt;/li&gt;
&lt;li&gt;Довести до совершенства движок RegSubmitter и подтянуть на нужный уровень модули. На самом деле, до этого не так уж и далеко, но хлопотно. После этого выпустить набор для реги на фрихостах.&lt;/li&gt;
&lt;li&gt;Выпустить еще несколько полезных софтин для вебмастеров-манимейкеров. Зарисовки на эту тему опять же уже имеются, надо лишь довести до ума.&lt;/li&gt;
&lt;li&gt;Купить синтезатор. Идея-фикс. Хочу, и все тут. И музыку на нем писать проще, чем на гитаре.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Все это вполне реально при условии некоторого напряжения сил, так что через год я получу возможность посмотреть, насколько я на самом деле распиздяй ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>RegSubmitter по свободной цене и обновления блога.</title>
      <link>https://nevkontakte.com/2009/RegSubmitter-at-a-free-price-and-blog-updates.html</link>
      <pubDate>Sat, 26 Dec 2009 21:06:27 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/RegSubmitter-at-a-free-price-and-blog-updates.html</guid>
      <description>&lt;p&gt;Зачетная сессия позади, на носу новый год и хочется делать подарки :)&lt;/p&gt;
&lt;p&gt;Поэтому я объявляю о новогодней акции &lt;strong&gt;RegSubmitter по свободной цене&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Что такое свободная цена? Это когда покупатель платит продавцу ровно столько, сколько ему велит совесть. Это утопия денежных отношений, которая, на мой взгляд, непременно придет к людям, но далеко не при нашей жизни - сейчас люди слишком глупые и жадные, чтобы такая модель жила и была взаимовыгодна. Тем не менее, под Новый Год случаются и не такие чудеса, поэтому я &lt;a href="http://brokenbrake.biz/2009/12/24/freeprice-2009"&gt;вслед за Тормозом&lt;/a&gt; объявляю, что &lt;a href="http://regsubmitter.ru/index.php?mode=buy"&gt;RegSubmitter&lt;/a&gt; до 1 января 2010 года &lt;strong&gt;будет продаваться по свободной цене&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Как это будет работать? А вот так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Переведите нужную сумму на кошелек WebMoney Z177534671497, указав в примечании ваш email&lt;/li&gt;
&lt;li&gt;Напишите мне на &lt;img src="https://nevkontakte.com/files/email.gif" alt=""&gt; с того же адреса, который вы указали в примечании к платежу, какую именно версию RegSubmitter вы хотите получить&lt;/li&gt;
&lt;li&gt;В течение суток (а скорее всего гораздо быстрее) вы получите ответ, в котором будет указан ваш серийный номер и дальнейшие инструкции&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;С наступающим Новым Годом ;)&lt;/p&gt;
&lt;h3 id="изменения-в-блоге"&gt;Изменения в блоге&lt;/h3&gt;
&lt;p&gt;Я тут неожиданно вспомнил, что, будучи программистом, написал немало полезных программ, которые тем не менее канули в глубинах этого блога и про них никто не знает. Пришлось срочно поправлять ситуацию и создавать &lt;a href="https://nevkontakte.com/pages/Soft.html"&gt;отдельную страничку&lt;/a&gt;, на которой перечислен весь софт, как платный, так и бесплатный (причем бесплатных оказалось даже больше, чем платных ;) ), а так же сервисов, в разное время созданных мною. Так что приглашаю ознакомиться и найти что-нибудь полезное для себя :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как заставить саппорт говорить.</title>
      <link>https://nevkontakte.com/2009/How-to-get-support-to-speak.html</link>
      <pubDate>Wed, 23 Dec 2009 15:36:36 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/How-to-get-support-to-speak.html</guid>
      <description>&lt;p&gt;Думаю, всем приходилось сталкиваться, когда саппорт отмалчивается в тикетах, аське и почте. Мне вот тоже пришлось. Некрасивая была история, шума было много и меня она тоже задела, хоть и слегка. В общем, саппорт сначала мазался, а потом и вовсе ушел в инвиз и замолк. Типа все, оффлайн навеки.&lt;/p&gt;
&lt;p&gt;Вчера вечером, однако мне было относительно нечего делать и я решил предпринять еще одну попытку:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;(20:54:08) Alek$: Добрый день.&lt;/p&gt;
&lt;p&gt;(20:54:14) Alek$: У меня есть к вам предложение.&lt;/p&gt;
&lt;p&gt;(20:54:50) support: Добрый день. Слушаю.&lt;/p&gt;
&lt;p&gt;(20:55:12) Alek$: Вы мне наконец сообщите как дела с доменами. Такое вот предложение._&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&amp;hellip;и случилось чудо! Несмотря на инвиз и неурочное время, мне ответ пришел немедля! Это при том, что раньше как вежливые, так и резкие просьбы наглухо игнорировались. Берите на заметку, коллеги :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пишем простой авторегистратор. Часть 5 - подтверждение по email.</title>
      <link>https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html</link>
      <pubDate>Sun, 20 Dec 2009 15:48:10 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html</guid>
      <description>&lt;h3 id="содержание"&gt;Содержание&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;Инструментарий&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;Основы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html"&gt;Боремся с капчей&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;Подключаем антикапчу&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html"&gt;&lt;strong&gt;Подтверждение по email&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html"&gt;Пишем модуль для RegSubmitter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Давайте заглянем в наш актив. Сейчас мы &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;уже умеем писать простые регистраторы&lt;/a&gt;, умеющие бороться с капчей при помощи антикапчи. От &lt;del&gt;окончательного захвата мирового господства&lt;/del&gt; полной автоматизации процесса регистрации нас отделяет единственный барьер - подтверждение по почте. Его преодолением мы сегодня и займемся. Под нож снова пойдет toodoo.ru, который мы уже препарировали в &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;самом начале&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="шаг-1---анализ"&gt;Шаг 1 - анализ.&lt;/h3&gt;
&lt;p&gt;Прежде всего, надо проверить, требуется ли подтверждение вообще :) Если нет, то можно идти за &lt;del&gt;пивом&lt;/del&gt; кефиром и наслаждаться воскресным отдыхом. Кроме того, бывает так, что подтверждение почты не является необходимым, но приносит какие-то бонусы. В таком случае вы вольны выбирать, надо вам подтверждать, или слишком лень. Я обычно подтверждаю, поскольку это придает профилю более человекоподобный вид.&lt;/p&gt;
&lt;p&gt;Далее требуется выяснить, достаточно для подтверждения просто перейти по ссылке из письма, или надо совершить какие-то дополнительные действия. В случае с toodoo.ru после перехода на страницу нужно нажать на кнопку &amp;ldquo;Согласен&amp;rdquo; для завершения подтверждения. Поэтому нужно провести анализ этой формы, точно так же как мы &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;анализировали&lt;/a&gt; на предмет защиты саму форму регистрации.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen33.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen33.jpg" alt="screen33.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="шаг-2---пишем-код"&gt;Шаг 2 - пишем код.&lt;/h3&gt;
&lt;p&gt;Для работы с почтой мы будем использовать PEAR модуль (не путать с модулями движка php) &lt;a href="http://pear.php.net/package/Net_POP3"&gt;Net/POP3&lt;/a&gt;. На многих хостингах он уже установлен, а если нет - во вложении архив со скриптом и модулем.&lt;/p&gt;
&lt;p&gt;Алгоритм действия таков:&lt;/p&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;PROF1T!&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В случае с toodoo.ru, нам придется из страницы подтверждения добыть уникальный ключ (опять регулярки) и отправить один POST-запрос.&lt;/p&gt;
&lt;p&gt;Собственно, вот код, он основан на коде из 2 статьи:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Content-Type: text/html; charset=UTF-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Функция, производящая регистрацию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Все POST-параметры, которые надо отправить
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="s1"&gt;&amp;#39;agree&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Да, мы согласны с правилами ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;profile_is_female&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Укажем пол
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;profile_nick_name&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Наш логин
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;user_email&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// email
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;user_password&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;user_password_repeat&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;// повторим пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Особая, curl-ная магия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Инициализируем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://toodoo.ru/account/signup&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес обработчика формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем, что нам нужно отправить POST-запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Передаем POST-параметры
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Результат нам нужно вернуть в переменную, а не на экран
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_FOLLOWLOCATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Переходить по редиректам
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="c1"&gt;// Генерируем временный файл для cookies, чтобы они не терялись между запросами-редиректами
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tempnam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_COOKIEJAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$temp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;unlink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$temp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Запускаем запрос!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;curl_close&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Закрываем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Проверяем на успешность регистрации
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Поздравляем, ты успешно зарегистрировался в toodoo!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Параметры регистрации. Их можно задавать руками, или считывать из файла - на ваше усмотрение.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;autoreg-test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;autoreg-test@yandex.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;*&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Данные для авторизации на почтовом сервере
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$pop3_server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;pop.yandex.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$pop3_login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;autoreg-test&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$pop3_password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$step&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;step&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Текущая стадия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Выводим, что мы будем регать
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Логин: &lt;/span&gt;&lt;span class="si"&gt;$login&lt;/span&gt;&lt;span class="s2"&gt;, пароль: &lt;/span&gt;&lt;span class="si"&gt;$password&lt;/span&gt;&lt;span class="s2"&gt;, email: &lt;/span&gt;&lt;span class="si"&gt;$email&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Начало регистрации
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$step&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;reg&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Регаем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Успешно зарегистрирован&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;?step=confirm&amp;#34;&amp;gt;подтверждение по email&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;b&amp;gt;Ошибка регистрации&amp;lt;/b&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#34;&amp;gt;Еще раз&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Завершение регистрации (подтверждение)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$step&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;confirm&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Подключаем библиотеку для работы с POP3
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="k"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;PEAR/POP3.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Создаем POP3-клиент
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$api&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Net_POP3&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Подключаемся к почтовому серверу
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pop3_server&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;110&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Не удалось подключиться к серверу&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;?step=confirm&amp;#34;&amp;gt;Еще раз&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Авторизуемся
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;login&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$pop3_login&lt;/span&gt; &lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$pop3_password&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Не удалось авторизоваться&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;?step=confirm&amp;#34;&amp;gt;Еще раз&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;die&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$list&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getListing&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Получаем список писем в ящике
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Ищем нужное письмо - скачиваем заголовки поочередно для всех писем и проверяем адрес отправителя
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="k"&gt;foreach&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$list&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nv"&gt;$item&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getParsedHeaders&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;msg_id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// Скачиваем заголовки
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;// Если отправитель совпадает с нужним нам, то приступаем к обработке
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$headers&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;From&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;toodoo.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$body&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$api&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;getBody&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;msg_id&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// Скачиваем все письмо
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// Вытаскиваем уникальную ссылку
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#http://toodoo.ru/confirm/contact\?code=\S+#i&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$body&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// Особая, curl-ная магия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Инициализируем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес страницы подтверждения
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Результат нам нужно вернуть в переменную, а не на экран
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_FOLLOWLOCATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Переходить по редиректам
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Выполняем запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// Мы, часом, еще не подтвердили?
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Видимо адрес по этой ссылке был уже подтвержден.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Что-то пошло не так, либо аккаунт уже подтвержден.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;?step=confirm&amp;#34;&amp;gt;Еще раз&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// У toodoo.ru требуется отправить дополнительную форму о том, что мы действительно подтверждаем регистрацию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// Добываем уникальный ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;lt;input type=&amp;#34;hidden&amp;#34; name=&amp;#34;code&amp;#34; value=&amp;#34;([^&amp;#34;]+)&amp;#34;&amp;gt;#&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// Формируем поля запроса
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="s1"&gt;&amp;#39;code&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$matches&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="s1"&gt;&amp;#39;agree&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Добавить&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// Отправляем форму
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://toodoo.ru/confirm/contact&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес обработчика формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем, что нам нужно отправить POST-запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Передаем POST-параметры
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Выполняем запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;curl_close&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Закрываем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="c1"&gt;// Мавр сделал свое дело, мавр может уходить.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;			&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Аккаунт успешно подтвержден!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;?step=reg&amp;#34;&amp;gt;Начать регистрацию&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Все!  ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В коде опять есть пара синтаксических ошибок, но я думаю, для вас они проблемы не представляют :) Скачать весь скрипт: &lt;a href="https://nevkontakte.com/files/toodoo.zip"&gt;toodoo.zip&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пишем простой авторегистратор. Часть 4 - подключаем антикапчу.</title>
      <link>https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html</link>
      <pubDate>Tue, 08 Dec 2009 16:00:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html</guid>
      <description>&lt;h3 id="содержание"&gt;Содержание&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;Инструментарий&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;Основы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html"&gt;Боремся с капчей&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;&lt;strong&gt;Подключаем антикапчу&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html"&gt;Подтверждение по email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html"&gt;Пишем модуль для RegSubmitter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В прошлой статье я писал о том, как
&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html"&gt;бороться с капчей&lt;/a&gt;
в формах регистрации. Однако тогда мы были вынуждены вводить ее руками. Сегодня
я расскажу, как можно переложить эту работу на &lt;del&gt;специально обученных
обезьянок&lt;/del&gt; сервис антикапча.&lt;/p&gt;
&lt;h3 id="что-из-себя-представляет-антикапча"&gt;Что из себя представляет антикапча?&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://antigate.com"&gt;Антикапча&lt;/a&gt; - это сервис по ручному распознаванию капчи.
Иными словами, сотни &lt;del&gt;китайцев&lt;/del&gt; школьников сидят и за копейки распознают
капчу, которые им подсовывают. Я не представляю, где они находят столько
дураков, готовых за $1 распознавать 1000 капч, но меня это и не волнует.&lt;/p&gt;
&lt;p&gt;Механизм работы сервиса простой:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Вы отправляете картинку на сервис и она встает в очередь на прием к
обезьянкам.&lt;/li&gt;
&lt;li&gt;Раз в 5 секунд вы запрашиваете статус картинки.&lt;/li&gt;
&lt;li&gt;Если картинка не распозналась, ждете еще 5 секунд. Если ожидание затянулось -
значит не судьба, спустя некоторое время картинка выпадает.&lt;/li&gt;
&lt;li&gt;Если картинка распозналась, то вы получаете текст, который по мнению
обезьянки на ней написан.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На счет мнения обезьянки надо сказать отдельно. Среди них попадаются откровенные
халтурщики, которые вводят заведомую херню. Поэтому чтобы минимизировать шанс
нарваться на такую сволочь, надо в запросе на добавление картинки максимально
точно описать параметры текста.&lt;/p&gt;
&lt;h3 id="техническая-сторона"&gt;Техническая сторона.&lt;/h3&gt;
&lt;p&gt;Антикапча предоставляет несложный API для взаимодействия с ней, однако уже
написаны функции для PHP, Python, C++, Perl, C#, Delphi и даже VB и Asm, чем мы
и будем пользоваться. В нашем случае, я воспользуюсь
&lt;a href="http://antigate.com/curl.txt"&gt;PHP-версией с curl&lt;/a&gt;. В архив я включил слегка
измененную для более удобного вывода процесса версию этого скрипта, но с тем же
успехом можно работать и с оригинальным.&lt;/p&gt;
&lt;h3 id="инвайты-на-антикапчу"&gt;Инвайты на антикапчу.&lt;/h3&gt;
&lt;p&gt;Регистрация на этом сервисе требует инвайта. К сожалению, эти хитрецы не
позволяют иметь больше одного не активированного инвайта, поэтому я публикую
здесь только один: &lt;del&gt;&lt;strong&gt;a9bcd1d903&lt;/strong&gt;&lt;/del&gt;&lt;strong&gt;45914dfa51&lt;/strong&gt;. &lt;del&gt;Кому надо еще - пишите
на почту &lt;img src="https://nevkontakte.com/files/email.gif" alt=""&gt;. (См. UPD1 в конце поста)&lt;/del&gt; Теперь
&lt;a href="https://web.archive.org/web/20100104114555/http://nevkontakte.org.ru/anticaptcha-invite"&gt;инвайты на антикапчу&lt;/a&gt;
можно получить в автоматическом режиме.&lt;/p&gt;
&lt;h3 id="пишем-код"&gt;Пишем код.&lt;/h3&gt;
&lt;p&gt;Он мало чем отличается от того, что я публиковал в прошлый раз. все изменения
сосредоточены в части, управляющей процессом регистрации. Сами функции,
отправляющие запросы на регистрацию, остались прежними.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Content-Type: text/html; charset=UTF-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Особая, curl-ная магия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Инициализируем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://moemesto.ru/register/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Результат нам нужно вернуть в переменную, а не на экран
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_FOLLOWLOCATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Переходить по редиректам
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_COOKIEJAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cookie.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем файл для хранения кукисов
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Выполняем запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// При помощи простейшего регулярного выражения добываем сессионный ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;lt;input type=hidden name=&amp;#34;captchaid&amp;#34; value=&amp;#34;([a-f0-9]+)&amp;#34;&amp;gt;#i&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://moemesto.ru/captcha/&lt;/span&gt;&lt;span class="si"&gt;$key[1]&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес картинки
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Скачиваем картинку
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_close&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Закрываем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;captcha.jpg&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Сохраняем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Возвращаем добытый ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Функция, производящая регистрацию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Все POST-параметры, которые надо отправить
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="s1"&gt;&amp;#39;captchaid&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Передаем сессионный ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;login&amp;#39;&lt;/span&gt;		&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Логин
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;		&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Емейл
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;captcha&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// А это наш код с картинки
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="s1"&gt;&amp;#39;do_reg&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Зарегистрироваться&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;Нажимаем&amp;#34; кнопку отправить ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Особая, curl-ная магия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Инициализируем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://moemesto.ru/register/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес обработчика формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем, что нам нужно отправить POST-запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Передаем POST-параметры
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Результат нам нужно вернуть в переменную, а не на экран
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_FOLLOWLOCATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Переходить по редиректам
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_COOKIEJAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cookie.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем файл для хранения кукисов. При чем он должен быть тот же, что и в прошлый раз, чтобы кукисы подхватились.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Запускаем запрос!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;curl_close&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Закрываем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;// Проверяем на успешность регистрации
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="c1"&gt;//echo $result;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Поздравляем! Вы успешно зарегистрировались!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Параметры регистрации. Их можно задавать руками, или считывать из файла - на ваше усмотрение.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;antifrager323&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;antifrag233@yopmail.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;qwerty&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Выводим, что мы будем регать
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Логин: &lt;/span&gt;&lt;span class="si"&gt;$login&lt;/span&gt;&lt;span class="s2"&gt;, пароль: &lt;/span&gt;&lt;span class="si"&gt;$password&lt;/span&gt;&lt;span class="s2"&gt;, email: &lt;/span&gt;&lt;span class="si"&gt;$email&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Получаем капчу и сессионный ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;register1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Подключаем апи антикапчи
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ac_curl.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Распознаем капчу. Список и значение параметров функции можно узнать в начале файла.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Чем точнее параметры будут описывать капчу, тем больше точность распознавания
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;recognize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;captcha.jpg&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;ваш_api_key&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// На всякий случай показываем картинку и распознанный текст
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;img src=&amp;#34;captcha.jpg&amp;#34;&amp;gt;&amp;lt;br&amp;gt;Text:&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Регаем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;register2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Успешно зарегистрирован&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;b&amp;gt;Ошибка регистрации&amp;lt;/b&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#34;&amp;gt;Еще раз&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Все!  ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обратите внимание, что &amp;ldquo;ваш_api_key&amp;rdquo; надо заменить на нормальный api key,
который есть в панели антикапчи, в разделе настройки. напомню, что в скрипте
умышленно допущена пара синтаксических ошибок, чтобы отсеять все тех же
обезьянок.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Новогодний картиночный позитив!</title>
      <link>https://nevkontakte.com/2009/New-year-kartinochnuyu-positive.html</link>
      <pubDate>Wed, 02 Dec 2009 10:35:50 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/New-year-kartinochnuyu-positive.html</guid>
      <description>&lt;p&gt;Как-то последнее время я совсем погряз в рутине и учебе. Страшно подумать, но последний выпуск &lt;a href="https://nevkontakte.com/2009/Reference-positive.html"&gt;ссылочного позитива&lt;/a&gt; был аж в сентябре, а уже декабрь. В общем, ситуацию надо срочно поправлять, чем я и займусь :-)&lt;/p&gt;
&lt;p&gt;С удовольствием отмечу, что в этом деле у меня есть соратник в лице Бездомного Бродяги. А задумал он поправлять настроение нации с помощью конкурса &lt;a href="http://homelerss.ru/post/new-year-pics.html"&gt;новогодних картинок&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Чтобы привнести свой вклад в общий позитив надо немного:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Нарисовать новогоднюю картинку на тему заработка в интернете&lt;/li&gt;
&lt;li&gt;Прислать картинку Бездомному на почту или опубликовать на своем блоге и кинуть ссылку ему в &lt;a href="http://homelerss.ru/post/new-year-pics.html#comments"&gt;комменты&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;В очередном посте поставить ссылку на конкурс с анкором &amp;ldquo;новогодние картинки&amp;rdquo;, а так же на &lt;a href="http://www.postquickly.com/sss/"&gt;http://www.postquickly.com/sss/&lt;/a&gt; с анкором &amp;ldquo;Полностью автоматическая регистрация в социальных закладках&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Призовой фонд &lt;del&gt;пока $50 и еще увеличится, как только Бездомный растрясет спонсоров&lt;/del&gt; пока писал, он стал уже $110 :) Впрочем, что я говорю? Читайте все из первых рук и участвуйте :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>RegSubmitter-у один год!</title>
      <link>https://nevkontakte.com/2009/RegSubmitter-in-one-year.html</link>
      <pubDate>Sun, 29 Nov 2009 15:51:15 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/RegSubmitter-in-one-year.html</guid>
      <description>&lt;p&gt;Один год и два дня назад я опубликовал
&lt;a href="https://nevkontakte.com/2008/Trying-to-enter-the-beta-testers-RegSubmitter.html"&gt;пост о начале набора бета-тестеров&lt;/a&gt;
для RegSubmitter&amp;rsquo;a. Страшно подумать, как быстро время летит. С тех пор он
обзавелся множеством новых возможностей, получил два новых набора модулей в
дополнение к исходному и сменил версию с 0.9 до 1.3.6 и сейчас готовится в
релизу 1.4.&lt;/p&gt;
&lt;p&gt;Что можно вспомнить об этом годе? Были и ожидания, и разочарования, и проблемы,
и порывы бросить все к черту. Но был и позитив, и добрые пожелания, и успехи.
Помню, какое счастье я испытал, когда после нескольких недель борьбы я таки
заставил работать модуль для links.i.ua. Море спиртного никогда не даст такого
офигенного эффекта :) Именно этому событию, кстати, был посвящен мой первый
&lt;a href="http://x.com/Nevkontakte/status/1648785103"&gt;твит&lt;/a&gt;. В общем, всякое бывало, но
хорошего, пожалуй, больше. Как качественно, так и количественно.&lt;/p&gt;
&lt;p&gt;И чтобы хорошего было еще больше, я решил, что в течение ближайшей недели цена
на все наборы для RS будет ровно &lt;strong&gt;$5&lt;/strong&gt;. Так что
&lt;a href="http://regsubmitter.ru/index.php?mode=buy"&gt;пользуйтесь моментом&lt;/a&gt; :)&lt;/p&gt;
&lt;p&gt;PS. А у вас есть о чем вспомнить за этот год?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пишем простой авторегистратор. Часть 3 - боремся с капчей.</title>
      <link>https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html</link>
      <pubDate>Sun, 29 Nov 2009 14:32:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html</guid>
      <description>&lt;h3 id="содержание"&gt;Содержание&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;Инструментарий&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;Основы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html"&gt;&lt;strong&gt;Боремся с капчей&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;Подключаем антикапчу&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html"&gt;Подтверждение по email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html"&gt;Пишем модуль для RegSubmitter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;предыдущей статье&lt;/a&gt; мы рассмотрели самый простой пример авторегистратора, которому надо всего лишь отправить форму. Но таких сервисов очень мало, поэтому гораздо чаще приходится во время регистрации видеть перед собой капчу. Сегодня &amp;ldquo;ляжет под нож&amp;rdquo; сервис &lt;a href="http://moemesto.ru/register/"&gt;Мое Место&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="шаг-1-анализ-защиты"&gt;Шаг 1. Анализ защиты.&lt;/h3&gt;
&lt;p&gt;В первую очередь, следует убедиться, что капча вообще есть :) То, что есть картинка, еще не значит, что есть капча. Как это ни удивительно, но бывают сайты, на которых капча создает сложности только для людей, но не для роботов. Кстати, завтра будет ровно год &lt;a href="https://nevkontakte.com/2008/Antikapcha-with-examples.html"&gt;статье&lt;/a&gt;, в которой я писал как раз про такие случаи. Советую прочесть ее, прежде чем читать дальше.&lt;/p&gt;
&lt;p&gt;Если вы убедились, что капча действительно не обходится простыми методами, то придется смириться и перейти к изучению защиты. Я встречал два метода проверки валидности капчи:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Капча привязывалась к сессии и сессионный идентификатор передавался через cookies&lt;/li&gt;
&lt;li&gt;Сессионный ключ передается в скрытом поле формы.&lt;/li&gt;
&lt;li&gt;Комбинация первых двух&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В общем случае, самый простой подход - предполагать, что первый тип защиты всегда есть, а второй легко определить по наличию скрытых полей с непонятными хеш-подобными значениями, которые меняются при перезагрузке страницы.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen29.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen29.jpg" alt="screen29.jpg"&gt;&lt;/a&gt; &lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen30.jpg" alt="screen30.jpg"&gt;&lt;/p&gt;
&lt;p&gt;В особо тяжелых случаях таких полей бывает несколько, поэтому надо отследить их все.&lt;/p&gt;
&lt;h3 id="шаг-2-пишем-код"&gt;Шаг 2. Пишем код.&lt;/h3&gt;
&lt;p&gt;Для того, чтобы извлекать сессионные ключи из формы, мы будем пользоваться регулярными выражениями. Очень хорошо про них написано &lt;a href="http://docs.php.net/manual/ru/regexp.reference.php"&gt;здесь&lt;/a&gt;. Нет, можно, конечно, обойтись и обычными строковыми функциями, но это будет выглядеть коряво и работать ненадежно.&lt;/p&gt;
&lt;p&gt;Капчу мы будем вводить ручками, но это только до следующей статьи :)&lt;/p&gt;
&lt;p&gt;При написании кода надо обратить внимание на две вещи:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;HTML-код скрытого поля с сессионным ключом. Основываясь на нем надо будет составлять регулярное выражение.&lt;/li&gt;
&lt;li&gt;Адрес картинки. При использовании сессионного ключа часто добавляют его к адресу картинки. На это тоже следует обратить внимание.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;header&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Content-Type: text/html; charset=UTF-8&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register1&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Особая, curl-ная магия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Инициализируем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://moemesto.ru/register/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Результат нам нужно вернуть в переменную, а не на экран
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_FOLLOWLOCATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Переходить по редиректам
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_COOKIEJAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cookie.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем файл для хранения кукисов
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Выполняем запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// При помощи простейшего регулярного выражения добываем сессионный ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;#&amp;lt;input type=hidden name=&amp;#34;captchaid&amp;#34; value=&amp;#34;([a-f0-9]+)&amp;#34;&amp;gt;#i&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://moemesto.ru/captcha/&lt;/span&gt;&lt;span class="si"&gt;$key[1]&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес картинки
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Скачиваем картинку
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_close&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Закрываем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;file_put_contents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;captcha.jpg&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Сохраняем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt; &lt;span class="c1"&gt;// Возвращаем добытый ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Функция, производящая регистрацию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Все POST-параметры, которые надо отправить
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="s1"&gt;&amp;#39;captchaid&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Передаем сессионный ключ
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;        &lt;span class="s1"&gt;&amp;#39;login&amp;#39;&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$login&lt;/span&gt; &lt;span class="c1"&gt;// Логин
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;        &lt;span class="s1"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Емейл
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;        &lt;span class="s1"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;        &lt;span class="s1"&gt;&amp;#39;captcha&amp;#39;&lt;/span&gt;   &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$captcha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// А это наш код с картинки
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;        &lt;span class="s1"&gt;&amp;#39;do_reg&amp;#39;&lt;/span&gt;    &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Зарегистрироваться&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// &amp;#34;Нажимаем&amp;#34; кнопку отправить ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Особая, curl-ная магия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Инициализируем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://moemesto.ru/register/&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес обработчика формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем, что нам нужно отправить POST-запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Передаем POST-параметры
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Результат нам нужно вернуть в переменную, а не на экран
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_FOLLOWLOCATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Переходить по редиректам
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_COOKIEJAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;cookie.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем файл для хранения кукисов. При чем он должен быть тот же, что и в прошлый раз, чтобы кукисы подхватились.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Запускаем запрос!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;curl_close&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Закрываем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Проверяем на успешность регистрации
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Поздравляем! Вы успешно зарегистрировались!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Параметры регистрации. Их можно задавать руками, или считывать из файла - на ваше усмотрение.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;antifrager223&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;antifrag223@yopmail.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;qwerty&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Выводим, что мы будем регать
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Логин: &lt;/span&gt;&lt;span class="si"&gt;$login&lt;/span&gt;&lt;span class="s2"&gt;, пароль: &lt;/span&gt;&lt;span class="si"&gt;$password&lt;/span&gt;&lt;span class="s2"&gt;, email: &lt;/span&gt;&lt;span class="si"&gt;$email&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Если мы уже ввели капчу, то заканчиваем регистрацию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;captcha&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Регаем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;register2&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;captcha&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nv"&gt;$_GET&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;key&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Успешно зарегистрирован&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;b&amp;gt;Ошибка регистрации&amp;lt;/b&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;br&amp;gt;&amp;lt;a href=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;basename&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="no"&gt;__FILE__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#34;&amp;gt;Еще раз&amp;lt;/a&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;// Если капчу еще не ввели - отображаем ее и просим ввести :)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nv"&gt;$key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;register1&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nv"&gt;$form&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;h2&amp;gt;Введите код с картинки&amp;lt;/h2&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;   &amp;lt;img src=&amp;#34;captcha.jpg&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;   &amp;lt;form&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;   &amp;lt;input type=&amp;#34;hidden&amp;#34; name=&amp;#34;key&amp;#34; value=&amp;#34;&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;$key&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;   &amp;lt;input type=&amp;#34;text&amp;#34; name=&amp;#34;captcha&amp;#34;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="s1"&gt;   &amp;lt;input type=&amp;#34;submit&amp;#34; name=&amp;#34;Go!&amp;#34;&amp;gt;&amp;lt;/form&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$form&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Все!  ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вот и все дела. Как и в прошлый раз, в коде есть пара синтаксических ошибок &amp;ldquo;от дурака&amp;rdquo;, а в остальном он полностью рабочий, он же есть и во вложении. И, как в прошлый раз, файл должен быть в кодировке UTF-8. Скачать целиком: &lt;a href="https://nevkontakte.com/files/moemesto.php_.txt"&gt;moemesto.php_.txt&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пишем простой авторегистратор. Часть 2 - основы.</title>
      <link>https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html</link>
      <pubDate>Fri, 20 Nov 2009 23:55:21 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html</guid>
      <description>&lt;h3 id="содержание"&gt;Содержание&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;Инструментарий&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;&lt;strong&gt;Основы&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html"&gt;Боремся с капчей&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;Подключаем антикапчу&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html"&gt;Подтверждение по email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html"&gt;Пишем модуль для RegSubmitter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Сначала рекомендую прочитать &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;часть 1 - инструментарий.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;В этой части я расскажу основные методы анализа форм регистрации и приведу пример написания простого регистратора для сервиса без капчи. Подопытным будет сервис закладок &lt;a href="http://toodoo.ru/account/signup"&gt;toodoo.ru&lt;/a&gt; :)&lt;/p&gt;
&lt;h3 id="анализ-формы-способ-первый"&gt;Анализ формы. Способ первый.&lt;/h3&gt;
&lt;p&gt;В &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;прошлый раз&lt;/a&gt; я говорил, что нам понадобится Firefox и расширение &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Web Developer&lt;/a&gt;. Говорил я это не от скуки, а потому что это действительно облегчит жизнь. Этот способ анализа самый простой и наглядный, и его обычно более, чем достаточно.&lt;/p&gt;
&lt;p&gt;Теперь действует просто: заходим на страницу регистрации, в панели Web Developer выбираем Формы → Информация о формах. В открывшейся вкладке мы получим детальное описание всех имеющихся форм на странице.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen26.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen26.jpg" alt="screen26.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Определить нужную довольно легко по адресу скрипта-обработчика (поле &amp;ldquo;Действие&amp;rdquo; в таблице), по id или по именам полей.&lt;/p&gt;
&lt;p&gt;Из этой таблицы нам понадобится список полей формы и их значения по умолчанию. Так же стоит сразу запомнить поля логина, емейла и пароля, они нам понадобятся при написании регистратора :)&lt;/p&gt;
&lt;p&gt;Кроме того, если и более визуальный способ - Формы → Показать параметры форм:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen27.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen27.jpg" alt="screen27.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="анализ-формы-способ-второй"&gt;Анализ формы. Способ второй.&lt;/h3&gt;
&lt;p&gt;На этот раз мы прибегнем к помощи еще более мощного инструмента - &lt;a href="http://getfirebug.com/"&gt;FireBug&lt;/a&gt;. Это инструмент воистину убийственной мощи и нужен он в основном для отлова всяких JavaScript&amp;rsquo;овых защит, добавляющих дополнительные поля, меняющих значения или посылающих дополнительные запросы. Из личного опыта скажу, что такое встречается очень не часто. По-настоящему необходим он был всего один раз, зато оправдал себя на все 100%.&lt;/p&gt;
&lt;p&gt;Действуем так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Заходим на страницу регистрации, заполняем форму так, чтобы было понятно, что и куда вы ввели (то есть, писать одинаковый текст типа qwe&amp;quot; не стоит - запутаетесь, какое поле за что отвечает)&lt;/li&gt;
&lt;li&gt;Активируем панель FireBug, выбираем вкладку &amp;ldquo;Сеть&amp;rdquo; (Net) активируем ее.&lt;/li&gt;
&lt;li&gt;Отправляем форму.&lt;/li&gt;
&lt;li&gt;Смотрим на панель FireBug. Первый из перечисленный запросов - наш. Наведение курсора на его заголовок покажет полный адрес с GET-параметрами. Чтобы посмотреть POST-параметры, надо развернуть запрос и открыть вкладку &amp;ldquo;Post&amp;rdquo;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen28.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen28.jpg" alt="screen28.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 id="анализ-формы-способ-третий-для-настоящих-мужчин"&gt;Анализ формы. Способ третий, для настоящих мужчин.&lt;/h3&gt;
&lt;p&gt;Вид → Исходный код страницы. И вкуриваем до просветления :) На самом деле, способ тоже ничего так себе, но два предыдущих удобнее. Зато это можно делать хоть в IE.&lt;/p&gt;
&lt;h3 id="пишем-регистратор"&gt;Пишем регистратор.&lt;/h3&gt;
&lt;p&gt;Ниже я привожу подробно откомментированный код авторегистратора для toodoo.ru. В нем умышленно допущена пара простых синтаксических ошибок, чтобы кто попало не злоупотреблял им ;) Для того, чтобы их исправить, достаточно базовых знаний PHP.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Функция, производящая регистрацию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="c1"&gt;// Все POST-параметры, которые надо отправить
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nv"&gt;$post&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="s1"&gt;&amp;#39;agree&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Да, мы согласны с правилами ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="s1"&gt;&amp;#39;profile_is_female&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Укажем пол
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="s1"&gt;&amp;#39;profile_nick_name&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Наш логин
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="s1"&gt;&amp;#39;user_email&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// email
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="s1"&gt;&amp;#39;user_password&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="c1"&gt;// пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="s1"&gt;&amp;#39;user_password_repeat&amp;#39;&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="c1"&gt;// повторим пароль
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="c1"&gt;// Особая, curl-ная магия
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nv"&gt;$ch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_init&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="c1"&gt;// Инициализируем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://toodoo.ru/account/signup&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// задаем адрес обработчика формы
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POST&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Указываем, что нам нужно отправить POST-запрос
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_POSTFIELDS&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Передаем POST-параметры
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_RETURNTRANSFER&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Результат нам нужно вернуть в переменную, а не на экран
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_FOLLOWLOCATION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Переходить по редиректам
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="c1"&gt;// Генерируем временный файл для cookies, чтобы они не терялись между запросами-редиректами
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nv"&gt;$temp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;tempnam&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;__&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="nx"&gt;curl_setopt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;CURLOPT_COOKIEJAR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$temp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="nx"&gt;unlink&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$temp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="c1"&gt;// Запускаем запрос!
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="nv"&gt;$result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;curl_exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="nx"&gt;curl_close&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$ch&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Закрываем сессию
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="c1"&gt;// Проверяем на успешность регистрации
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;  &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;strstr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Поздравляем, ты успешно зарегистрировался в toodoo!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Параметры регистрации. Их можно задавать руками, или считывать из файла - на ваше усмотрение.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Dummy&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$email&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;dummy@yopmail.com&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;qwerty&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Выводим, что мы будем регать
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Логин: &lt;/span&gt;&lt;span class="si"&gt;$login&lt;/span&gt;&lt;span class="s2"&gt;, пароль: &lt;/span&gt;&lt;span class="si"&gt;$password&lt;/span&gt;&lt;span class="s2"&gt;, email: &lt;/span&gt;&lt;span class="si"&gt;$email&lt;/span&gt;&lt;span class="s2"&gt;&amp;lt;br/&amp;gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Регаем
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;register&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$login&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$password&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Успешно зарегистрирован&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;lt;b&amp;gt;Ошибка регистрации&amp;lt;/b&amp;gt;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Все!  ;-)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Весь код одним скриптом: &lt;a href="https://nevkontakte.com/files/toodoo.php_.txt"&gt;toodoo.php_.txt&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пишем простой авторегистратор. Часть 1 - инструментарий.</title>
      <link>https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html</link>
      <pubDate>Sun, 15 Nov 2009 00:03:50 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html</guid>
      <description>&lt;h3 id="содержание"&gt;Содержание&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-1-the-Toolkit.html"&gt;&lt;strong&gt;Инструментарий&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;Основы&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-3-struggling-with-captcha.html"&gt;Боремся с капчей&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;Подключаем антикапчу&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-5-confirmation-by-email.html"&gt;Подтверждение по email&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/2010/Write-a-simple-car-Part-6-write-to-RegSubmitter.html"&gt;Пишем модуль для RegSubmitter&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Прошло чуть меньше года с момента, когда я начал работать над &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;. За этот год было сделано очень многое, еще больше можно было бы сделать, но пока не хватило времени. Но самое главное, было получено огромное количество опыта, как в программировании, так и во впаривании результатов программирования :) В этой серии статей я хочу поделиться частью накопленного опыта и рассказать, как можно самому написать простой авторегистратор.&lt;/p&gt;
&lt;h3 id="введение-в-предмет"&gt;Введение в предмет.&lt;/h3&gt;
&lt;p&gt;Авторегистраторы нужны в тех случаях, когда требуется регулярно и в больших количествах получать аккаунты на том или ином сервисе и при этом объемы/лень не позволяют регистрировать их вручную. Например, белым/серым сеошникам нужны аккаунты в сервисах соцзакладок (для чего и предназначен RegSubmitter), дорвейщикам нужны акки на фрихостах, им всем нужны почтовые ящики для этих аккаунтов и т.д.&lt;/p&gt;
&lt;p&gt;В свою очередь, администраторы различных сервисов, вызывающих подобный интерес, не рады такой эксплуатации их детищ, поскольку зачастую пользы им от этого никакой, и всячески ставят палки в колеса при помощи капч, подтверждений на почту и т. д. В этом цикле я по очереди коснусь наиболее частых защит и методов их преодоления.&lt;/p&gt;
&lt;h3 id="инструментарий"&gt;Инструментарий.&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;PHP5&lt;/strong&gt; - в принципе, нет никакой разницы, на чем писать. Можно, к примеру, с точностью до синтаксических конструкций повторить этот учебник на python или C++. PHP5 выбран потому, что этот язык мне ближе всего и скрипты на нем можно много где запустить ;)&lt;/p&gt;
&lt;p&gt;Расширение &lt;strong&gt;curl&lt;/strong&gt; для &lt;strong&gt;PHP5&lt;/strong&gt; - самый удобный и гибкий способ работы с HTTP. В частности, отправки POST-запросов. В принципе, можно писать и на чистых сокетах, но это муторно, и те, кто в состоянии это сделать, в данном руководстве не нуждаются :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Firefox&lt;/strong&gt; с расширениями &lt;a href="http://getfirebug.com/"&gt;Firebug&lt;/a&gt; и &lt;a href="https://addons.mozilla.org/en-US/firefox/addon/60"&gt;Web Developer&lt;/a&gt; - в принципе, это не обязательно, но сильно упрощает анализ формы регистрации и поиск засад от вебмастеров сервисов.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Мозг&lt;/strong&gt;, &lt;strong&gt;руки&lt;/strong&gt; и &lt;strong&gt;текстовый редактор&lt;/strong&gt; - последний совершенно необходим для комфортного написания кода (поверьте моему опыту ;) ) и без первых двух вы сможете повторить этот учебник, но вряд ли сможете написать что-нибудь свое.&lt;/p&gt;
&lt;h3 id="upd"&gt;UPD.&lt;/h3&gt;
&lt;p&gt;Продолжение: &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-2-the-basics.html"&gt;Пишем простой авторегистратор. Часть 2 - основы.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS. А если вы по-прежнему не понимаете, зачем разноцветным сеошникам нужны авторегистраторы, то советую почитать &lt;a href="http://seofaq.ws/"&gt;FAQ по SEO&lt;/a&gt; от &lt;a href="http://homelerss.ru/"&gt;Бездомного Бродяги&lt;/a&gt;. Способствует просветлению мозгов, проверено на мне :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>blacksn0w: считанные секунды до анлока iPhone 3G с модемом 5.11.07</title>
      <link>https://nevkontakte.com/2009/blacksn0w-seconds-to-unlock-iPhone-3G-modem-5-nov-07.html</link>
      <pubDate>Tue, 03 Nov 2009 22:04:50 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/blacksn0w-seconds-to-unlock-iPhone-3G-modem-5-nov-07.html</guid>
      <description>&lt;p&gt;До релиза долгожданного анлока осталось чуть больше часа. Этого момента ждали многие владельцы &amp;ldquo;серых&amp;rdquo; йафонов. Ходили слухи, что анлока вообще не будет. Но &lt;a href="http://iphonejtag.blogspot.com/"&gt;Geohot&lt;/a&gt; все-таки сделал свое дело, за что ему всеобщее уважение и почет.&lt;/p&gt;
&lt;p&gt;Чуть раньше, сегодня утром анлок уже стал доступен тем, кто использовал blackra1n для джеилбрейка, а теперь он станет доступен и все остальным. Еще чуть-чуть и все страждущие смогут скачать &lt;del&gt;таблетку от жадности&lt;/del&gt; unlock для своего телефона :)&lt;/p&gt;
&lt;p&gt;PS. А то, каким вообще боком я к этому отношусь, я расскажу чуть позже. Сейчас слишком многое надо успеть.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Копейка рубль бережет.</title>
      <link>https://nevkontakte.com/2009/Pence-cares.html</link>
      <pubDate>Fri, 23 Oct 2009 22:13:40 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Pence-cares.html</guid>
      <description>&lt;p&gt;Летом, во время эпичного прикрытия хостера 3fn.ru я буквально на коленке сваял &lt;a href="https://nevkontakte.com/2009/Scripts-Google-Cache-Dumper-Bing-Cache-Dumper.html"&gt;скрипт для скачивания кеша гугля&lt;/a&gt; для определенного сайта и выставил на продажу по символической цене в $2. В первую очередь он предназначался тем, кто остался без бекапа и хочет спасти хоть что-то из своего сайта. На тетрапак кефира он мне принес денежку буквально сразу и затея была сочтена в целом удавшейся, хоть и не принесшей золотых гор. И была отложена на полку.&lt;/p&gt;
&lt;p&gt;Однако в последние пару недель почти каждый день продается по одной-две копии скрипта (при полном отсутствии пиара с моей стороны). Всего с момента публикации скрипт был куплен 32 раза. 32*$2 = $64. Неплохая отдача за пару часов работы летним вечерком? На мой взгляд, вполне. Вот, кстати, пассивный доход в чистом виде: за последние два месяца я только пару раз исправил найденные ошибки в скрипте, что заняло от силы минут двадцать на оба раза вместе.&lt;/p&gt;
&lt;p&gt;Тот же Regsubmitter, в который было вложено гораздо больше сил, пока имеет меньшую отдачу, хотя и составляет неплохую прибавку к кошельку.&lt;/p&gt;
&lt;p&gt;Какова мораль всего этого? Пишите маленькие утилитки, продавайте за копейку и пейте на вырученные деньги кефир. Это совсем несложно, но очень приятно.&lt;/p&gt;
&lt;p&gt;PS. Кефир - хорошая штука, кроме шуток.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Халява, сэр! ZoneAlarm Firewall.</title>
      <link>https://nevkontakte.com/2009/Freebie-sir-ZoneAlarm-Firewall.html</link>
      <pubDate>Tue, 13 Oct 2009 21:57:12 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Freebie-sir-ZoneAlarm-Firewall.html</guid>
      <description>&lt;p&gt;Ахтунг, вендузятнеги, халявщики и соучвствующие.&lt;/p&gt;
&lt;p&gt;Только сегодня, 24 часа &lt;a href="http://download.zonealarm.com/bin/free/sum/index-b.html?"&gt;раздаются халявные ключи&lt;/a&gt; на фаервол ZoneAlarm, весьма популярный за бугром. Один ключ можно юзать на трех машинах, арифметика простая ;-)&lt;/p&gt;
&lt;p&gt;Я уже затарился ключиком, чего и вам советую. Карман не тянет.&lt;/p&gt;</description>
    </item>
    <item>
      <title>В ожидании релиза: KDE или GNOME?</title>
      <link>https://nevkontakte.com/2009/In-anticipation-of-the-release-of-KDE-or-GNOME.html</link>
      <pubDate>Tue, 13 Oct 2009 18:50:11 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/In-anticipation-of-the-release-of-KDE-or-GNOME.html</guid>
      <description>&lt;p&gt;В ближайшем будущем ожидается целых два интересующих меня релиза: openSUSE 11.2 и Ubuntu 9.10. Первый дистрибудетив я уже не первый год использую как основную систему на настольном компьютере, а второй - на нетбуке.&lt;/p&gt;
&lt;p&gt;Честно говоря, я возлагаю большие надежды на эти апдейты и на то есть причины.&lt;/p&gt;
&lt;p&gt;В случае с openSUSE, предыдущий релиз 11.1 был откровенно сырым и напичканым нестабильным софтом. KDE 4.1, включенный в него изнаально вообще ни на то не годился по потреблению памяти (моим отношениям с KDE4 вообще можно посвятить целую книгу), KDE 3.5 всем поддерживать уже не охота и поэтому он начал ощутимо подглючивать и вдобавок половина софта, связанная с KDE, резко перелезла на QT4, что удобства и стабильности ему не добавило.&lt;/p&gt;
&lt;p&gt;В новой версии Ubuntu обещано было существенное ускорение работы, что меня, как пользователя нетбука, крайне волнует.&lt;/p&gt;
&lt;p&gt;Но речь не об этом. Как я сказал, KDE4 еще пока не вполне стабилен и меня не устраивает. Поддержку KDE3 в сусе уже успели слегка поломать в 11.1, а в 11.2 его кажется и вовсе не будет, из той же убунты его вообще давно выпилили нафиг. А меня, &lt;a href="https://nevkontakte.com/2009/KDEeebuntu-now-with-KDE3.html"&gt;старого любителя кедов&lt;/a&gt; и стабильности, такой расклад не радует. Между тем, на нетбуке я уже три месяца пользуюсь гномом и он вполне отвечает моим минималистическим вкусам, в то же время обеспечивая достойный внешний вид. Но с другой стороны, там нету некоторых очень нужных мне вещей, в частности Krusader&amp;rsquo;a, который умеет и ftp, и fish, и smb, и вкладки, и вообще много гитик. MC хорош всем, кроме того, что в нем нельзя одновременно редактировать больше одного файла и нельзя создавать много вкладок.&lt;/p&gt;
&lt;p&gt;Вот я и думаю: то ли с новым релизом попробовать пересесть на гном, то ли попытать снова счастья с KDE4, то ли пытаться поставить KDE3 и терпеть глюки, которые никто и никогда не исправит?..&lt;/p&gt;</description>
    </item>
    <item>
      <title>Заметки на манжетах.</title>
      <link>https://nevkontakte.com/2009/Notes-on-the-cuffs.html</link>
      <pubDate>Fri, 02 Oct 2009 22:42:13 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Notes-on-the-cuffs.html</guid>
      <description>&lt;p&gt;Времени мало, поэтому вместо полудюжины постов, которые по-хорошему надо написать, будут только отрывки.&lt;/p&gt;
&lt;h4 id="агс-17-а-нам-все-равно"&gt;АГС-17: а нам все равно.&lt;/h4&gt;
&lt;p&gt;Последнюю неделю только и шуму про &amp;ldquo;новый&amp;rdquo; фильтр Яндекса: СДЛы покосил, половину сателлитов - выкинул к черту, хрен снимешь, неадекватный фильтр и т.п.&lt;/p&gt;
&lt;p&gt;А вот меня он почти не задел. Из индекса почти вылетел только один сат по группе Pain, сделанный больше для души, а мои фирменные сателлиты (те самые, про которые я уже не раз упоминал) все в индексе без потерь, тьфу-тьфу. Поэтому сегодня за часик слепил еще один и оставил индексироваться :)&lt;/p&gt;
&lt;h4 id="сапа"&gt;Сапа.&lt;/h4&gt;
&lt;p&gt;Последний месяц не делал ровным счетом ничего, но доход вырос с 10 до 20 р/сут. Немного, но все равно неплохо. Единственное разумное объяснение, которое могу придумать - это то, что пресловутый АГС-17 выкосил шлак и большая доля ссылок пришлась на прочие сайты.&lt;/p&gt;
&lt;h4 id="фриланс"&gt;Фриланс.&lt;/h4&gt;
&lt;p&gt;На этой неделе передал одного хорошего, но несколько хлопотного заказчика другому коллеге-фрилансеру. Расстались, что называется друзьями. Удачи им, а я смогу больше времени посвятить своим проектам.&lt;/p&gt;
&lt;h4 id="блог"&gt;Блог.&lt;/h4&gt;
&lt;p&gt;Жив, не заброшен :) Просто учеба и работа оставляют совсем немного времени на него.&lt;/p&gt;
&lt;h3 id="позитив"&gt;Позитив!&lt;/h3&gt;
&lt;p&gt;У нас в универе стоит вот такая трибунка МТСа:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/Photo-0001.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/Photo-0001.jpg" alt="Photo-0001.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Передовые технологии связи, нечего сказать.&lt;/p&gt;
&lt;p&gt;PS. Посоветуйте, кстати, какой-нибудь нормальный тариф у МТСа без абонентки. Желательно посекундный. Ибо Джинс-007 уже совсем невыгодный.&lt;/p&gt;
&lt;p&gt;PPS. Песню к посту добавлять не буду, вместо него сегодня картинка выше ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ссылочный позитив!</title>
      <link>https://nevkontakte.com/2009/Reference-positive.html</link>
      <pubDate>Sun, 20 Sep 2009 12:20:57 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Reference-positive.html</guid>
      <description>&lt;p&gt;И так, я продолжаю &lt;a href="https://nevkontakte.com/2009/The-pair-of-references-for-the-positive.html"&gt;нести позитив&lt;/a&gt; себе любимому через позитив кому попало.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Семерка блоггеров&lt;/strong&gt; в лице Темыча в очередной раз рассказывает нам о &lt;a href="http://7bloggers.ru/samomotivaciya/"&gt;самомотивации&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Им вторят &lt;strong&gt;7 Леди&lt;/strong&gt;, призывая &lt;a href="http://7ladies.ru/izbavlyaemsya-ot-problemy-tvorcheski/"&gt;творчески избавляться от проблем&lt;/a&gt; и даже предлагая 7 вариантов, как это сделать.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SeoZebra&lt;/strong&gt;&lt;a href="http://seozebra.ru/2009/09/konec-otdyxa/"&gt;вернулся из отпуска&lt;/a&gt; и посылает луи энтузиазма окружающим.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Andrey K.&lt;/strong&gt; дает &lt;a href="http://wasting-money.blogspot.com/2009/09/gbm_19.html"&gt;отчет о посещаемости его GBM-блогов&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Netka&lt;/strong&gt; же сообщает нам об очередном &lt;a href="http://www.repeat-please.ru/2009/09/konkurs-dlya-doktora-xausa/"&gt;конкурсе&lt;/a&gt; &amp;ldquo;для Доктора Хауса&amp;rdquo;. Кстати, этот сериал у меня на слуху уже наверное с год, а все никак не посмотрю - мешает найденный чуть раньше Star Trek :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;И под конец особенно позитивная ссылка на &lt;a href="http://www.0t4.ru/"&gt;Информационно развлекательный портал 0t4&lt;/a&gt;. Вы спросите, что же в ней позитивного? Отвечу: она досталась почти победителю почти конкурса, что безусловно означает заметный вклад в средний позитив по больнице.&lt;/p&gt;
&lt;p&gt;Несмотря на выход из Nightwish, она продолжает радовать хорошими песнями.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cоздание и настройка аккаунта в PayPal. Альфа-банк.</title>
      <link>https://nevkontakte.com/2009/Create-and-configure-your-account-at-PayPal-Alfa-Bank.html</link>
      <pubDate>Fri, 18 Sep 2009 12:41:06 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Create-and-configure-your-account-at-PayPal-Alfa-Bank.html</guid>
      <description>&lt;p&gt;Причиной к написанию этой статьи послужила вставшая передо мною необходимость расплачиваться через PayPal.&lt;/p&gt;
&lt;p&gt;Эта система широко распространена за рубежом и довольна удобна в использовании, но в России долго оставалась за бортом по причине тотального недоверия к русским. Хотя недавно вроде бы основные ограничения на пользователей из России были сняты, потеснить WebMoney и Я.Деньги ему пока не удается и одна из причин - сложность настройки аккаунта. О ней и пойдет речь.&lt;/p&gt;
&lt;p&gt;Забегая вперед, скажу, что на получение всего необходимого для нормальной работы у меня ушло примерно 4 дня.&lt;/p&gt;
&lt;h3 id="исходные-данные"&gt;Исходные данные&lt;/h3&gt;
&lt;p&gt;У меня была на руках карта Visa Electron от Альфа-Банка, выданная год назад универом для начисления стипендии. Поскольку выдавались такие карты всему первому курсу разом, у меня были только сама карта и конвертик с ее номером и пин-кодом.&lt;/p&gt;
&lt;p&gt;Кроме того, в наличии было полное отсутствие опыта работы с пейпалом и мега-мотиватор системы &amp;ldquo;шило в заднице&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Для лентяев: &lt;a href="#summary"&gt;алгоритм действий без лишних букв&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="этап-первый-первичная-настройка"&gt;Этап первый: первичная настройка&lt;/h3&gt;
&lt;p&gt;Первой идеей было тупо взять мою карту и прикрутить к аккаунту на пейпале, как она есть. Однако тут меня постиг фейл, причем, как я выяснил в последствии, вполне ожидаемый: Visa Electron в принципе не предназначена для рассчетов через интернет.&lt;/p&gt;
&lt;p&gt;Поэтому я решил отправиться в банк и сделать себе &amp;ldquo;нормальную&amp;rdquo; карту, заодно разобравшись со статусом моей карточки и получив нормальный доступ к счету.&lt;/p&gt;
&lt;p&gt;В банке мне сказали, что для моих целей мне идеально подойдет виртуальная карта, которую можно в автоматическом режиме сделать через интернет-банк. Процедура подключения интернет-банка была элементарной: я на всякий случай строил из себя блондинку, чтобы в точности выяснить куда и как нажимать и что вводить, а вежливая девушка мне все подробно объясняла. Не отходя от кассы я сделал виртуальную карту (Мои карты → Выпустить карту), полюбовался на ее реквизиты и отправился домой, прихватив с собой распечатку с логином.&lt;/p&gt;
&lt;h3 id="этап-второй-привязка-карты"&gt;Этап второй: привязка карты&lt;/h3&gt;
&lt;p&gt;В принципе, процедура вполне тривиальная. В идеале она происходит так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Пейпал снимает с карты сумму порядка $2, в комментарии к транзакции указывает код подтверждения&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;p&gt;Но на практике в этой системе есть засада (по крайней мере в случае Альфа-Банка). На втором этапе вы увидите, что транзакция имеет статус &lt;em&gt;HOLD&lt;/em&gt;, и комментария с секретным кодом к ней не видно.&lt;/p&gt;
&lt;p&gt;Я снова пошел в банк. Там мне сказали, что это нормально и холд снимется 23-го сентября, а может и раньше. Тогда, мол, и увидите ваш код. Напоследок мне вручили распечатку с точно той же картиной, как и в интернет-банке.&lt;/p&gt;
&lt;p&gt;Но ждать почти две недели мне не хотелось, и я стал мучать гугль. Гугль поломался-поломался и наконец сообщил, что можно попробовать позвонить в колл-центр банка, там сидят более крутые товарищи, чем в провинциальных отделениях и они могут помочь. Звонить, так звонить, благо телефон бесплатный по России.&lt;/p&gt;
&lt;p&gt;Когда я уже почти наизусть выучил песню Луи Армстронга &amp;ldquo;Go down, Moses&amp;rdquo;, ответившая мне девушка в ультимативном порядке заявила, что для того, чтобы она начала отвечать на вопросы, мне надо подключить &amp;ldquo;мобильный банкинг&amp;rdquo;, а одного кодового слова ей мало. А потом обращайтесь снова. ОК, босс, я - образец лояльности, буду подключать. Спустя пять минут, потраченные на установку пароля, я получил возможность доучить песню. Когда я уже вовсю фальшиво подпевал королю джаза, мне ответила очередная девушка, сообщившая мне вожделенный код. Спустя пять минут PayPal радостно подтвердил, что теперь он мне верит и я пошел спать, ибо было уже 12 ночи.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Я в контакте!</title>
      <link>https://nevkontakte.com/2009/I-am-in-touch.html</link>
      <pubDate>Tue, 15 Sep 2009 16:35:01 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/I-am-in-touch.html</guid>
      <description>&lt;p&gt;Не ожидали?&lt;/p&gt;
&lt;p&gt;И я не ожидал. Но сегодня мне поведали, что &amp;ldquo;меня выложили в контакте&amp;rdquo; (дословно). Получается парадокс - с одной стороны меня в контакте нет, не было и не будет, а с другой - вроде бы теперь есть. При чем самое забавное, что я даже не представляю, где же я там есть :)&lt;/p&gt;
&lt;p&gt;Спасает одно - я там не регистрировался и моральную ответственность за безответственность других личностей как бы имею право не нести.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Результаты конкурса по угадыванию результатов конкурса.</title>
      <link>https://nevkontakte.com/2009/The-results-of-the-competition-for-guessing-the-results-of-the-competition.html</link>
      <pubDate>Sat, 12 Sep 2009 17:12:19 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/The-results-of-the-competition-for-guessing-the-results-of-the-competition.html</guid>
      <description>&lt;p&gt;И так, Павел наконец &lt;a href="http://www.prodvinemvmeste.ru/krossvord/konkurs-krutye-bloggery-ii-itogi.htm#comment-10608"&gt;огласил&lt;/a&gt; финальный рейтинг конкурса &amp;ldquo;&lt;a href="http://www.prodvinemvmeste.ru/news/krutye-bloggery-ii.htm"&gt;Крутые блоггеры II&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Следовательно, пришло время огласить результаты &lt;a href="https://nevkontakte.com/2009/The-pair-of-references-for-the-positive.html"&gt;конкурса по угадыванию моего места в конкурсе&lt;/a&gt; :)&lt;/p&gt;
&lt;p&gt;Единственное предположение поступило от 0t4, но и он немного промахнулся. Я занял первое место, а не второе 8) Тем не менее, позитивная ссылка таки достанется ему, как высказавшему наиболее близкую догадку ;)&lt;/p&gt;
&lt;p&gt;0t4, если есть желание уточнить, на какой сайт ставить ссылку, то пиши мне с того же адреса, что ты указал при написании коммента. Если к моменту публикации поста с позитивными ссылками я ничего не получу - поставлю ссылку на 0t4.ru.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mobster World: рецепт успеха или мелкие хитрости.</title>
      <link>https://nevkontakte.com/2009/Mobster-World-a-recipe-for-success-or-shortcuts.html</link>
      <pubDate>Thu, 10 Sep 2009 22:32:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Mobster-World-a-recipe-for-success-or-shortcuts.html</guid>
      <description>&lt;p&gt;Несколько дней назад наткнулся на браузерную игрушку &lt;a href="http://bit.ly/17OHNL"&gt;MobsterWorld&lt;/a&gt;. Идея проста до безобразия: тебе надо развиться от слабого бандита-одиночки и крупного прокачанного гангстера и &lt;del&gt;награбить корованов&lt;/del&gt; заработать тучу денег. За эти несколько дней игры я сумел вычислить основные приемы, которые позволят прокачаться легко и непринужденно.&lt;/p&gt;
&lt;p&gt;Но для начала кратко изложу механику игры. Персонаж обладает пятью характеристиками: атака (attack), защита (defence), здоровье (health), силы (energy) и выносливость (stamina). Назначение первых трех особых комментариев не требует, последние две выполняют одну и ту же роль для двух действий: выносливость расходуется во время драки (одна единица выносливости дает возможность один раз подраться), а силы тратятся на &amp;ldquo;работу&amp;rdquo;. Друг на друга они не влияют.&lt;/p&gt;
&lt;p&gt;В природе существует три типа персов: магнат (tycoon), толстокожий (bulletproof) и бодрячок (insomniac). У первого быстрее восстанавливаются деньги, у второго - выносливость, у третьего - силы.&lt;/p&gt;
&lt;p&gt;Теперь о самом сокровенном - о деньгах. Источников в игре четыре:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;ldquo;Работа&amp;rdquo; (jobs) - осуществление всяких черных делишек. Разная работа приносит разное количество опыта и денег и требует разное количество энергии.&lt;/li&gt;
&lt;li&gt;Драки (fight) - драки с другими пользователями. Профит зависит от уровня противника, исхода битвы и рандома, в случае фейла он отрицательный. Исход зависит от твоей атаки, защиты и соответствующих показателей противника.&lt;/li&gt;
&lt;li&gt;Недвижимость (Property) - купленная недвижимость раз в какое-то время приносит деньги. Сумма зависит от типа и количества оной. Один тип можно закупать сколько угодно раз, профит суммируется.&lt;/li&gt;
&lt;li&gt;Крестный Отец (godfather) - некая сущность, которая в обмен на &amp;ldquo;респекты&amp;rdquo; (respect points) дает разные приятные штучки, в т. ч. деньги. Но поскольку респекты копятся адски медленно, существенного влияния он на игру не оказывает.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;### А теперь советы.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Тип перса выбираем &amp;ldquo;бодрячка&amp;rdquo; (Insomniac). Силы в игре являются самым большим дефицитом, поэтому данный тип будет очень кстати.&lt;/li&gt;
&lt;li&gt;При распределении очков на каждом уровне делите их пополам между силой и выносливостью. Изначального здоровья вполне достаточно, а атаку и защиту можно сколь угодно повысить за счет закупки различного оружия.&lt;/li&gt;
&lt;li&gt;Как ни странно, самым выгодным капиталовложением будет покупка второго по стоимости здания - Rent House, оно приносит по $300 при стоимости $10000. Это намного выгоднее, чем у всех остальных зданий в игре, поэтому на все свободные финансы тратим на массовую закупку именно его.&lt;/li&gt;
&lt;li&gt;Доктор за лечение всегда требует примерно 20% вашей налички, поэтому прежде чем идти лечиться потратьтесь на все, что нужно.&lt;/li&gt;
&lt;li&gt;Привлекайте рефов. Каждый реф - это +1 к размеру вашей банды и, следовательно, боевой мощи. Кроме того, для некоторых видов работы нужна солидная банда.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Отдельно опишу алгоритм наиболее выгодной драки.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Выбирайте противника на пару уровней ниже вашего с бандой не превосходящей вашу собственную. Тогда ваши шансы на успех очень велики.&lt;/li&gt;
&lt;li&gt;Список кандидатов на драку выводится рандомный, но это не беда. Находим подходящего кандидата, жмем Fight&lt;/li&gt;
&lt;li&gt;Если профит был достаточно высок, то просто начинаем обновлять страницу - таким образом мы будем методично выколачивать финансы и экспу из жертвы.&lt;/li&gt;
&lt;li&gt;Когда средняя выручка с нескольких последних драк становится неудовлетворительно маленькой, идем к пункту 1.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вот и все. Дорога к мировому господству открыта. &lt;a href="http://bit.ly/17OHNL"&gt;Присоединяйтесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;UPD. Забавно, что вскоре после публикации этого поста алгоритмы были скореектированы так, что цена недвижимости растет пропорционально количеству уже имеющейся у вас недвижимости.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Посоветуйте клавиатуру с тачпадом. Конкурс inside.</title>
      <link>https://nevkontakte.com/2009/Advise-the-keyboard-with-touchpad-Competition-inside.html</link>
      <pubDate>Thu, 10 Sep 2009 20:18:29 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Advise-the-keyboard-with-touchpad-Competition-inside.html</guid>
      <description>&lt;p&gt;Моя нынешняя клавиатура стала совершенно невыносимой, а мышь просто забодала своим неудобством: это ж надо - всякий раз тынуть руку, возюкать по всему столу, тащить руку обратно к клаве. В общем, назрела смена девайса,  а поэтому прошу совета.&lt;/p&gt;
&lt;p&gt;Есть два варианта выхода: купить обычную клаву (хочу с подсветкой, уже даже приглядел модель) и UBS-тачпад или клаву с овстроенным тачпадом. Если кому-то ведомы такие девайсы и их можно добыть в магазинах, прошу назвать модели.&lt;/p&gt;
&lt;p&gt;Требований всего два: чтобы на клаве клавиши были ал-ля ноутбучные и раскладка нормальная, а не ужатая, как на ноутах. То, что такие девайсы существуют в природе, я знаю точно - сам видел, но, к сожалению, не на прилавке.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;А теперь конкурсная часть: тот, кто посоветует тот девайс, который я в конечном счету куплю, получит $5.&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Пара ссылок для позитива.</title>
      <link>https://nevkontakte.com/2009/The-pair-of-references-for-the-positive.html</link>
      <pubDate>Sun, 06 Sep 2009 20:49:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/The-pair-of-references-for-the-positive.html</guid>
      <description>&lt;p&gt;Я уже давно не &lt;a href="https://nevkontakte.com/2009/5-good-links.html"&gt;делал добрые дела&lt;/a&gt;, а все потому, что настроение и так хорошее и не особо нуждается в поддержке :) Тем не менее, сегодня будет очередная порция ссылок. Правда, они выбраны были не из RSS ридера, а просто по разным причинам, хотя приносят позитива не меньше.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.prodvinemvmeste.ru/sovety/perenos-sajta-na-novyj-domen-s-minimalnymi-poteryami.htm" title="Перенос сайта на новый домен с минимальными потерями"&gt;Перенос сайта на новый домен с минимальными потерями&lt;/a&gt; - это мой гостевой пост для конкурса &amp;ldquo;Крутые Блоггеры II&amp;rdquo;. Пост вошел в число призеров, и немудрено: я старался, даже скрипт написал :) Место, которое он занял, я оглашать не стану, пока список победителей не будет опубликован самим Павлом. Буду сохранять интригу, так сказать.&lt;/p&gt;
&lt;p&gt;Вам же предлагаю попробовать угадать место - первый угадавший в обязательном порядке получит ссылку со следующего позитивного поста.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Декус проводит &amp;ldquo;&lt;a href="http://dekusworld.ru/manimejkerstvo/orgua-marafon-i-xitryj-konkurs-na-dengi/"&gt;org.ua марафон&lt;/a&gt;&amp;rdquo; - беспрецедентную акцию по загаживанию и этой доменной зоны :) Сапоненавистники негодуют. Для прочих сообщу, что бесплатные домены третьего уровня в .ru тоже успешно поддаются засиранию, в чем я даже имею скромные успехи.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&amp;ldquo;&lt;a href="http://www.drugrevenue.com/forum/?referrerid=545"&gt;Флуд тоже труд&lt;/a&gt;&amp;rdquo;. Именно так считают овнеры партнерки &lt;strong&gt;DRUGREVENUE.com&lt;/strong&gt; и в награду за тяжкий труд предлагают флудерам макбуки, айфоны, футболки и даже виагру. Любопытно, сколько людей получит последнюю :) Если вы хотите помочь мне получить &lt;del&gt;виагру&lt;/del&gt; макбук - вперед по &lt;a href="http://www.drugrevenue.com/forum/?referrerid=545"&gt;ссылке&lt;/a&gt; и не задерживаясь - на регистрацию. А после этого читайте &lt;a href="http://www.drugrevenue.com/forum/f19/drugrevenue-com-t169/"&gt;условия акции&lt;/a&gt; и вливайтесь в ряды флудеров.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;PS. Фарма-песенка на закуску.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Спамеры, что с вами делать?</title>
      <link>https://nevkontakte.com/2009/Spammers-what-to-do-with-you.html</link>
      <pubDate>Fri, 04 Sep 2009 21:40:57 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Spammers-what-to-do-with-you.html</guid>
      <description>&lt;p&gt;Возникло у меня чувство, что мой блог попал в спамерские базы. Последнее время приходится сносить кучу говнокомментов и узалять говноссылки из половины оставшихся.&lt;/p&gt;
&lt;p&gt;В этом плане особенно отличились две сволочи: сателитчики-повара со своими бесконечными говноблогами и говнопиарщики какого-то тупого бизнес-каталога. При чем если от сателитчиков поступают более-менее адекватные комментарии сообразно посту, то от вторых идет вообще тупейший шлак в духе &amp;ldquo;спасибо, хороший пост&amp;rdquo;.&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;</description>
    </item>
    <item>
      <title>Новый seo-конкурс.</title>
      <link>https://nevkontakte.com/2009/New-seo-contest.html</link>
      <pubDate>Wed, 02 Sep 2009 16:50:43 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/New-seo-contest.html</guid>
      <description>&lt;p&gt;Начался. Но в основе галимая реклама и только. Да и по другим пунктам он УГ. Поэтому ничего больше про него писать не буду.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Итоги акции: Бесплатный хостинг трем сайтам.</title>
      <link>https://nevkontakte.com/2009/The-results-of-the-promotion-Free-hosting-three-sites.html</link>
      <pubDate>Tue, 01 Sep 2009 22:55:28 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/The-results-of-the-promotion-Free-hosting-three-sites.html</guid>
      <description>&lt;p&gt;И так, школьники отпраздновали первое сентября, студенты попрощались с вольной
жизнью и я подвел итоги &lt;a href="https://nevkontakte.com/2009/Free-hosting-three-good-sites.html"&gt;акции&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Если кто не помнит, на кону были три пригласительных кода на бесплатный хостинг
&lt;a href="http://eomy.net"&gt;EOMY.net&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Барабанная дробь! Победители&amp;hellip;&lt;/p&gt;
&lt;p&gt;Отсутствуют! По техническим причинам - на конкурс не поступило ни одной заявки.
&lt;del&gt;Вот и делай добро людям.&lt;/del&gt; Видимо, хреновый из меня пиарщик.&lt;/p&gt;
&lt;p&gt;Что ж. Облом - тоже результат, и следует попытаться понять, а почему он,
собственно случился.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;По-видимому, первое место занимает уже упомянутая причина - слабый пиар.
Был сделан анонс на этом блоге, на
&lt;a href="http://www.repeat-please.ru/2009/08/razdaetsya-besplatnyj-xosting/"&gt;Repeat-Please&lt;/a&gt;,
в &lt;a href="http://x.com/Nevkontakte"&gt;твиттере&lt;/a&gt; и создана
&lt;a href="http://talk.maulnet.ru/topic32635s0.html"&gt;темка&lt;/a&gt; на маулнете.&lt;/li&gt;
&lt;li&gt;Страшные на вид условия. Пожалуй, глупо было предлагать в
сеошно-манимейкерской среде хостинг с условием, что сайт должен быть
некоммерческий.&lt;/li&gt;
&lt;li&gt;Плохая карма. Я уже не в первый раз пытаюсь устроить раздачу халявы.
Неоднократно это проделывалось с &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;&amp;lsquo;ом,
но отклик всегда был невелик.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;ldquo;Песня, полная паранойи&amp;rdquo; ©&lt;/p&gt;</description>
    </item>
    <item>
      <title>Генератор текстов по Маркову</title>
      <link>https://nevkontakte.com/2009/Text-generator-for-Markov.html</link>
      <pubDate>Sun, 30 Aug 2009 13:40:16 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Text-generator-for-Markov.html</guid>
      <description>&lt;p&gt;На днях решил слегка расширить сферу деятельности и поэкспериментировать с дорвеями. Естественно, встала нужда в промышленном генераторе говнотекстов. Обзор существующих инструментов привел к неудовлетворительным результатам, ибо они были либо медленные, либо феноменально неудобные.&lt;/p&gt;
&lt;p&gt;Угадайте, что я сделал? Да, именно так. Написал свой генератор, с блекджеком и шлюхами. В результате имеем:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Минималистичный интерфейс.&lt;/li&gt;
&lt;li&gt;Кросс-платформенность, благодаря тому, что он написан на python.&lt;/li&gt;
&lt;li&gt;Поддержка словоформ (русифицированный стеммер Портера). Опционально.&lt;/li&gt;
&lt;li&gt;Работает пока только с текстами в utf-8.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Тест на скорость показал следующий результат:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Вход: 1,8 мб, стемминг включен, процессор Core2Duo 3ГГц.&lt;/li&gt;
&lt;li&gt;Выход: 150000 слов, 1,6 мб, 1 минута.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Без стемминга выходит еще быстрее, что в принципе неудивительно.&lt;/p&gt;
&lt;p&gt;Скачать и следить за обновлениями можно на &lt;a href="http://code.google.com/p/pymarkov/"&gt;странице проекта&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Бесплатный хостинг трем хорошим сайтам!</title>
      <link>https://nevkontakte.com/2009/Free-hosting-three-good-sites.html</link>
      <pubDate>Wed, 19 Aug 2009 16:56:46 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Free-hosting-three-good-sites.html</guid>
      <description>&lt;p&gt;По случаю &lt;a href="https://nevkontakte.com/2009/101-the-subscriber.html"&gt;преодоления&lt;/a&gt; рубежа в 100 подписчиков на этом блоге решил сделать небольшой подарок хорошим людям.&lt;/p&gt;
&lt;p&gt;Возможно вы заметили, что у меня в подвале имеется такая ссылочка: &amp;ldquo;Бесплатный хостинг от &lt;a href="http://www.eomy.net/"&gt;EOMY.NET&lt;/a&gt;&amp;rdquo;. Имеется она там неспроста - мой блог с самого своего рождения живет на этом хостинге. Скажу больше, он и дальше будет здесь жить, несмотря на то, что я уже давно располагаю платными хостинговыми аккаунтами и даже парой VPS. Почему? Да потому что он меня абсолютно устраивает: стабильный, с хорошим аптаймом и адекватной техподдержкой - даст фору многим платным хостингам.&lt;/p&gt;
&lt;p&gt;Так вот, я располагаю тремя пригласительными кодами на этот чудесный хостинг и готов поделиться ими с вами на следующих условиях:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Реально полезный сайт для людей. Полупустые блоги, гс, сплоги и хомяки даже не рассматриваются. Сайт должен обладать &lt;em&gt;индивидуальностью&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Сайт некоммерческий. Если сайт сделан для получения прибыли - часть ее можно потратить и на хостинг.&lt;/li&gt;
&lt;li&gt;Сайт должен удовлетворять &lt;a href="http://www.eomy.net/forum/usloviya-predostavleniya-uslug-besplatnogo-hostinga-vt456.html"&gt;этим требованиям&lt;/a&gt;, а так же &lt;a href="http://www.eomy.net/tos.php"&gt;TOS хостинга&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Выглядит страшно, но поверьте, эти правила не обременительны :)&lt;/p&gt;
&lt;p&gt;А теперь о том, как собственно принять участие.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Вставляете в любое место шаблона сайта код &lt;code&gt;&amp;lt;!-- invite me to eomy --&amp;gt;&lt;/code&gt;. Если я не найду этого кода на главной странице - сочту что сайт не ваш и вы пытаетесь меня обмануть ;)&lt;/li&gt;
&lt;li&gt;Пишете мне на почту &lt;img src="https://nevkontakte.com/files/email.gif" alt="my email"&gt; или в комментарии к этому посту описание вашего сайта и то, почему он непременно должен получить инвайт. Ну и, конечно, контакты, как с вами связаться.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Акция продлится до &lt;strong&gt;31-го августа&lt;/strong&gt;! 1 сентября я выберу три больше всего понравившихся мне сайта и их владельцы получат инвайты.&lt;/p&gt;</description>
    </item>
    <item>
      <title>101 подписчик.</title>
      <link>https://nevkontakte.com/2009/101-the-subscriber.html</link>
      <pubDate>Mon, 17 Aug 2009 18:55:13 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/101-the-subscriber.html</guid>
      <description>&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen16.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen16.jpg" alt="screen16.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Трам-пам-пам! На преодоление этого рубежа понадобилось полтора года. Если учесть полное отсутствие целенаправленной раскрутки, то неплохо. Надо будет по этому поводу что-нибудь устроить.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RU домены: Большой брат хочет знать тебя в лицо.</title>
      <link>https://nevkontakte.com/2009/RU-domains-Big-brother-wants-to-know-you-in-person.html</link>
      <pubDate>Mon, 17 Aug 2009 13:23:02 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/RU-domains-Big-brother-wants-to-know-you-in-person.html</guid>
      <description>&lt;p&gt;Баланс добра и зла должен сохраняться. Этого мнения придерживается не только Ночной Дозор, но и Кординационный центр нашей доменной зоны.&lt;/p&gt;
&lt;p&gt;На фоне &lt;a href="http://www.cctld.ru/ru/news/news_detail.php?ID=524"&gt;положительной новости&lt;/a&gt;, легализующей обширную практику продажи рушек за ~100 р:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Изменения, вступающие в силу с 15 августа 2009 года&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;С 15 августа 2009 года на услуги по регистрации и продлению срока регистрации доменных имен в домене RU устанавливается &lt;strong&gt;рекомендованная&lt;/strong&gt; цена для конечных пользователей в размере 500 и 350 рублей соответственно, не включая налог на добавленную стоимость.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Имеет место гораздо менее приятное нововведение:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;С 1 октября 2009 года при заключении договора администраторам доменных имен помимо идентификационных данных необходимо предоставлять регистратору документы, подтверждающие сообщаемые данные&lt;/strong&gt; (п. 5.2. Правил). Порядок и способы передачи документов регламентируются регистратором. По усмотрению регистратора для идентификации администратор может предоставлять простые копии документов, однако регистратор вправе затребовать предоставление нотариально заверенных копий документов. Регистратор доменных имен обеспечивает хранение копий предоставленных администратором документов в электронном или бумажном виде в течение всего срока действия Договора, а также в течение трех лет после его окончания.&lt;/p&gt;
&lt;p&gt;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;С 1 октября 2009 г.&lt;/strong&gt; расширяется список операций с доменным именем, которые Администраторы, заключившие договор с регистратором до 1 октября 2009 года, имеют возможность предоставить документы, подтверждающие идентификационные данные, &lt;strong&gt;до 1 апреля 2010 года.&lt;/strong&gt; В период с 1 октября 2009 г. до 1 апреля 2010 г. заявки на регистрацию новых доменных имен таких администраторов будут обрабатываться регистраторами в прежнем порядке.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Что из этого следует? А то, что если раньше сканы паспорта требовали лишь когда у регистратора были сомнения по поводу личности клиента, то сейчас их нужно будет предоставить &lt;em&gt;сразу&lt;/em&gt;, а если возникнут сомнения - будьте любезны, шлите нотариально заверенную копию. Или, если регистратор особо православный, сразу заверенную копию.&lt;/p&gt;
&lt;p&gt;Не нужно быть гением, чтобы усмотреть в этом продолжение правительственной идеи-фикс по легализации и обложении податями всего, что является бизнесом в интернете, похоже на бизнес в интернете или может навести на мысли о бизнесе в интернете. Размещение рекламы тоже, кстати, является коммерческой деятельностью. Ведь теперь для любого коммерческого сайта у них будет информация по паспортным данным владельца домена и почтовый адрес, куда слать повестку в суд по поводу уклонения от налогов. В этой трактовке событий я далеко &lt;a href="http://lasto.com/blog/comment_1249997400.html"&gt;не уникален&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;А теперь внимание, вопрос: сколько у вас зарегистрировано доменов в зоне RU? А сколько из них могут &lt;em&gt;навести на мысли о бизнесе в интернете&lt;/em&gt;?&lt;/p&gt;
&lt;p&gt;Что же делать? Теоретически, можно не делать ничего до 1 апреля следующего года, а там выкручиваться по обстоятельствам. К тому времени будет точно ясно какие документы и как надо подавать и как их подделать. Но лично мне не хочется рисковать, тем более, что у меня &lt;a href="http://regsubmitter.ru"&gt;есть сайты&lt;/a&gt;, которые могут навести на мысли&amp;hellip; ну вы поняли. Так что, мой любознательный Брат, придется мне мигрировать куда подальше от твоего длинного носа.&lt;/p&gt;
&lt;p&gt;Напрашивается вывод, что надо менять домен, пока не поздно, вопрос о сложностях переедза на новый домен с точки зрения поисковиков пока отложим. Но на что менять? Очевидно, на одну из общих зон типа .com, .net, .org, .info и т.п. Они не лежат в пределах досягаемости нашего правительства и по идее проблем не сулят. Но у них есть свой недостаток - они раза в три дороже РУшек. &lt;strong&gt;Возможно, есть более дешевые и благозвучные доменные зоны?&lt;/strong&gt; Буду благодарен за подсказку.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 добрых ссылок.</title>
      <link>https://nevkontakte.com/2009/5-good-links.html</link>
      <pubDate>Mon, 10 Aug 2009 09:57:01 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/5-good-links.html</guid>
      <description>&lt;p&gt;Продолжаем-продолжаем! Еще пять ссылок на последние посты из моего ридера в пользу хорошего настроения!&lt;/p&gt;
&lt;p&gt;Поехали:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;MasterX пишет, &lt;a href="http://bablorub.blogspot.com/2009/08/blog-post_10.html"&gt;почему вы не можете уснуть&lt;/a&gt;. Ну, в моем случае чаще всего причина - &amp;ldquo;не устал&amp;rdquo;. Если весь день нифига не делал, то с чего вдруг будешь хотеть спать? К счастью, такие дни бывают не очень часто.&lt;/li&gt;
&lt;li&gt;Chode делится &lt;a href="http://dotcash.ru/2009/08/dlya-vebmastera-spisok-imen-i-familij/"&gt;списком женских и мужских имен и фамилий&lt;/a&gt;. Полезная в хозяйстве штука.&lt;/li&gt;
&lt;li&gt;А Сеоштейн просто &lt;a href="http://seostain.ru/index.php?itemid=137"&gt;торгует тапками&lt;/a&gt; ;) Откровенно говоря, рекламная кампания Drugrevenue уже несколько надоедает.&lt;/li&gt;
&lt;li&gt;Тормоз &lt;a href="http://brokenbrake.biz/2009/08/09/skazki"&gt;продает сказки в реале&lt;/a&gt;. Любопытный подход - продвигать партнерку на улице. Но очень приятен тем, что никакой конкуренции и борьбы за топ.&lt;/li&gt;
&lt;li&gt;Павел aka ProdvinemVmeste делится &lt;a href="http://www.prodvinemvmeste.ru/news/poleznye-ssylki-post-7.htm"&gt;6-ю ссылками на полезные посты&lt;/a&gt;. На него, кстати я что-то уж очень давно не ссылался, поэтому поставлю две &lt;a href="http://www.prodvinemvmeste.ru/"&gt;ссылки&lt;/a&gt; :)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ко мне пришел позитив, а к вам?&lt;/p&gt;</description>
    </item>
    <item>
      <title>FakeBurner - Имитатор счетчика FeedBurner</title>
      <link>https://nevkontakte.com/2009/FakeBurner-Simulator-counter-FeedBurner.html</link>
      <pubDate>Wed, 05 Aug 2009 20:55:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/FakeBurner-Simulator-counter-FeedBurner.html</guid>
      <description>&lt;p&gt;Как я &lt;a href="https://nevkontakte.com/2009/Zebrum-Bloglike-1-1-4-1-RegSubmitter-1-3-1.html"&gt;обещал&lt;/a&gt;, выкладываю отдельный скрипт &lt;strong&gt;FakeBurner&lt;/strong&gt;. Фитчи:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Большое визуальное сходство с настоящим счетчиком от FakeBurner.&lt;/li&gt;
&lt;li&gt;Конечно, вы сами можете задать отображаемое количество &amp;ldquo;читателей&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Для пущего реализма, цифра на счетчике может со временем слегка меняться. Максимальное отклонение от среднего числа читателей тоже можно задать.&lt;/li&gt;
&lt;li&gt;Как и у настоящего счетчика, есть возможность задать цвет фона и текста.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Системные требования:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PHP5&lt;/li&gt;
&lt;li&gt;GD2&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Скрипт выкладываю для свободного пользования с одним условием: уважайте мой труд и копирайты ;)&lt;/p&gt;
&lt;p&gt;Скачать скрипт: &lt;a href="https://gist.github.com/nevkontakte/e4f7274f6975c3c754f10dff025a1dae"&gt;fc.php&lt;/a&gt;&lt;/p&gt;
&lt;!-- /files/fc.php_.txt --&gt;
&lt;p&gt;P.S. Моральную и прочую ответственность за введенных в заблуждение посетителей автор не несет.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RegSibmitter.ru и zebrum.net.ru лежат.</title>
      <link>https://nevkontakte.com/2009/RegSibmitter-ru-and-zebrum-net-ru-lie.html</link>
      <pubDate>Wed, 05 Aug 2009 19:28:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/RegSibmitter-ru-and-zebrum-net-ru-lie.html</guid>
      <description>&lt;p&gt;VDS-провайдер всвязи с миграцией на другую систему управления перестал предоставлять свои NS-сервера, а я вовремя не озаботился организацией собственных.&lt;/p&gt;
&lt;p&gt;В результате почти все сайты, которые лежали на той VPS, включая regsubmitter.ru и zebrum.net.ru, вчера стали окончательно недоступны. Сейчас я уже все настроил и у многих из вас наверняка даже все заработает, если нет - приется ждать обновления кеша DNS.&lt;/p&gt;
&lt;p&gt;В общем, я в курсе проблем и уже сделал все, что необходимо для их решения, остается только ждать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Еще 5 ссылок в пользу хорошего настроения.</title>
      <link>https://nevkontakte.com/2009/Another-5-links-in-favor-of-good-mood.html</link>
      <pubDate>Mon, 03 Aug 2009 13:56:01 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Another-5-links-in-favor-of-good-mood.html</guid>
      <description>&lt;p&gt;Врут, что физический труд стимулирует умственную деятельность. Наоборот, он стимулирует усталость, лень и плохое настроение. Так что буду &lt;a href="https://nevkontakte.com/2009/5-links-for-no-sweat.html"&gt;продолжать&lt;/a&gt; поднимать себе настроение, 5 последних постов в моей RSS читалке.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Маулнет устами Алексея Терехова повествует о том, &lt;a href="http://maulnet.ru/archives/4712"&gt;как грамотно принять продвижение сайта от другого оптимизатора&lt;/a&gt;. Вообще, заметил, что этим летом прямо-таки вал гостевых постов. Известные блоггеры ленятся и в угоду лени дают другим возможность попиариться за их счет :) Ну и пусть.&lt;/li&gt;
&lt;li&gt;А madbirdy просто &lt;a href="http://madbirdy.ru/2009/08/02/184/"&gt;проверяет работоспособность блога&lt;/a&gt; на новом хостинге.&lt;/li&gt;
&lt;li&gt;4 дня назад он же &lt;a href="http://madbirdy.ru/2009/07/30/181/"&gt;просил&lt;/a&gt; его не терять, ибо переезжать будет. Но по-видимому из-за недоступности блога в Бомжеленту это предупреждение попало только сейчас.&lt;/li&gt;
&lt;li&gt;Бездомный бродяга предвидит, что &lt;a href="http://homelerss.ru/post/without-pants.html"&gt;останется без штанов&lt;/a&gt; и надеется, что это заставит его работать по-настоящему.&lt;/li&gt;
&lt;li&gt;Repeat, Please &lt;a href="http://www.repeat-please.ru/2009/08/kak-potratit-10/"&gt;анонсирует&lt;/a&gt; мини-конкурс от Виташока &amp;ldquo;&lt;a href="http://vitashok.com/?p=238"&gt;Куда потратить $10?&lt;/a&gt;&amp;rdquo;. Вестимо куда, начать крутой стартап :)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Настроение слегка исправилось, теперь надо заняться делом.&lt;/p&gt;</description>
    </item>
    <item>
      <title>5 ссылок за нефиг делать.</title>
      <link>https://nevkontakte.com/2009/5-links-for-no-sweat.html</link>
      <pubDate>Sat, 01 Aug 2009 12:40:52 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/5-links-for-no-sweat.html</guid>
      <description>&lt;p&gt;Давно я не делал мелких добрых дел просто так, для собственного удовольствия. Пришло время поправить положение. С сегодняшнего дня я буду периодически открывать RSS-читалку и публиковать ссылки на последние пять постов, которые там будут, если посты интересные, то даже с анонсами. Вот такой бесплатный позитив.&lt;/p&gt;
&lt;p&gt;И так, первые пять ссылок в студию!&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;zxc&lt;/strong&gt; решил перейти на &lt;a href="http://xekcc.com/2009/07/4-%D0%B5%D1%85-%D1%87%D0%B0%D1%81%D0%BE%D0%B2%D0%BE%D0%B9-%D1%80%D0%B0%D0%B1%D0%BE%D1%87%D0%B8%D0%B9-%D0%B4%D0%B5%D0%BD%D1%8C/"&gt;4-х часовой рабочий день&lt;/a&gt;. Жаль, у меня так не получится&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Алексей Качаев&lt;/strong&gt; сообщает всем, что &lt;a href="http://www.kachayev.ru/2009/07/31/vyshel-zend-framework-190/"&gt;вышел Zend Framework 1.9&lt;/a&gt;. Я, кстати, давно уже собирался к нему, фреймворку, присмотреться, но все руки не доходили. Возможно, время пришло.&lt;/li&gt;
&lt;li&gt;А &lt;strong&gt;Девушка Хирург&lt;/strong&gt; написала интересный гостевой пост у 7-ми блоггеров, про &lt;a href="http://7bloggers.ru/o-polze-videorolikov-dlya-privlecheniya-posetitelej/"&gt;пользу видеороликов в привлечении посетителей&lt;/a&gt;. К сожалению, в моей голове эта информация осядет мертвым грузом - программирование гораздо ближе мне, чем SMO, и вряд ли я когда-нибудь уйду в маркетинг&amp;hellip;&lt;/li&gt;
&lt;li&gt;Блог &lt;strong&gt;Repeat, Please&lt;/strong&gt;&lt;a href="http://www.repeat-please.ru/2009/07/konkurs-na-zritelnuyu-pamyat-ot-zhuka/"&gt;анонсирует&lt;/a&gt; бре&lt;strong&gt;н&lt;/strong&gt;доконкурс от &lt;a href="http://www.webbug.ru/2009/07/30/konkurs-igra-znatok-blogosfery/"&gt;Жука&lt;/a&gt;. А вы сможете опознать 14 топ-блогов по фрагментам их дизайна? Я навскидку опознал лишь 4, но я редко уделяю внимание деталям дизайна. Быть может, вы внимательнее? Да, кстати. Кто интересуется конкурсами блогосферы - обязательно подписывайтеся на &lt;a href="http://feeds.feedburner.com/repeatplease"&gt;этот RSS&lt;/a&gt;, будете в курсе всех событий.&lt;/li&gt;
&lt;li&gt;А &lt;strong&gt;Пузат&lt;/strong&gt;&lt;a href="http://puzat.ru/vnimanie-chitatel/vnimanie-chitatel-vypusk-1.html"&gt;задает вопросы читателям&lt;/a&gt;. И не просто задает, а обещает призы за ответы! Халява?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Удачного дня!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zebrum Bloglike 1.1.4.1 &amp; RegSubmitter 1.3.1</title>
      <link>https://nevkontakte.com/2009/Zebrum-Bloglike-1-1-4-1-RegSubmitter-1-3-1.html</link>
      <pubDate>Wed, 29 Jul 2009 12:24:37 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Zebrum-Bloglike-1-1-4-1-RegSubmitter-1-3-1.html</guid>
      <description>&lt;p&gt;Кончился месяц разъездов и пришло время в ударном темпе выпускать накопившиеся обновления.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Начну с &lt;strong&gt;Zebrum Bloglike&lt;/strong&gt;. Если кто не помнит, это мод cms для сателлитов Zebrum Lite, предназначенный для создания блогов-сателлитов. В &lt;a href="https://web.archive.org/web/20100106090425/http://zebrum.net.ru:80/news/zebrum-bloglike-1-1-4-1.html"&gt;релизе 1.1.4.1&lt;/a&gt; я наконец реализовал давно задуманную фитчу - FakeBurner. Как нетрудно догадаться по названию, это имитатор счетчика FeedBurner, призванный создать иллюзию читаемости вашего сателлита :) &lt;del&gt;Выглядит это чудо вот так: Чуть позже я выложу отдельный скрипт FakeBurner.&lt;/del&gt; Скрипт &lt;a href="https://nevkontakte.com/2009/FakeBurner-Simulator-counter-FeedBurner.html"&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Скачать новую версию можно &lt;a href="https://web.archive.org/web/20090328124044/http://zebrum.net.ru/"&gt;все там же&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;Кроме того, Было сделано обновление &lt;strong&gt;RegSubmitter 1.3.1&lt;/strong&gt;. Обновление носило характер багфиксов ошибок, наделанных в предыдущем обновлении, носившем фундаментальный характер.&lt;/p&gt;
&lt;p&gt;Фундаментальность заключалась в том, что теперь есть возможность легко добавлять многочисленные сервисы закладок на базе Scuttle и ScuttlePlus, без необходимости лезть в код. Новый функционал выделен в отдельный пакет &lt;a href="https://web.archive.org/web/20120101043121/http://regsubmitter.ru/index.html"&gt;RegSubmitter UMSB&lt;/a&gt;. Таким образом, общее число поддерживаемых сервисов перевалило за полсотни и может легко расширяться и далее. Так что спешите &lt;a href="https://web.archive.org/web/2009/http://regsubmitter.ru/index.php?mode=buy"&gt;приобрести RegSubmitter&lt;/a&gt;, поскольку не за горами еще множество полезных новшеств, а все обновления предоставляются бесплатно.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Задание региона в Яндекс.Вебмастере - тестовый режим.</title>
      <link>https://nevkontakte.com/2009/The-task-of-the-region-in-Andexpertise-test-mode.html</link>
      <pubDate>Tue, 28 Jul 2009 23:26:45 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/The-task-of-the-region-in-Andexpertise-test-mode.html</guid>
      <description>&lt;p&gt;Без лишних слов процитирую уведомление от Яндекса:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Добрый день!&lt;/p&gt;
&lt;p&gt;Рады сообщить, что в сервисе Яндекс.Вебмастер появилась возможность указать регион сайта.&lt;/p&gt;
&lt;p&gt;Для этого надо зайти в раздел &amp;ldquo;Инструменты&amp;rdquo;, найти раздел &amp;ldquo;Регион сайта&amp;rdquo; и указать свой регион, если сайт не зарегистрирован в Каталоге.&lt;/p&gt;
&lt;p&gt;Сейчас инструмент работает в тестовом режиме, поэтому доступен только для сайтов с ТИЦ более 60.&lt;/p&gt;
&lt;p&gt;Постепенно этот порог будет снижаться.&lt;/p&gt;
&lt;p&gt;Географическая принадлежность сайта важна при поиске с ограничением по региону, когда сайты из других регионов не показываются. Кроме того, поиск Яндекса использует разные формулы ранжирования в разных регионах. При этом региональная принадлежность сайта является одним из факторов ранжирования.&lt;/p&gt;
&lt;p&gt;С уважением,&lt;/p&gt;
&lt;p&gt;Команда сервиса Яндекс.Вебмастер.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://webmaster.yandex.ru"&gt;http://webmaster.yandex.ru&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Так что теперь у веб-мастеров есть возможность подтянуть свой сайт в нужном регионе и лишний повод качать тИЦ ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Добыча контента + инвайты.</title>
      <link>https://nevkontakte.com/2009/Production-of-content-invites.html</link>
      <pubDate>Fri, 17 Jul 2009 18:02:14 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Production-of-content-invites.html</guid>
      <description>&lt;p&gt;Когда-то я высказывал идею про добычу хорошего уникального контента из кеша поисковиков. В начале июня я таки сделал экспериментальный сайт. По-видимому, смысл в теме есть: гугль захавал уже больше сотни страниц, хотя яндекс пока только одну. Впрочем, яндекс никогда поспешностью не отличался. Сейчас стоит вопрос прокачки доменов.&lt;/p&gt;
&lt;p&gt;Кроме того, придумал еще одну наркоманскую идею по добыче уника, чисто в программерском стиле. Перед отъездом сделал тестовый сайт и, о чудо, он отлично схавался обоими ПС и уже приносит денежку :) Еще полсотни таких сайтов и я получу мировое господство :D&lt;/p&gt;
&lt;p&gt;Ну а что касается инвайтов, то вот свежая пачка на &lt;a href="http://be2me.ru"&gt;be2me.ru&lt;/a&gt;:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;011c0d21a4b1aec3886b11e709c1d55f
6743ed2af39f7ac0dad6288645698df6
c3bf513fcccd10311d760ffb899da182
2658054c13c7287f613ace7b65a348f4
088d7a72307204617d3721e29be414d5
e514274d96f57f448c88d07054f2bc08
96359d71c9d32e15a1231bd6d5203b86
30b4dc6682a91c66bd9a9b914b8ae76c
bb733c36b9984fe24ff98d969b9b5c5c
20f1679a1b844b697dbb894df89e8111
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Кроме того, вспомнил, что у меня есть некоторое количество инвайтов в &lt;a href="http://xap.ru"&gt;ксапу&lt;/a&gt;, хотя я давненько ею уже не пользуюсь. Вот несколько для затравки, кончатся - выложу еще:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;49441e05&lt;/code&gt; , &lt;code&gt;49441e0b&lt;/code&gt; , &lt;code&gt;49441e17&lt;/code&gt; , &lt;code&gt;49441e36&lt;/code&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мой ЛШЮП. Часть 1: Куда я попал?</title>
      <link>https://nevkontakte.com/2009/My-LShIuP-Part-1-Where-am-I.html</link>
      <pubDate>Thu, 16 Jul 2009 18:24:17 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/My-LShIuP-Part-1-Where-am-I.html</guid>
      <description>&lt;p&gt;Вчера благополучно завершился, пожалуй, один из самых приятных периодов в году. Две недели, которые ждешь весь год&amp;hellip; Трудно словами описать атмосферу этого меропреятия, но я попробую. Рассказ будет длинный, поэтому я разделю его на несколько постов. Сегодня я в общих чертах опишу, что представляет собой ЛШЮП, а в следующих постах уже будет хроника событий этого года.&lt;/p&gt;
&lt;p&gt;ЛШЮП - это &lt;a href="https://ssyp.ru/"&gt;Летняя Школа Юных Программистов&lt;/a&gt;, ежегодно проводимая Институтом Систем Информатики им. А. П. Ершова СО РАН. Впервые ЛШ состоялась еще (если не ошибаюсь) в 1975 году. И с тех пор проводится каждый год, за исключением некоторого перерыва, который я не застал.&lt;/p&gt;
&lt;p&gt;Участие в школе принимают дети и взрослые из многих городов. Так, в этом году из&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Абакана — 3 человека;&lt;/li&gt;
&lt;li&gt;Бердска — 3 человека;&lt;/li&gt;
&lt;li&gt;Бийска (можно считать с. Турочак республики Алтай) — 1 человек;&lt;/li&gt;
&lt;li&gt;Железногорска — 1 человек;&lt;/li&gt;
&lt;li&gt;Иркутска — 1 человек;&lt;/li&gt;
&lt;li&gt;Кемерово — 11 человек;&lt;/li&gt;
&lt;li&gt;Миасса — 3 человека;&lt;/li&gt;
&lt;li&gt;Милана (Италия) — 1 человек;&lt;/li&gt;
&lt;li&gt;Москвы — 1 человек;&lt;/li&gt;
&lt;li&gt;Новокузнецка — 2 человека;&lt;/li&gt;
&lt;li&gt;Новосибирска — 72 человека;&lt;/li&gt;
&lt;li&gt;Омска — 1 человек;&lt;/li&gt;
&lt;li&gt;Санкт-Петербурга — 1 человек;&lt;/li&gt;
&lt;li&gt;Томска — 1 человек.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Главной структурной единицей в ЛШ явялется мастерская - группа из детей-учащихся и взрослого-мастера и, опционально, подмастерья, которым часто становятся школьники-выпускники или студенты младших курсов. Их цель - написание некой программы, соответствующей заявленной в теме мастерской. Так, например, мы в этом году писали программу для распознавания текста. Тематика определяется мастером на этапе подготовки ЛШ и согласовывается с координатором, после чего аннотация публикуется на сайте.&lt;/p&gt;
&lt;p&gt;Мастером может стать практически каждый. Главное требование - знание &amp;ldquo;матчасти&amp;rdquo;, касающейся темы мастерской и желание научить этому детей :) Нередко случается, что бывшие ученики возвращаются в ЛШЮП, но уже в качестве мастеров или подмастерьев.&lt;/p&gt;
&lt;p&gt;В качестве учащегося оказаться в ЛШ тоже не трудно - если у вас есть хотя бы минимальный опыт программирования, то наверняка найдется подходящая вам по уровню и интересам мастерская. Для участия нужно будет оставить заявку в разделе будущей ЛШ (обычно он появляется в апреле-мае) на &lt;a href="https://ssyp.ru/"&gt;сайте&lt;/a&gt;, а ближе к летней школе прийти на собеседование. Единственное &amp;ldquo;ограничение&amp;rdquo; - учащимися могут быть только школьники.&lt;/p&gt;
&lt;p&gt;Вернемся к самой летней школе. Большая часть времени отводится именно на работу в мастерской, но этим далеко не ограничивается. Под работой в мастерской пониматеся собственно работа над проектом и все, что для этого необходимо: изучения языка программирования, необходимой теории, собственно программирование и отладка. Целый день за компьютером - мечта любого школьника ;)&lt;/p&gt;
&lt;p&gt;Как я уже говорил, работа в мастерской - важная, но не единственная состовляющая жизни в ЛШ. Если выкинуть всякие обеды/зарядки и прочую необходимую лабуду, то еще останутся практически ежедневные лекции на самые разные темы, проводимые специально приглашаемыми специалистами (несмотря на абсолютно добровольный порядок посещения, мало кто их игнорирует~~, что как бы намекает~~), экскурсии, культурные мероприятия, такие как традиционное представление мастерских, КВН и дискотеки. Скучать не приходится.&lt;/p&gt;
&lt;p&gt;Отдельно стоит отметить выходной в середине школы. Это день, когда изымаются все компьютеры и ноуты, а терминалка наглухо закрывается &lt;del&gt;и ключи от нее забрасываются в болото&lt;/del&gt;, чтобы все могли отдохнуть и набраться сил перед финальным рывком. Это единственный день, который который ненавидит полоина учащихся и обожает вторая половина, включая мастеров :) В этот день как раз и происходят экскурсии и КВН.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Уезжаю.</title>
      <link>https://nevkontakte.com/2009/I-leave.html</link>
      <pubDate>Wed, 01 Jul 2009 10:37:20 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/I-leave.html</guid>
      <description>&lt;p&gt;До 15-го числа уезжаю в летнюю школу. Будем писать &lt;del&gt;трехколесный велосипед&lt;/del&gt;&lt;a href="https://web.archive.org/web/20190128105613/http://school.iis.nsk.su/syp09/works"&gt;программу распознавания текста&lt;/a&gt; :)&lt;/p&gt;
&lt;p&gt;Поскольку последнее время всякие товарищи повадились пихать говноссылки в комменты, а я в сети почти не буду и своевременно удалять их не смогу - на ближайшие две недели все комменты будут находиться в режиме премодерации. В течение этого времени я буду пару раз разгребать накопившиея и удалять кал, но не чаще.&lt;/p&gt;
&lt;p&gt;Далее отрывочно.&lt;/p&gt;
&lt;p&gt;Спасибо &lt;a href="http://burnis.org/node/447"&gt;Бурнису за позитив&lt;/a&gt;, найденый им в моем блоге :)&lt;/p&gt;
&lt;p&gt;Чтобы в мое отсутствие не было скучно, можно посмотреть:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VadoZ сделал &lt;a href="http://vadoz.ru/obzor-socialnyx-zakladok-runeta"&gt;обзор сервисов закладок рунета&lt;/a&gt;. Знайте, куда постить :) Большая часть этих сервисов, кстати, уже есть в &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Если надо быстренько накидать какой-нибудь пример верстки на html/css или еще чего-нибудь, то можно воспользоваться сервисом &lt;a href="http://demopreview.xexo.info/demo/create"&gt;&lt;code&gt;&amp;lt;? demopreview(); ?&amp;gt;&lt;/code&gt;&lt;/a&gt;. Между прочим, очень удобно ;)&lt;/li&gt;
&lt;li&gt;А тем, кто охотится за уникальным контентом - полная база ГОСТов, 5 гб. в архиве. Правда, текст надо будет еще распознать файнридером :P&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Удачи всем!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Маркетологи-маректологи...</title>
      <link>https://nevkontakte.com/2009/Marketers-marektolog.html</link>
      <pubDate>Sun, 28 Jun 2009 23:28:42 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Marketers-marektolog.html</guid>
      <description>&lt;p&gt;Нечаянно зашел на сайт инфобокса и из любопытства кликнул на акции. Кликнул не зря, потому что заряд веселья получил до самого утра :)&lt;/p&gt;
&lt;p&gt;Смотрим (кликабельно):&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen13.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen13.jpg" alt="screen13.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Условий почти нет, всего-навсего 8 штук :D&lt;/p&gt;
&lt;p&gt;Воочию сей шедевр можно увидеть &lt;a href="http://www.infobox.ru/events/?id=102"&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;PS. Еще одна порция инвайтов на &lt;a href="http://be2me.ru"&gt;be2me.ru&lt;/a&gt;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;088d7a72307204617d3721e29be414d5
e514274d96f57f448c88d07054f2bc08
96359d71c9d32e15a1231bd6d5203b86
30b4dc6682a91c66bd9a9b914b8ae76c
bb733c36b9984fe24ff98d969b9b5c5c
6dc3c001baa0cd59dcde76227ce109b8
c7a31e9bb4f4365ddf9f1556434db43a
3461112203800f8cc2634d6af76d3653
20f1679a1b844b697dbb894df89e8111
48ff4a25b636d361fff7e1c5e7f71db9
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;PPS. Уже после того, как написал, заметил, что инфобоксовская вкладка у меня выглядит вот так:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen14.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen14.jpg" alt="screen14.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Перст судьбы? :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Важный хак для саповодов и инвайты на be2me.ru</title>
      <link>https://nevkontakte.com/2009/Important-hack-for-sapovod-and-invites-to-be2me-ru.html</link>
      <pubDate>Fri, 19 Jun 2009 12:47:51 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Important-hack-for-sapovod-and-invites-to-be2me-ru.html</guid>
      <description>&lt;h3 id="про-сапу"&gt;Про сапу.&lt;/h3&gt;
&lt;p&gt;Если вы держите отдельный VPS под саты, то могли замечать что на одном из сайтов регулярно все или почти все ссылки выпадают в ERROR. Причина в следующем: когда вы добавляете домены на сервер, первый добавленный домен становится доменом по умолчанию и открывается при обращении к серверу по IP или левому домену. В результате, если у вас доменом по умолчанию стал низкопосещаемый сайт с сапой и при этом кто-то обратится к нему по левому домену (или по IP), то в один прекрасный момент совпадет так, что именно при этом обращении сапа попробует обновить список продажных ссылок и, поскольку домен левый, ссылок она не получит. Потом придет сапобот, увидит, что ссылок нет и выставит их в ERROR.&lt;/p&gt;
&lt;p&gt;Вы скажете, что это все маловероятно и притянуто за уши. Отнюдь. Если у вас имеется внешний мониторинг статуса веб-сервера, то он довольно часто будет деграть ваш сервер, обращаясь по IP, рано или поздно обнулив кеш сапы.&lt;/p&gt;
&lt;p&gt;Как с этим бороться? Есть два способа:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Создать домен-заглушку, на котором не будет ничего, кроме странички по умолчанию.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Ручками указать сапе, к какому домену относится этот сайт:&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;defined&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;_SAPE_USER&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)){&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;_SAPE_USER&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;89007e2cfa09d57a5daa7d613cc9e516&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="k"&gt;require_once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;_SAPE_USER&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;/sape.php&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="nv"&gt;$sape&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;SAPE_client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;host&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;tuberkulez.pp.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После этого проблема пропадет.&lt;/p&gt;
&lt;h3 id="инвайты-be2meru"&gt;Инвайты be2me.ru&lt;/h3&gt;
&lt;p&gt;С момента начала публичной работы этой &lt;a href="http://be2me.ru/"&gt;партнерки&lt;/a&gt; от &lt;a href="http://bablorub.blogspot.com"&gt;Master-X&lt;/a&gt; инвайты на нее разлетаются с фантастической скоростью. С настолько фантастической, что мне пришлось специально поставить мониторилку обновлений RSS-ридера, чтобы успеть ухватить один :) Теперь же делюсь ими с вами (под катом ;) ):&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;30b4dc6682a91c66bd9a9b914b8ae76c
bb733c36b9984fe24ff98d969b9b5c5c
6dc3c001baa0cd59dcde76227ce109b8
56a75b5cc98cbbd4076c640cc4bbf6ad
df0db9a3a07b096e41dc2cf92e73aa36
4c2882876fd4706ad10180494d843437
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Если не хватит - пишите на почту: &lt;img src="https://nevkontakte.com/files/email.gif" alt=""&gt; (со ссылкой на блог, который планируете монетизировать).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сайты в зоне SU - всего $1 500 000!</title>
      <link>https://nevkontakte.com/2009/Sites-in-SU-only-1-500-000.html</link>
      <pubDate>Tue, 09 Jun 2009 11:52:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Sites-in-SU-only-1-500-000.html</guid>
      <description>&lt;p&gt;Пришло в личку на одном сеошном форуме (не буду показывать пальцем):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Здравствуйте , Alek$!&lt;/p&gt;
&lt;p&gt;История одного сайта SU - это нравственная элита страны.&lt;/p&gt;
&lt;p&gt;Чем стaрее дoмен - тем он дoроже.&lt;/p&gt;
&lt;p&gt;Истoрические домены SU - это 15 стран,пятиднeвная рабочая неделя, Никулин, Горбачев, Ельцин,Хрущев, Ленин, Сталин, Сахаров, Гайдай, советский спорт,архитектура Москвы,9 мaя и 275 миллионов человек (в России только 132 млн.). и др.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Зона SU ( домены и сайты ) - национальная гордость России&amp;rdquo;.ЮНЕСКО.&lt;/p&gt;
&lt;p&gt;Сeгодня зона SU - это дедушка у которого 15 маленьких внучат.&lt;/p&gt;
&lt;p&gt;Внучата зоны SU - &amp;ldquo;RU,UA, BY, KZ, MD ,AZ ,AR, TM, TJ&amp;rdquo; и другие абревиатуры.&lt;/p&gt;
&lt;p&gt;Сейчас в зоне SU - только элитные сайты крупнейших компаний,вся Рублевка , Новая Рига ,Остоженка,Москва,Санкт-Петербург и др.&lt;/p&gt;
&lt;p&gt;Президента Мeдведева, Лукойла, Газпрома, Икеи, Метрополь, Савой, МГИМО, МГУ, элитных бизнес структур и др.&lt;/p&gt;
&lt;p&gt;Примеры.&lt;/p&gt;
&lt;p&gt;http://a_&lt;strong&gt;t&lt;/strong&gt;_ b.su http://a_&lt;strong&gt;c&lt;/strong&gt;&lt;em&gt;e.su &lt;a href="http://www.a"&gt;http://www.a&lt;/a&gt;&lt;/em&gt;&lt;strong&gt;t&lt;/strong&gt;&lt;em&gt;r&lt;/em&gt;&lt;strong&gt;i&lt;/strong&gt;&lt;em&gt;u&lt;/em&gt;&lt;strong&gt;m.su http://r^^^i&lt;/strong&gt;&lt;em&gt;o.su http://l&lt;/em&gt;&lt;strong&gt;i&lt;/strong&gt;_g*** a.su http://l***o***l***i***t***a.su и сотни тысяч других.&lt;/p&gt;
&lt;p&gt;Создание таких сайтов SU стоит - от $1 500 000.&lt;/p&gt;
&lt;p&gt;За 30 000 рублей в Клубе вам помогут подобрать красивый двухкорневой домен SU.&lt;/p&gt;
&lt;p&gt;Вступление в Барвихинский (Рублевка) &amp;ldquo;Клуб любителей элитных доменов SU&amp;rdquo;-5 - всего 199 000 рублей!!!&lt;/p&gt;
&lt;p&gt;Добро пожаловать!!!&lt;/p&gt;
&lt;p&gt;Мы желаем Вам много Здоровья , Счастья и Успехов!!!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Скажите, неужели есть люди, которые на это ведутся? На сёрче недавно один жгун пытался казахский домен за лимон баксов впарить, а теперь за 30к рублей мне подберут двухкорневой домен в зоне SU. За такие деньги я и так смогу купить практически любой красивый su-домен, а тут, блин, подберут.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Скрипты: Google Cache Dumper &amp; Bing Cache Dumper</title>
      <link>https://nevkontakte.com/2009/Scripts-Google-Cache-Dumper-Bing-Cache-Dumper.html</link>
      <pubDate>Sat, 06 Jun 2009 13:33:31 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Scripts-Google-Cache-Dumper-Bing-Cache-Dumper.html</guid>
      <description>&lt;p&gt;&lt;em&gt;Пострадавшим от 3fn.ru посвящается.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt; (22.01.2013): Две новости:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;оба скрипта &lt;a href="https://nevkontakte.com/2009/Scripts-Google-Cache-Dumper-Bing-Cache-Dumper.html"&gt;более не продаются&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;теперь они &lt;a href="https://nevkontakte.com/2013/Google-Cache-Dumper-and-Bing-Cache-Dumper-free.html"&gt;распространяются бесплатно&lt;/a&gt; через GitHub ;-)&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="google-cache-dumper-v-30"&gt;Google Cache Dumper v 3.0&lt;/h2&gt;
&lt;p&gt;Google Cache Dumper - это инструмент, позволяющий максимально просто вытащить все содержимое кеша Google по заданному домену.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Возможности:&lt;/strong&gt;&lt;/p&gt;
&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;/ul&gt;
&lt;p&gt;&lt;strong&gt;Требования:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Веб-сервер&lt;/li&gt;
&lt;li&gt;PHP5 с поддержкой curl и allow_url_fopen=On&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Установка и настройка:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Распакуйте архив в папку веб-сервера (не обязательно в корень).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;В той же папке должна быть подпапка out, доступная веб-серверу на чтение и запись (обычно подходят права доступа 0777).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Файлы index.php, dc.txt, proxy.txt должны быть доступны веб-серверу на чтение.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;В файл proxy.txt поместите список прокси, которые будете использовать при парсинге, по одному прокси на строку, формат ip_адрес:порт.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ВНИМАНИЕ!&lt;/strong&gt; Если оставить файл пустым, то проски использоваться не будет, но возрастет риск бана запросов со стороны Google.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Настройка завершена! Откройте скрипт через браузер и приступайте!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Лицензия:&lt;/strong&gt; WTFPL.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/nevkontakte/gcache"&gt;GitHub&lt;/a&gt; (&lt;a href="https://github.com/nevkontakte/gcache/archive/master.zip"&gt;скачать&lt;/a&gt; последнюю версию).&lt;/p&gt;
&lt;h2 id="bing-cache-dumper-v-10"&gt;Bing Cache Dumper v 1.0&lt;/h2&gt;
&lt;p&gt;Bing Cache Dumper - это инструмент, позволяющий максимально просто вытащить все содержимое кеша поисковика &lt;a href="http://bing.com"&gt;Bing&lt;/a&gt; по заданному домену.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Возможности:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Ограничение количества обрабатываемых страниц выдачи, либо обработка всех, сколько есть.&lt;/li&gt;
&lt;li&gt;Задание интервала между запросами (в секундах)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Требования:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Веб-сервер&lt;/li&gt;
&lt;li&gt;PHP5 с allow_url_fopen=On&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Установка и настройка:&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Распакуйте архив в папку веб-сервера (не обязательно в корень).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;В той же папке должна быть подпапка out, доступная веб-серверу на чтение и запись (обычно подходят права доступа 0777).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Настройка завершена! Откройте скрипт через браузер и приступайте!&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Лицензия:&lt;/strong&gt; WTFPL.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/nevkontakte/bcache"&gt;GitHub&lt;/a&gt; (&lt;a href="https://github.com/nevkontakte/bcache/archive/master.zip"&gt;скачать&lt;/a&gt; последнюю версию).&lt;/p&gt;
&lt;p&gt;&lt;del&gt;PS. Ну и небольшой подарок тем, кто сам умеет кодить и не хочет платить. Я уже &lt;a href="https://nevkontakte.com/2008/Thoughts-about-unique-content-Practical-implementation.html"&gt;публиковал&lt;/a&gt; первую версию Google Cache Dumper. В том виде, в каком она там есть она довольно легко попадает в бан, но доработать ее совсем несложно ;)&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD.&lt;/strong&gt; Актуальный список датацентров для Google Cache Dumper: &lt;a href="https://nevkontakte.com/files/dc.txt"&gt;dc.txt&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мысли о 3fn.ru, бекапах и смысле жизни.</title>
      <link>https://nevkontakte.com/2009/Thoughts-on-3fn-ru-bicapo-and-the-meaning-of-life.html</link>
      <pubDate>Fri, 05 Jun 2009 17:50:59 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Thoughts-on-3fn-ru-bicapo-and-the-meaning-of-life.html</guid>
      <description>&lt;p&gt;Жил-был такой крупный русско-американский хостер, звали его 3fn.ru. И любили его веб-мастера, ибо цены у него были божеские и сервера неплохие. И он любил веб-мастеров, хороших и разных, особливо тех, кто деньги платит исправно.&lt;/p&gt;
&lt;p&gt;И столь широка была душа у этого, вне всяких сомнений, замечательного хостера, что не отказывал он в приюте даже личностям странным, закон и представителей его стороной обходящим. И оценили гостеприимность хостинга люди темные, нехорошие, и стали все больше там собираться, растить и ширить свою стаю, да деньги нечестные зарабатывать, гостеприимством оным злоупотребляя.&lt;/p&gt;
&lt;p&gt;Глядели на этот сброд овнеры хостера, и исполнялись грустью и жалостью к сим ожесточенным, пропащим людям рода человеческого, но вежливость великая и чувство такта не давали им вымести свору поганую, как добрая хозяйка сор из избы выметает. А, как известно, если сор не выметать, то будет он умножаться в экспоненциальной прогрессии, и заполонит углы и щели все, и заметен станет невооруженным глазом людям полицейским, да чиновникам торговым.&lt;/p&gt;
&lt;p&gt;И явились однажды люди милицейские, да чиновники торговые к овнерам и слова печальные сказывали:&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Изба ваша, что помойка гнусная, смердящая, заразы в ней всякой развелось от забора и до обеда, и мешает зараза сия всем людям честным. Посему повелеваем хату вашу закрыть и выйти вон, мусор внутри заперев, да канализации-вентиляции позакрывать, чтобы ни внутрь залезть нельзя было, ни наружу чего непотребного вынести. А вам самим на суд &lt;del&gt;честный,&lt;/del&gt; демократический явиться числа пятнадцатого, июня месяца сего года&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;И возопили в горе и гневе веб-мастера честные, чьи сайты у 3fn хостились, и стали требовать вернуть им их бекапы, но все тщетно - самих овнеров в хату не пускают, какие уж там бекапы.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Мда, что-то я расписался сегодня&lt;/em&gt; :) Так вот, к чему я все это пишу. Попали веб-мастера на деньги из-за непредвиденного простоя, но еще хуже то, что быстренько развернуть свои сайты на другом хосте далеко не все смогли - бекапов-то и нет, что делать - непонятно. Прогнозы совсем пессимистичные. А ведь всего-то и надо было, изредка бекапить сайты на другого хостера или хотя бы к себе на комп. Но лень, как всегда, взяла верх и привела к разбитому корыту.&lt;/p&gt;
&lt;p&gt;По счастью, я услугами 3fn.ru не пользовался, но шум заставил задуматься, что будет, если накроется кто-нибудь из моих хостеров. По части всяких сателлитов мне дергаться нечего - работают они у меня на &lt;a href="http://blog.zebrum.ru/category/zebrum-lite/?c=36F2653BCE"&gt;Zebrum Lite&lt;/a&gt;, управляются из панельки &lt;a href="http://zebrum.ru/buy/?c=36F2653BCE"&gt;Zebrum CMS&lt;/a&gt;, в панельке есть копии всех этих сайтов, панелька стоит у меня на компе, все под руками.&lt;/p&gt;
&lt;p&gt;А вот VPS, на которой крутятся довольно важные для меня сайты за пределы хостинга бекапы не делает. И ее потеря будет капитальным провалом. Поэтому обращаюсь к читателям, куда бы так можно было бы бекапить, чтобы недорого и надежно?&lt;/p&gt;
&lt;p&gt;Так, чуть не забыл. Кому интересно про 3fn, то &lt;a href="http://www.master-x.com/forum/topics/121133/page/0/"&gt;вот&lt;/a&gt; и &lt;a href="http://forum.searchengines.ru/showthread.php?t=360897"&gt;вот&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Все, хватит о грустном. Будем об интересном.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Andrey K. стартует новый &lt;a href="http://wasting-money.blogspot.com/2009/06/gameboss.html"&gt;Gameboss-марафон: заработай играючи&lt;/a&gt;, обещающий быть во всех отношениях интересным, и в добавок обещает бонусы блоггерам, которые его пропиарят. Кстати, читаю я его уже давно и могу авторитетно заявить: скучать не придется :)&lt;/p&gt;
&lt;p&gt;И напоследок, отдельно обращусь к изобретателю кофейных автоматов. Мужик, ты гений! Знал бы ты, как они выручают, когда хочется спать, но надо сдавать экзамен :) У нас в универе стоит три &lt;a href="http://www.cps-vending.ru/ru/gsell.html"&gt;торговых автомата марки вендинг&lt;/a&gt;, и все неподалеку от аудиторий, где учатся программисты. Наверное, это неспроста ;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zebrum Bloglike 1.1.4.0</title>
      <link>https://nevkontakte.com/2009/Zebrum-Bloglike-1-1-4-0.html</link>
      <pubDate>Thu, 04 Jun 2009 19:54:18 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Zebrum-Bloglike-1-1-4-0.html</guid>
      <description>&lt;p&gt;С некоторым опозданием (виной тому неожиданно начавшаяся сессия) я наконец выпустил обновление для &lt;a href="https://web.archive.org/web/20090328124044/http://zebrum.net.ru/"&gt;Zebrum Bloglike&lt;/a&gt; - 1.1.4.0.&lt;/p&gt;
&lt;p&gt;Кардинальных изменений в этой версии нет, но тем не менее она базируется уже на Zberum Lite 1.1.4, а так же появилась возможность список последних постов на главной перелистывать назад и смотреть более ранние посты.&lt;/p&gt;
&lt;p&gt;Для тех, кто еще не знаком с Bloglike, поясню - это мод движка для сателлитов &lt;a href="http://blog.zebrum.ru/category/zebrum-lite/?c=36F2653BCE"&gt;Zebrum Lite&lt;/a&gt;, предназначенный для создания блогоподобных сайтов.&lt;/p&gt;
&lt;p&gt;Скачать новую версию, как всегда, можно &lt;a href="https://web.archive.org/web/20090328124044/http://zebrum.net.ru/"&gt;на ее сайте&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Удачного блоговодства!&lt;/p&gt;</description>
    </item>
    <item>
      <title>png2pdf: как сшить несколько картинок в один pdf файл</title>
      <link>https://nevkontakte.com/2009/png2pdf-how-to-sew-several-images-into-one-pdf-file.html</link>
      <pubDate>Wed, 03 Jun 2009 15:36:14 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/png2pdf-how-to-sew-several-images-into-one-pdf-file.html</guid>
      <description>&lt;p&gt;Возникла нужда сшить несколько картинок в один pdf файл. Гугль выдал несколько программ, но ни одна из них не имелась в репозитариях, и собрать самому тоже с первой попытки не получилось. Поэтому решил поколдовать сам.&lt;/p&gt;
&lt;p&gt;В результате вышел такой скрипт:&lt;/p&gt;
&lt;hr&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;#!/bin/bash
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;&lt;/span&gt;&lt;span class="c1"&gt;# (c) Alek$ http://nevkontakte.org.ru&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Required packages: netpbm, ghostscript-library, pdftk&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$#&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -lt &lt;span class="s2"&gt;&amp;#34;2&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;mypng2pdf.sh by Alek&lt;/span&gt;$&lt;span class="s2"&gt;, http://nevkontakte.org.ru&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;	USAGE:&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;	&lt;/span&gt;&lt;span class="nv"&gt;$0&lt;/span&gt;&lt;span class="s2"&gt; file1.png ... fileN.png output.pdf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="nv"&gt;$#&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt; -gt &lt;span class="s2"&gt;&amp;#34;1&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;do&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pngtopnm &lt;span class="nv"&gt;$1&lt;/span&gt; &lt;span class="p"&gt;|&lt;/span&gt; pnmtops &lt;span class="p"&gt;|&lt;/span&gt; ps2pdf - &lt;span class="nv"&gt;$1&lt;/span&gt;.myp2p-pdf
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;shift&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;done&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;pdftk *.myp2p-pdf cat output &lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;rm *.myp2p-pdf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;Для работы ему нужны пакеты netpbm, ghostscript-library, pdftk, которые есть почти во всех распространенных дистрибутивах.&lt;/p&gt;
&lt;p&gt;Используется он так:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;mypng2pdf.sh file1.png ... fileN.png output.pdf
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Кроме того, он легко модифицируется для обработки любых других форматов, для этого надо заменить команду pngtopnm на требуемую (jpegtopnm, giftopnm и т.д.)&lt;/p&gt;
&lt;p&gt;Enjoy: &lt;a href="https://nevkontakte.com/files/mypng2pdf.sh"&gt;mypng2pdf.sh&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD.&lt;/strong&gt;  Спустя полгода нашел отличную программу &lt;a href="http://gscan2pdf.sourceforge.net/"&gt;gscan2pdf&lt;/a&gt;, которая умеет сшивать картинки в pdf, при этом тонко настраивая разнообразные параметры, включая качество, метаданные и т.д.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Итоги конкурса "О блоггинге в двух словах"</title>
      <link>https://nevkontakte.com/2009/The-results-of-the-contest-About-blogging-in-a-nutshell.html</link>
      <pubDate>Fri, 22 May 2009 20:43:28 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/The-results-of-the-contest-About-blogging-in-a-nutshell.html</guid>
      <description>&lt;p&gt;Как я уже писал, я принимал участие в конкурсе &amp;ldquo;О блоггинге в двух словах&amp;rdquo;, проводимом &lt;a href="http://7bloggers.ru"&gt;7-ю блоггерами&lt;/a&gt;. Суть была в том, что каждому учаснику достается случайная пара слов и он пишет статью на эту тему. Я писал о &lt;a href="https://nevkontakte.com/2009/Crossposting-in-the-Internet-community-is-the-game-worth-the-candle.html"&gt;кросспостинге&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Признаюсь откровенно, с написанием я тянул до последнего, потому как идей, о чем писать, не было совершенно. Но зато когда наконец я засел за писанину, вышло довольно много букв и полезных, на мой взгляд, идей.&lt;/p&gt;
&lt;p&gt;Как бы то ни было, хоть и в число призёров я не попал, но зато разделил приз читательских симпатий с &lt;a href="http://kisuhvostik.ru/"&gt;Kisuhvostik&lt;/a&gt;, что весьма приятно :) Прочие же призовые места распределились так:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1 место&lt;/strong&gt; - Счастливка: “&lt;a href="http://princessdasha.ru/?p=747"&gt;None&lt;/a&gt;“&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2 место&lt;/strong&gt; - maha: &amp;ldquo;&lt;a href="http://www.liveinternet.ru/users/marichkas/post101556879/"&gt;None&lt;/a&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3 место&lt;/strong&gt; - Михаил: “&lt;a href="http://sibilev.net/?p=1059"&gt;None&lt;/a&gt;“&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4 место&lt;/strong&gt; - Амирханов Ленар: “&lt;a href="http://yavbloge.ru/?p=598"&gt;None&lt;/a&gt;”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5 место&lt;/strong&gt; - Дима Шайтор: “&lt;a href="http://blogfront.ru/korporativnyi-blog-i-captcha/"&gt;None&lt;/a&gt;”&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6 и 7 место&lt;/strong&gt; разделили Kisuhvostik (&lt;a href="http://kisuhvostik.ru/2009/04/24/targeting-ili-kak-my-privlekaem-v-blog-nuzhnyx-chitatelej/"&gt;None&lt;/a&gt;) и Хроник дня (&lt;a href="http://yakto.ru/inet/nub-i-poiskovaya-sistema.html"&gt;None&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Скажу откровенно, призёры не зря стали призёрами, и прочитать их статьи однозначно стоит. Кроме того, многие из прочих конкурсных статей заслуживают внимания, их список есть &lt;a href="http://7bloggers.ru/okonchanie-konkursa-o-blogginge-v-dvux-slovax/"&gt;здесь&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Акция "48 часов": Закладочник за копейки.</title>
      <link>https://nevkontakte.com/2009/Action-48-hours-Zakladochnik-for-peanuts.html</link>
      <pubDate>Sat, 16 May 2009 18:03:28 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Action-48-hours-Zakladochnik-for-peanuts.html</guid>
      <description>&lt;p&gt;Тормоз проводит &lt;a href="http://brokenbrake.biz/2009/05/15/48hours"&gt;беспрецедентную акцию&lt;/a&gt; по раздаче небезызвестного Закладочника. Суть акции проста - на момент ее начала 15 мая 18:00 по Москве цена на Закладочник составила всего $1, и каждый час она увеличивается на единичку, в последующих течение 48 часов. При этом все, купившие Закладочник в рамках акции, становятся полноценными его владельцами, то бишь все обновления (в том числе и грядущий Закладочник 2.0 ) они получат бесплатно.&lt;/p&gt;
&lt;p&gt;Так что поспешите, пока цена на сей замечательный продукт ниже рыночной. Купить, как всегда, можно автоматически, на сайте &lt;a href="http://ru.bmsubmitter.com/deadbonus"&gt;Закладочника&lt;/a&gt;. По состоянию на данный момент, цена составляет всего $20.&lt;/p&gt;
&lt;p&gt;PS. Между прочим, после окончания акции все продажи Закладочника будут заморожены до выхода версии 2.0, что есть еще один повод &lt;a href="http://ru.bmsubmitter.com/deadbonus"&gt;не откладывать на завтра&lt;/a&gt; то, что можно потратить сегодня ;)&lt;/p&gt;
&lt;p&gt;PPS. Хорошим дополнением к Закладочнику будет регистратор аккаунтов, aka &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;. Для него тоже, кстати, готовится неплохое обновление.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Креативный спам.</title>
      <link>https://nevkontakte.com/2009/Creative-spam.html</link>
      <pubDate>Fri, 15 May 2009 15:15:04 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Creative-spam.html</guid>
      <description>&lt;p&gt;У спамеров, видать, тоже кризс, поэтому они стали сами себя рекламировать.&lt;/p&gt;
&lt;p&gt;Тем не менее, люди оказались креативные, и прислали мне письмо с такой вот картинкой:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/vderevne.gif"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/vderevne.gif" alt="vderevne.gif"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS. Был указан еще и телефон, но я его затер, ибо нефиг.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Акция для твиттерян по набору фолловеров.</title>
      <link>https://nevkontakte.com/2009/Special-tvitterianin-set-of-followers.html</link>
      <pubDate>Thu, 14 May 2009 19:36:12 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Special-tvitterianin-set-of-followers.html</guid>
      <description>&lt;p&gt;Сейчас во всю идет акция, запущенная &lt;a href="http://x.com/tyomma"&gt;Тёммой&lt;/a&gt;, направленная
на скоростное увеличение числа фолловеров.&lt;/p&gt;
&lt;p&gt;Шутки шутками, но за последний час она принесла мне уже больше трех десятков
новых фолловеров, что, в принципе, не плохо.&lt;/p&gt;
&lt;p&gt;Подробности и правила &lt;a href="http://tyomma.livejournal.com/1618.html"&gt;тут&lt;/a&gt;. Чем
быстрее присоединитесь, тем больше получите фолловеров, так что не зевайте.&lt;/p&gt;
&lt;p&gt;PS. &lt;a href="http://x.com/Nevkontakte"&gt;Follow me&lt;/a&gt;!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Что пишут на заборе?</title>
      <link>https://nevkontakte.com/2009/What-is-written-on-the-fence.html</link>
      <pubDate>Sat, 09 May 2009 16:46:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/What-is-written-on-the-fence.html</guid>
      <description>&lt;p&gt;Как вам может быть известно, некоторое время назад я &lt;a href="https://nevkontakte.com/2009/Internet-fence-Leave-their-autographs-on-the-net.html"&gt;построил&lt;/a&gt; &lt;a href="https://web.archive.org/web/20100612002448/http://zabora.net.ru/"&gt;забор&lt;/a&gt;. С тех пор прошло почти три месяца (завтра будет ровно три) и хочется подвести кое-какие итоги. Предупреждаю, что дальше будет довольно много нецензурщины (таков уж забор).&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Всего было оставлено 220 надписей.&lt;/li&gt;
&lt;li&gt;Первыми из тех, кого я читаю, отметившимися на заборе, были &lt;a href="http://7bloggers.ru"&gt;Семь Блоггеров&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Упячка стала 49-й.&lt;/li&gt;
&lt;li&gt;Впервые слово &amp;ldquo;хуй&amp;rdquo; появилось в 34 надписи, 15 февраля 2009 в 00:59 по Москве.&lt;/li&gt;
&lt;li&gt;Правда кандидит на первое ругательство встретился двумя надписями раньше, в 32: &amp;ldquo;Пирдошастый буревур&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;Всего слово &amp;ldquo;хуй&amp;rdquo; (с учетом производных от него) было написано ровно 20 раз.&lt;/li&gt;
&lt;li&gt;1/5 Надписей содержала ругаельства.&lt;/li&gt;
&lt;li&gt;18 надписей из серии &amp;ldquo;Здесь был &amp;hellip;&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;6 признаний в любви.&lt;/li&gt;
&lt;li&gt;15% надписей содержали упоминание какого-либо сайта.&lt;/li&gt;
&lt;li&gt;2 попытки найти дыру в заборе. Обе неудачные, потому что дыр в нем нет.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вот такие вот факты. Честно говоря, я полагал, что сакраментальное слово из трех букв появится гораздо раньше, как минимум в первой десятке, но это оказалось не так, что, в принципе, радует.&lt;/p&gt;
&lt;p&gt;Ну а если вы еще не отметились на Заборе, то &lt;a href="https://web.archive.org/web/20100612002448/http://zabora.net.ru/"&gt;добро пожаловать&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;И самое главное:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;С Днем Победы!&lt;/strong&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Follow me!</title>
      <link>https://nevkontakte.com/2009/Follow-me.html</link>
      <pubDate>Wed, 29 Apr 2009 21:00:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Follow-me.html</guid>
      <description>&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen.jpg" alt="screen.jpg"&gt;&lt;/a&gt;
Поддался моде и таки завел акк на Твиттере.
&lt;a href="https://x.com/Nevkontakte"&gt;Вот он я&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;А толчком стало то, что я наконец поборол дурацкий сервис links.i.ua и
сумел-таки сделать авторегистрацию на нем. Надо сказать, что с переменным
успехом над этой задачей я бился чуть ли не с декабря. Так что сейчас меня
переполняют совершенно бешеные чувства, и это здорово.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Кросспостинг в интернет-сообщества: стоит ли овчинка выделки?</title>
      <link>https://nevkontakte.com/2009/Crossposting-in-the-Internet-community-is-the-game-worth-the-candle.html</link>
      <pubDate>Sun, 26 Apr 2009 14:13:56 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Crossposting-in-the-Internet-community-is-the-game-worth-the-candle.html</guid>
      <description>&lt;p&gt;Сразу поясню для тех, кто еще не знаком с кросспостингом: кросспостинг - это трансляция блога, расположенного на одной платформе, в другие. Т. е. если у нас основной блог живет на блогспоте или на stand-alone движке (как этот блог), то все его записи будут автоматически размещаться на, допустим, ЖЖ, ливинтернет и блог.ру.&lt;/p&gt;
&lt;p&gt;Сама идея кросспостинга уже не нова для русскоязычной блогосферы, хотя до сих пор существуют различные мнения на счет полезности этой практики. В качестве плюсов часто приводят следующие факты:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Дублирование постов на других сервисах увеличивает аудиторию блога и создает дополнительный трафик на основной блог.&lt;/li&gt;
&lt;li&gt;Размещенные на &amp;ldquo;зеркалах&amp;rdquo; посты содержат ссылки на основной блог, что способствует увеличению ссылочной массы и любви поисковиков.&lt;/li&gt;
&lt;li&gt;Поисковые боты практически постоянно присутствуют на таких сервисах и дублирование поста там со ссылкой на оригинал ускоряет индексацию основного блога.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Противники кросспостинга, как правило, выдвигают такие контраргументы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Блоги-зеркала без целенаправленной раскрутки популярными не будут популярны и посещаемы, и принести хоть какой-то заметный трафик не смогут.&lt;/li&gt;
&lt;li&gt;Поисковики &amp;ldquo;склеивают&amp;rdquo; вес ссылок с таких зеркал и толку от них становится ноль без палочки.&lt;/li&gt;
&lt;li&gt;Поскольку поисковики обычно пасутся на блог-сервисах, то отзеркалированные записи будут проиндексированы первыми и станут &amp;ldquo;первоисточниками&amp;rdquo;, а оригиналы будут считаться &amp;ldquo;сворованными&amp;rdquo; и в выдачу не попадут.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;По зрелом раздумии можно прийти к выводу, что первые два возражения действительно существенны. А вот по поводу третьего, если не злоупотреблять кросспостингом, можно поспорить - все поисковики неоднократно утверждали, что если в скопированной статье стоит ссылка на оригинал, то на оригинал никакие санкции наложены не будут. Это же подтверждает и мой личный опыт - по многим запросам, релевантным моим постам, этот блог стоит на первом месте, а зеркала - парой-тройкой строчек ниже.&lt;/p&gt;
&lt;p&gt;Теперь неплохо бы разобраться с первыми двумя проблемами. К сожалению, вторая проблема есть и, покуда мы не разработчики Гугла или Яндекса, исправить ее не получится. А вот с первой еще можно побороться.&lt;/p&gt;
&lt;p&gt;В чем суть проблемы? На всех популярных сервисах количество блогов такое, что появление еще одного происходит совершенно незаметно для тамошнего сообщества. И чтобы наше зеркало стали читать надо либо дать ему нехилый изначальный пинок, либо&amp;hellip; писать туда, где уже есть люди! На многих популярных блогосервисах есть такая штука, как тематические сообщества, вступление в которые совершенно свободно, и, самое главное, там уже общаются наши будущие читатели! Вот неполный список таких сервисов:  &lt;a href="http://clubs.ya.ru/"&gt;Клубы на Я.ру&lt;/a&gt;, сообщества на &lt;a href="http://www.liveinternet.ru/top/community/"&gt;LiveInternet.ru&lt;/a&gt;, &lt;a href="http://www.livejournal.com/community/"&gt;ЖЖ&lt;/a&gt;, &lt;a href="http://www.mylivepage.ru/community"&gt;MyLivePage&lt;/a&gt; и &lt;a href="http://www.moskva.com/community/"&gt;Москва.com&lt;/a&gt;. Кроме того, всякие группы в социальных сетях тоже сойдут для этой цели.&lt;/p&gt;
&lt;p&gt;Еще одно достоинство такого подхода - сообщества все-таки обычно побочный плод блогосервисов и их меньше, чем блогов, а значит и в топ вылезти легче.&lt;/p&gt;
&lt;p&gt;Правда, в такой разновидности кросспостинга есть некоторые отличия по сравнению с кросспостингом в блоги:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Посты, зеркалируемые в сообщество, должны соответствовать его тематике, иначе вас быстро выгонят оттуда, а посты сотрут. Если у вас разноплановый блог, то желательно писать в несколько сообществ, согласно их тематике.&lt;/li&gt;
&lt;li&gt;Качество постов тоже должно быть достойным, иначе произойдет то же, что и в предыдущем случае.&lt;/li&gt;
&lt;li&gt;Вам нужно периодически проявлять и комментаторскую активность в ваших сообществах, иначе отношение к вам будет довольно прохладным. Помните, что сообщество - это в первую очередь общение людей, а не просто односторонний слив информации.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Исходя из перечисленных соображений, становится очевидно, что для достижения хороших результатов об автоматике лучше забыть и раскидывать посты ручками. Лучше уж пожертвовать количеством во имя качества, чем тратить ресурсы, зарабатывая нелюбовь окружающих.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сравнение выдачи по регионам: Я.Вебмастер.</title>
      <link>https://nevkontakte.com/2009/Comparison-of-issuance-by-regions-Webmaster.html</link>
      <pubDate>Thu, 23 Apr 2009 19:35:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Comparison-of-issuance-by-regions-Webmaster.html</guid>
      <description>&lt;p&gt;Не секрет, что с выходом Арзамаса сообщество сеошников пришло в некоторое смятение. Одним из популярных поводов для оного было как нормально продвигать сайты и отчитываться перед заказчиком, если у тебя выдача одна, у заказчика - другая, а у потенциального клиента - третья.&lt;/p&gt;
&lt;p&gt;И вот, спустя две недели после релиза, Яндекс наконец &lt;a href="http://webmaster.ya.ru/replies.xml?item_no=3659&amp;amp;ncrnd=2107"&gt;анонсировал&lt;/a&gt; новый &lt;a href="http://webmaster.yandex.ru/wmconsole/compare_regions.xml"&gt;инструмент для сравнения выдачи&lt;/a&gt; по разным регионам. Однако, тут имеет место небольшой казус, о котором я подробно расскожу в конце поста, из-за которого этот инструмент работает только в Опере. Если вы, как и я, пользуетесь Firefox или, не дай бог, IE, то выход все равно есть, даже два.&lt;/p&gt;
&lt;p&gt;Первый требует проделать немного манипуляций ручками, благо они совсем простые:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Открываете в Яндексе выдачу по интересующему вас вопросу.&lt;/li&gt;
&lt;li&gt;Дописываете в адресной строке параметр &lt;code&gt;lr=&amp;lt;код_региона&amp;gt;&lt;/code&gt;, где код региона для Москвы - 213, Питера - 2, всей прочей России - 225, Украины - 187 и Казахстана - 159.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Все, желанная выдача перед вами.&lt;/p&gt;
&lt;p&gt;Однако, этот вариант совершенно не нагляден и напр&lt;strong&gt;я&lt;/strong&gt;жен для таких лентяев, как &lt;del&gt;вы и&lt;/del&gt; я. Поэтому я написал небольшой скриптик, который устраняет упомянутый казус и позволяет вам сравнивать удобно выдачу, как оно было задумано в изначальном инструменте от Яндекса. Как им пользоваться:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="https://nevkontakte.com/files/index.php_.txt"&gt;Скачиваем&lt;/a&gt; скрипт.&lt;/li&gt;
&lt;li&gt;Меняем расширение на .php&lt;/li&gt;
&lt;li&gt;Заливаем на сервер и открываем в браузере.&lt;/li&gt;
&lt;li&gt;Далее все интуитивно понятно.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Хинт: для работы скрипта нужно, чтобы в php.ini стояло allow_url_fopen=On.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Ну а теперь об этом самом казусе, на который я ссылался в начале. Суть в следующем: региональная выдача  загружается фо вреймах, а у яндекса испокон веков есть скрипт, запрещающий открывать его в них. Находится он в самом начале файла &lt;code&gt;http://css.yandex.net/css/search/r9/_serp.js&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;if((self.parent&amp;amp;&amp;amp;!(self.parent===self))&amp;amp;&amp;amp;(self.parent.frames.length!=0)){self.parent.location=document.location}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Забавно, что в Опере, кстати переброс не происходит. Причина в том, что предшествующий редиректу код непосредственно в теле страницы вызывает ошибку &lt;code&gt;Security error: acodeempted to write protected variable&lt;/code&gt; и все дальнейшие скрипты не отрабатывают:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; var code = { // Вырезано dsuf: &amp;quot;ru&amp;quot;, // Вырезано } document.domain = (code.dsuf == 'ua') ? 'yandex.ua' : 'yandex.ru'; // Вот тут возникает ошибка &amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Из этого, кстати, можно сделать вывод, что программисты Яндекса любят Оперу, иначе они бы обязательно заметили проблему. :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD.&lt;/strong&gt; Яндексоиды баг починили.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Блог RegSubmitter - для тех, кто хочет быть в курсе.</title>
      <link>https://nevkontakte.com/2009/Blog-RegSubmitter-for-those-who-want-to-be-aware-of.html</link>
      <pubDate>Wed, 22 Apr 2009 22:12:59 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Blog-RegSubmitter-for-those-who-want-to-be-aware-of.html</guid>
      <description>&lt;p&gt;Поскольку развитию и доработке &lt;a href="https://web.archive.org/web/20120101043121/http://regsubmitter.ru/index.html"&gt;RegSubmitter&lt;/a&gt; я уделяю весьма значительную часть своего времени, у меня частенько повявляется, что про него сказать нового. Поэтому для удобства и пользователей RegSubmitter, и моих читателей я решил вынести все, что его касается в &lt;a href="https://web.archive.org/web/20101109014324/http://regsubmitter.ru:80/blog/"&gt;отдельный блог&lt;/a&gt;. Пользователям теперь будет легче отслеживать связанную с ним информацию, не отвлекаясь на все остальные мои посты, а читателям не будут надоедать регулярные анонсы всяких новшеств в RS. Ну а если кому-то интересно и то, и другое - подпишитесь на оба блога и все будет замечательно :)&lt;/p&gt;
&lt;p&gt;Помимо блога я реализовал еще несколько полезных функций для пользователей RS: теперь доступ в раздел поддержки пользователей можно получить полностью в автоматическом режиме, а на главной странице теперь можно увидеть номера последних версий пакетов RS без необходимости логиниться. Если у кого-то есть дополнительные пожелания - милости прошу, все они будут услышаны и приняты к сведению.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;PS.&lt;/strong&gt; Twitter продолжает з&lt;del&gt;охав&lt;/del&gt;ахватывать внимание народных масс. Но если вам хочтеся выделиться из этих масс, то довольно удачным вариантом будет обзавестись своим собственным stanalone-твиттером. Для этого на самом деле нужно всего-ничего &lt;a href="http://freewordpressthemes.ru/p2-theme-for-the-blog-inspired-twitter.html"&gt;Wordpress и тему в духе Twitter&lt;/a&gt; для него.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Все хорошо. А вы не знали?</title>
      <link>https://nevkontakte.com/2009/All-is-good-And-you-didn-t-know.html</link>
      <pubDate>Tue, 21 Apr 2009 19:39:44 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/All-is-good-And-you-didn-t-know.html</guid>
      <description>&lt;p&gt;На самом деле, мы живем в очень благополучной стране, разве вы не знали? Все настолько богаты и довольны жизнью, что даже не воруют. Вот у нас в подъезде уже две недели посреди площадки стоит монитор, а его мало того, что не сперли, так даже и не передвинули в сторонку, чтоб не мешал на проходе:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/Photo-0019.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/Photo-0019.jpg" alt="Photo-0019.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Круто, правда? Еще через месяц кто-нибудь системник выкинет, и, глядишь, бомжи уже будут к нам как в компьютерный клуб ходить, в контру резаться. Или в Tycoon&amp;hellip;&lt;/p&gt;
&lt;p&gt;Единственно, что в нашей стране пока не совершенно - это почта, хотя и она близится к идеальной (представьте, за последние два года у меня не замылили ни одной посылки). Собственно, расстраивает в ней потрясающая непродуктивность обслуживания людей. Единственное работающее окошко занимается одновременно приемом писем и посылок, выдачей пенсии, выдачей заказных писем и посылок и в добавок продажей всякого ширпотреба, плюс перерывы каждые пол часа. Чтобы получить апрельский номер &lt;a href="http://linuxformat.ru/"&gt;LXF&lt;/a&gt;, мне пришлось простоять 1 час 5 минут, а за это время было обслужено всего 12 человек, не считая меня (мне-то, в прочем, хватило минуты - бумажку я заполнил стоя в очереди, а на собственно выдачу посылки много времени не надо). То есть, в среднем по пять минут на рыло. При чем замечено, что больше всего времени занимает выдача пенсий и прием писем. Так почему бы их не отделить от основной очереди во второе окошко, тем более, что оно есть и даже оборудовано компом?&lt;/p&gt;
&lt;p&gt;Ну да ладно, обратимся к позитиву. Пока скучал в очереди на глаза мне попался список услуг, оказываемых почтой:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/Photo-0020.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/Photo-0020.jpg" alt="Photo-0020.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Вот несколько особенно любопытных пунктов:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;8. Продажа товаров народного потребления.&lt;/strong&gt; Извините, нынче на каждом углу супермаркеты торчат, кто будет покупать &amp;ldquo;товары народного потребления&amp;rdquo; на почте, учитывая часовую очередь на ней? Набор &amp;ldquo;народных товаров&amp;rdquo; тоже, кстати, довольно любопытный: помимо типичных книжек/открыток/журналов имеются &lt;strong&gt;зубная щетка&lt;/strong&gt;, &lt;strong&gt;средство для чистки унитаза&lt;/strong&gt; и &lt;strong&gt;туалетная бумага&lt;/strong&gt;! Туалетная бумага на почте еще объяснима - специально для графоманов и писателей Ленину, Сталину и Брежневу с Хрущевым, дешево и сердито, но &amp;ldquo;туалетный утенок&amp;rdquo; не поддается логическому объяснению.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;10. Оформление полисов добровольного и обязательного страхования.&lt;/strong&gt; Ну скажите, при чем тут почта?!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;14. Обслуживание представителей фирмы ООО &amp;ldquo;Avon&amp;rdquo;.&lt;/strong&gt; Можно подумать, что представителей других фирм они обслуживать не станут. Сектанты какие-то.&lt;/p&gt;
&lt;p&gt;Ну и напоследок. Ваши посылки хранятся вот так:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/Photo-0021.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/Photo-0021.jpg" alt="Photo-0021.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Удивительно, как они в этой куче находят нужные?&amp;hellip;&lt;/p&gt;
&lt;p&gt;PS. Как это ни парадоксально, но блоггеры могут пообщаться между собой не только в комментах или icq, но и на собственном &lt;a href="http://bgtalk.ru"&gt;Форуме блоггеров&lt;/a&gt; ;-)&lt;/p&gt;</description>
    </item>
    <item>
      <title>KDEeebuntu: теперь с KDE3.</title>
      <link>https://nevkontakte.com/2009/KDEeebuntu-now-with-KDE3.html</link>
      <pubDate>Sat, 18 Apr 2009 21:32:56 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/KDEeebuntu-now-with-KDE3.html</guid>
      <description>&lt;p&gt;Моя &lt;a href="https://nevkontakte.com/2009/KDEeebuntu-KDE-Remix-Ubuntu-under-ASUS-eee-PC.html"&gt;предыдущая попытка&lt;/a&gt; поиметь у себя на нетбуке полноценный дистрибутив Linux с рабочим столом KDE привела к противоречивым результатам. С одной стороны, моя сборка вполне прилично поддерживала все железо и в ней имелся весь нужный софт. С другой - KDE4 все-таки ощутимо подтормаживал на нетбуке, да и явно был рассчитан на большее разрешение. В результате появлялся некоторый дискомфорт, который с течением времени превращал работу на буке в сплошное раздражение.&lt;/p&gt;
&lt;p&gt;KDE3 стал бы оптимумом, но по какому-то недоразумению в Canonical решили выкинуть тройку репозиториев из Ubuntu 8.10, так что выбора особого не было. Внутреннее недовольство приближалось к критической массе.&lt;/p&gt;
&lt;p&gt;В таком состоянии и пребывали дела примерно неделю назад. На выходных мое терпение лопнуло и я снова полез под стол за бубном, благополучно валявшимся там со времен прошлых экспериментов.&lt;/p&gt;
&lt;p&gt;К счастью, не одного меня не устраивают четвертые кеды, и нашелся &lt;a href="http://apt.pearsoncomputing.net/"&gt;неофициальный репозиторий&lt;/a&gt;, содержащий (почти) все нужные пакеты, которым я и воспользовался. Печаль есть только одна: в этом репозитории начисто отсутствуют пакеты русской локализации, и добавлять их владелец не собирается &amp;ldquo;поскольку это хлопотно&amp;rdquo;. Но нам-то что, английский - наше все :)&lt;/p&gt;
&lt;p&gt;И так, представляю вам &lt;strong&gt;KDEeebuntu KDE3-remix&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Поддержка всего железа Asus eee pc (проверено на 901-й модели).&lt;/li&gt;
&lt;li&gt;KDE3 на борту.&lt;/li&gt;
&lt;li&gt;Уменьшенные шрифты по-умолчанию (но, возможно, вы захотите их еще уменьшить).&lt;/li&gt;
&lt;li&gt;Английский интерфейс.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://uploadbox.com/files/d20e601236"&gt;Скачать с Uploadbox&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://depositfiles.com/files/wtfmy5fvr"&gt;Скачать с depositfiles&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://letitbit.net/download/048672b1900ce2a/kdeeebuntu_2.0_standard_kde3.iso.html"&gt;Скачать с Letitbit&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Четвертьпост:&lt;/strong&gt; RegSubmitter Reborn - уже скоро.&lt;/p&gt;
&lt;p&gt;Мне пришло уже несколько писем с вопросом, не забросил ли я &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;. Отвечаю: нет, напротив, сейчас я работаю надо новой модульной системой, которая позволит добавить целый спектр вкусных возможностей. И уже скоро все обладатели лицензий смогут ощутить их в деле :) В новой версии основной упор делается на человечность создаваемых профайлов и простоту добавления новых сервисов.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anything 2 Zebrum: Новый модуль RSS 2 Zebrum готов к завоеванию вселенной!</title>
      <link>https://nevkontakte.com/2009/Anything-2-Zebrum-New-RSS-module-2-Zebrum-ready-to-conquer-the-universe.html</link>
      <pubDate>Sat, 04 Apr 2009 18:14:26 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Anything-2-Zebrum-New-RSS-module-2-Zebrum-ready-to-conquer-the-universe.html</guid>
      <description>&lt;p&gt;Релиз Zebrum Bloglike подтолкнул меня к доделыванию еще одной старой задумки: модуля конвертации RSS для сервиса &lt;a href="https://web.archive.org/web/20101022095431/http://anything2.zebrum.net.ru/"&gt;Anything 2 Zebrum&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Новый модуль призван за пару секунд сконвертировать RSS ленту в сайт на Zebrum Bloglike или Lite. Так же как и первый модуль, Text 2 Zebrum, RSS2Z обладает большим количеством настроек, в т. ч.:&lt;/p&gt;
&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;/ul&gt;
&lt;p&gt;Кроме того, сервис переехал на новый, более быстрый, сервер и сенил домен. Теперь его можно найти по адресу &lt;a href="https://web.archive.org/web/20101022095431/http://anything2.zebrum.net.ru/"&gt;http://anything2.zebrum.net.ru/&lt;/a&gt; или его короткому варианту - &lt;a href="https://web.archive.org/web/20101022095431/http://anything2.zebrum.net.ru/"&gt;http://a2.zebrum.net.ru&lt;/a&gt;. Как и прежде, сервис остается бесплатным и доступ к нему ничем не ограничен (если не злоупотреблять ;))&lt;/p&gt;
&lt;p&gt;PS. Семь блоггеров проводят конкурс &amp;ldquo;&lt;a href="http://7bloggers.ru/o-blogginge-v-dvux-slovax-konkurs/"&gt;О блоггинге в двух словах&lt;/a&gt;&amp;rdquo;. Суть его проста: есть два списка слов, из каждого случайно берется по одному и выдается участнику в качестве темы поста. Ну а дальше уже все зависит от вашего умения писать о чем угодно :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Движок приватных форумов. Нужен ли?</title>
      <link>https://nevkontakte.com/2009/The-engine-of-the-private-forums-Do-you-need.html</link>
      <pubDate>Thu, 26 Mar 2009 17:28:36 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/The-engine-of-the-private-forums-Do-you-need.html</guid>
      <description>&lt;p&gt;Вот последнее время у меня мелькает шальная мысль: а не сделать ли мне форумный движок, заточенный под приватные форумы? Если взять за основу phpBB2, то можно довольно быстро получить приличный движок. Кроме своей простоты phpBB2 хорош тем, что его код вылизан до предела и на данный момент уже года полтора как в нем не было найдено ни одной дыры.&lt;/p&gt;
&lt;p&gt;Каково ваше мнение, стоит заморачиваться?&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zebrum Bloglike - блоговидные сателлиты</title>
      <link>https://nevkontakte.com/2009/Zebrum-Bloglike-blogovidnyi-satellites.html</link>
      <pubDate>Wed, 25 Mar 2009 23:11:51 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Zebrum-Bloglike-blogovidnyi-satellites.html</guid>
      <description>&lt;p&gt;&lt;img src="http://blog.zebrum.ru/wp-content/uploads/2008/09/zebrumderevo.jpg" alt="Zebrum Bloglike"&gt;Давно я не публиковал никаких скриптов&amp;hellip; И теперь я намерен исправить это упущение :)&lt;/p&gt;
&lt;p&gt;Представляю вашему вниманию &lt;strong&gt;Zebrum Bloglike&lt;/strong&gt; - мод известной в сеошных кругах cms для сателлитов &lt;a href="http://blog.zebrum.ru/category/zebrum-lite/"&gt;Zebrum Lite&lt;/a&gt;. Мод призван сделать ваш сателлит значительно более &amp;ldquo;блоговидным&amp;rdquo; в придирчивых глазах поисковиков, что так важно в наше кризисное время.&lt;/p&gt;
&lt;p&gt;Вот ключевые особенности Bloglike:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Главная а ля блог.&lt;/strong&gt; На главной странице отображаются несколько последних постов, как это обычно бывает в блогах.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Автогенерация комментариев.&lt;/strong&gt; Имея базу заранее заготовленных комментариев, вы можете создать впечатление посещаемости и комментируемости вашего блога.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Форма комментирования.&lt;/strong&gt; Правда, сообщения из нее уходят &amp;ldquo;в никуда&amp;rdquo;, но ведь не будете же вы тратить время на чистку спама на сателлитах.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Совместимость с Zebum Lite.&lt;/strong&gt; При написании мода я старался как можно меньше трогать оригинальный код Zebrum Lite, так что практически все, что верно для Lite, верно и для Bloglike, в частности, контент от одного будет отлично переварен другим.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Совместимость с Zebrum CMS.&lt;/strong&gt; Так же проверено, что Bloglike отлично работает в связке с Zebrum CMS, с тем лишь ограничением, что специфичные для него настройки нужно редактировать напрямую в ini-файле. Кстати, если у вас еще нету Zebum CMS - пишите и я помогу вам исправить это упущение ;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Так же, я полагаю, для вас будет приятно узнать, что **Zebrum Bloglike **так же бесплатна, как и ее прародительница.&lt;/p&gt;
&lt;p&gt;Почитать обо всех фитчах мода можно &lt;a href="https://web.archive.org/web/20090328124044/http://zebrum.net.ru/features.html"&gt;тут&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://web.archive.org/web/20090328124044/http://zebrum.net.ru/"&gt;Скачать Zebrum Bloglike&lt;/a&gt; и просто посмотреть ее в действии можно на демо-сайте.&lt;/p&gt;
&lt;p&gt;Кроме того, на форуме Zebrum есть &lt;a href="http://zebrum.ru/forum/index.php?showtopic=347"&gt;топик&lt;/a&gt;, посвященный Zebrum Bloglike, где можно задать вопрос или оставить отзыв.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Люди, пожалейте русский язык!</title>
      <link>https://nevkontakte.com/2009/People-take-a-Russian-language.html</link>
      <pubDate>Mon, 23 Mar 2009 19:46:55 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/People-take-a-Russian-language.html</guid>
      <description>&lt;p&gt;Сразу скажу, в этом посте не будет ни слова, ни о SEO, и о программировании, и о чем другом из сферы IT.&lt;/p&gt;
&lt;p&gt;Дело было вот как. Сижу я на лекции по механике, скучаю страшно, ибо все это нам в ФМШ уже читали (и лектор, кстати, тот же самый). Бук сегодня не взял, не сделанной домашки у меня тоже вроде нету, от безысходности решил почитать башорг.&lt;/p&gt;
&lt;p&gt;Лучше бы я этого не делал. Из четырех цитат три обязательно с кучей разнообразных ошибок, как орфографических, так и синтаксических. Про грамматику я вообще молчу. Вот может мне кто-нибудь объяснить, почему только единицы ставят мягкий знак в глаголах после шипящей на конце? Неужели это правило так сложно запомнить? Или все поголовно прогуливали уроки русского языка?&lt;/p&gt;
&lt;p&gt;Впрочем, хрен с ним, с башоргом. Контингент там ошивается и впрямь не слишком интеллектуальный. Давайте заглянем на любой форум. За редким исключением, там творится та же херня, что и на башорге. Как вам ситуация: приходит человек за помощью, но пишет свой вопрос так, что никто не в состоянии понять, что он хочет. &amp;ldquo;Казнить нельзя помиловать&amp;rdquo; и рядом не лежало. Четыре строчки текста, совершенно без знаков препинаний, больших букв и громадным количеством ошибок. А потом начинаются непонятки, почему ему никто по существу не отвечают. Бля, поймите, родные! Суппорт не обязан разгадывать ребусы, помощь нужна вам, а не им! В ваших интересах облегчить жизнь отвечающим.&lt;/p&gt;
&lt;p&gt;И вот такое повсеместное надругательство над языком повсюду в интернете. Как можно с этим бороться? Не знаю. У меня есть один пример, когда администратор одного форума настолько забодался бороться с безграмотностью, что наверху форума появилась большая и заметная надпись вот такого содержания:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Уважаемые форумчане!&lt;/p&gt;
&lt;p&gt;В русском языке есть обалденные заглавные буквы и сексуальные знаки препинания. Пожалуйста, используйте их при написании сообщений. От этого ваши сообщения выглядят красивее и убедительнее.&lt;/p&gt;
&lt;p&gt;Помните, наш форум — не чат. Короткие сообщения, состоящие из 1—5 слов, уместны в чате, но, в большинстве случаев, совершенно не уместны в форуме. При написании сообщений не торопитесь, выражайте мысли ясно.&lt;/p&gt;
&lt;p&gt;Всегда аргументируйте свою точку зрения.&lt;/p&gt;
&lt;p&gt;После того, как написали сообщение — прочитайте его. Постарайтесь представить, как воспримет это сообщение тот, кому оно адресовано.&lt;/p&gt;
&lt;p&gt;Уважайте собеседника: представьте, что находитесь рядом с человеком и общаетесь с ним лично.&lt;/p&gt;
&lt;p&gt;Ссылки — это удобно. Если даёте ссылку на сайт — не нужно добавлять к ней знаки вроде _ или коверкать ссылку другими способами.&lt;/p&gt;
&lt;p&gt;От этого ссылки портятся и по ним становится невозможно перейти. Оставьте это сеошникам-параноикам&lt;/p&gt;
&lt;p&gt;(которые занимаются подобным совершенно зря, но это отдельная тема)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Собственно, ее и сейчас можно &lt;a href="http://www.eomy.net/forum/"&gt;лицезреть&lt;/a&gt;, только в виде html комментария.&lt;/p&gt;
&lt;p&gt;И что вы думаете? Ситуация исправилась. Сейчас все до единого форумчане пишут с минимумом ошибок, а если появляется новичок, то его тут же ставят перед фактом: либо пишеш&lt;strong&gt;ь&lt;/strong&gt; грамотно, либо здесь с тобой никто общаться не будет. И все это без вмешательства со стороны администратора.&lt;/p&gt;
&lt;p&gt;Может, всем администраторам форумов стоит перенять этот опыт?.. А в аську встроить спелл-чекер, ибо нефиг.&lt;/p&gt;
&lt;p&gt;В общем, все хреново, и это грустно&amp;hellip;&lt;/p&gt;
&lt;p&gt;PS. Вы фсьо ищо ф кантагте? Тада &lt;a href="http://subscribe.ru/digest/inet/inet/n94259763.html"&gt;четаите суда&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;PPS. Наболело.&lt;/p&gt;
&lt;p&gt;PPPS. Я не мню себя знатоком русского языка, просто &amp;ldquo;за державу обидно&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Конкурс от Яндекса: угадай формулу ранжирования.</title>
      <link>https://nevkontakte.com/2009/Competition-from-Yandex-guess-the-ranking-formula.html</link>
      <pubDate>Wed, 11 Mar 2009 17:16:13 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Competition-from-Yandex-guess-the-ranking-formula.html</guid>
      <description>&lt;p&gt;Полезно быть подписанным на &lt;a href="http://clubs.ya.ru/company/"&gt;блог Яндекса&lt;/a&gt; — всегда узнаешь полезные новости из первых рук.&lt;/p&gt;
&lt;p&gt;Вот, например, вчера был анонсирован конкурс «Интернет-математика 2009».&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Задача участников — с помощью методов машинного обучения получить формулу ранжирования документов. Для этого мы предоставляем участникам реальные данные — признаки пар «запрос-документ» и оценки релевантности, сделанные асессорами Яндекса. Варианты решений можно слать многократно вплоть до окончания конкурса. На основании части данных будет формироваться текущий публичный рейтинг решений. Победителей конкурса ждут призы, а у автора лучшего результата есть шанс увидеть, как будет работать его формула при поиске по всей базе Яндекса.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Нетрудно догадаться, что для веб-мастеров и сеошников узнать хотя бы примерную формулу ранжирования было бы подобно манне небесной. Кроме того, в случае успеха и приз получить было бы приятно. Ну что, господа сео-гуру, продемонстрируете миру, что есть еще мощные люди в русском сео?&lt;/p&gt;
&lt;p&gt;В общем, &lt;a href="http://company.yandex.ru/grant/2009/"&gt;информация о конкурсе&lt;/a&gt; из первых рук, а так же &lt;a href="http://company.yandex.ru/grant/2009/datasets"&gt;исходные данные&lt;/a&gt; к вашим услугам.&lt;/p&gt;
&lt;p&gt;ЗЫ. &lt;em&gt;Взгляд с другой стороны:&lt;/em&gt; сколько себя помню, Яндекс делал все, чтобы держать в тайне принципы ранжирования. Не значил ли этот конкурс, что они в скором времени собираются все сильно поменять?  Поживем — увидим.&lt;/p&gt;</description>
    </item>
    <item>
      <title>KDEeebuntu: KDE-ремикс Ubuntu под ASUS eee PC</title>
      <link>https://nevkontakte.com/2009/KDEeebuntu-KDE-Remix-Ubuntu-under-ASUS-eee-PC.html</link>
      <pubDate>Mon, 09 Mar 2009 15:27:34 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/KDEeebuntu-KDE-Remix-Ubuntu-under-ASUS-eee-PC.html</guid>
      <description>&lt;p&gt;Для нетерпеливых: &lt;a href="https://nevkontakte.com/2009/KDEeebuntu-KDE-Remix-Ubuntu-under-ASUS-eee-PC.html"&gt;скачать eeebuntu с kde можно здесь&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Еще в начале января я выполнил очередную свою цель - обзавелся нетбуком. Им стал ASUS eee PC 901. В целом машинка оказалась хорошая и единственное, что меня в ней напрягало - родной Xandros был настолько мощно закошен под винду, что пользоваться им было совершенно невозможно. Всвязи с этим встал вопрос об установке на машинку &amp;ldquo;нормального&amp;rdquo; линукса. После длительного поиска специализированных дистрибутивов я остановился на eeebuntu - изначально заточенный под eee pc дистрибутив Ubuntu. Однако, будучи давним приверженцем KDE, я скоро начал тихо беситься от кривого и неудобного GNOME и отсутствия нормальных программ, необходимых мне для работы. Я снова пустился в поиск дистрибутива под eee pc, но со средой KDE в качестве десктопа по умолчанию. И, к своему удивлению, не нашел ровным счетом ничего.&lt;/p&gt;
&lt;p&gt;После тяжких раздумий, мною было принято волевое решение модифицировать дистрибутив eeebuntu, заменив GNOME на KDE. На мое счастье, под руку подвернулся январский номер журнала LinuxFormat, в котором описывалась весьма интересная утилитка под названием &lt;a href="http://uck.sourceforge.net/"&gt;Ubuntu Customization Kit&lt;/a&gt;. Далее последовала серия дней и ночей, в течение которых я пытался подобрать правильный набор программ, который бы позволил полностью заменить GNOME на KDE, при этом не повредив ничего лишнего. Спустя неделю передо мною уже лежал полностью исписанный тетрадный лист со списком действий, необходимых для получения заветного дистрибутива, полезных пакетов, которые в него стоило включить и прочих нужных зметок.&lt;/p&gt;
&lt;p&gt;Наконец, вечером 8 марта, когда все знакомые женщины и девушки были поздравлены и разошлись по разным местам празновать, я наконец сумел собрать образ, который успешно проходил тестирование на виртуальной машине, устанавливался и не падал от каждого чиха. Образ был записан на флешку, флешка вставлена в нетбук и запущена установка. И спустя пол часа я получил долгожданный KDE на своем нетбуке. Радости не было предела. Затем еще за час был настроен внешний вид, уменьшены шрифты и подогнана тема оформления и я получил то, к чему шел почти месяц&amp;hellip;&lt;/p&gt;
&lt;p&gt;Полагаю, кому-то в голову придет вопрос, зачем было затевать всю эту вознью со сборкой дистрибутива, если можно было просто поставить eeebuntu и доставить KDE. Отвечу: накопитель, отведенный под системный раздел в eee pc имеет размер всего 4 Гб и на него бы просто не влезли и KDE, и GNOME одновременно. Кроме того, мне хотелось получить среду, абсолютно чистую от Гнома. От сюда и все пляски с бубном.&lt;/p&gt;
&lt;p&gt;Ну а теперь самое главное. Будучи по натуре не жадным человеком я делюсь моей поделкой со всеми желающими:&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://uploadbox.com/files/i8aIfvCaYu"&gt;Скачать KDEeebuntu c uploadbox.com&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://letitbit.net/download/f8106747447/kdeeebuntu-2.0-standard.iso.html"&gt;Скачать KDEeebuntu c LetItBit.net&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://smsfiles.ru/f/5eeaf47929a2b1f4e08bc7935df76852/kdeeebuntu-2.0-standard.iso.html"&gt;Скачать KDEeebuntu c smsfiles.ru&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://depositfiles.com/files/m92by7ibs"&gt;Скачать KDEeebuntu с deposifiles.ru&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;del&gt;&lt;a href="http://torrents.ru/forum/viewtopic.php?t=1626113"&gt;Скачать KDEeebuntu с torrents.ru&lt;/a&gt;&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Собрал &lt;a href="https://nevkontakte.com/2009/KDEeebuntu-now-with-KDE3.html"&gt;версию с KDE 3.5&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обновление блога</title>
      <link>https://nevkontakte.com/2009/A-blog-update.html</link>
      <pubDate>Fri, 06 Mar 2009 14:09:20 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/A-blog-update.html</guid>
      <description>&lt;p&gt;Сегодня наконец обновил блог, попутно решив &lt;a href="https://nevkontakte.com/2009/Internet-pager-old-song-in-a-new-way.html"&gt;проблему с добавлением комментариев&lt;/a&gt;. Виноват был модуль рассылки уведомлений о новых комментариях, так что я от него благополучно избавился, заменив другим. К сожалению, при этом все старые подписки пропали.&lt;/p&gt;
&lt;p&gt;Пока искал модуль на замену, обнаружил, что под Друпал 6 практически ничего приличного нет, что очень обидно. Писать самому - лень.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Интернет-пейджер: старая песня на новый лад.</title>
      <link>https://nevkontakte.com/2009/Internet-pager-old-song-in-a-new-way.html</link>
      <pubDate>Thu, 26 Feb 2009 13:39:32 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Internet-pager-old-song-in-a-new-way.html</guid>
      <description>&lt;p&gt;Думаю, многие помнят, что в 90-е годы, еще до прихода сотовых телефонов, всякий уважающий себя &amp;ldquo;новый русский&amp;rdquo; имел пейджер, на который ему друзья, родственники и партнеры скидывали сообщения и дате пьянок, стрелок, ближайшего похода в магазин и все остальное, что совершенно необходимо знать серьезному человеку. Но связь была односторонняя и посему совершенно неудивительно, что с появлением мобильников о них быстро забыли.&lt;/p&gt;
&lt;p&gt;С другой стороны, этот &amp;ldquo;недостаток&amp;rdquo; мне в последнее время кажется все более и более положительной чертой и вот почему. Все чаще я испытываю острое нежелание запускать свой асько-, джаабер- и пр. клиент, потому что точно знаю: стоит мне сменить статус хотя бы на инвиз, как это будет замечено и меня тут же начнут атаковать куча разных людей своими вопросами, делами, просьбами, хотя реально мне нужно пообщаться лишь с одним из них, коротко и по делу.&lt;/p&gt;
&lt;p&gt;Ну а теперь к сути идеи. А она проста: создать интернет-реинкарнацию старого доброго пейджера с однонаправленной связью и мгновенным уведомлением адресата о пришедшем сообщении. Возможно, еще стоит добавить возможность просмотра отправителем статус сообщения прочитан/не прочитан и все. Для полноценного функционирования сервиса нужно написать клиенты для него под различные ОС, для мобильников и коммуникаторов и реализовать веб-интерфейс на случай отсутствия под руками десктопного клиента.&lt;/p&gt;
&lt;p&gt;Таким образом мы получаем разумный оптимум:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Любой человек может отправить адресату сообщение и убедиться, что оно дошло.&lt;/li&gt;
&lt;li&gt;Адресат моментально получает уведомления о новых сообщениях.&lt;/li&gt;
&lt;li&gt;Адресат может не спеша решить, как и когда ему выйти на связь (или сразу ответить на пейждер отправителя) и при этом не отвлекаться на нежелательные в данный момент разговоры.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Вот такая вот идея. Технически она никакой сложности не представляет - с нею вполне можно справиться за пару-тройку месяцев с учетом написания клиентов под Linux, Windows, Mac и мобильники, если в команде будут работать хорошие и заинтересованные программисты.&lt;/p&gt;
&lt;p&gt;PS. Лично я эту идею вряд ли когда-нибудь реализую, у меня нет ни времени, ни ресурсов. Но хоронить идею в глубинах памяти жалко - идея-то неплохая. Возможно, ее кто-нибудь прочтет и реализует&amp;hellip;&lt;/p&gt;
&lt;p&gt;PPS. Если моя идея вам понравилась, то, пожалуйста, проголосуйте за нее: &lt;a href="http://sloger.net/story/internet-peydzher-staraia-pesnia-na-noviy-lad.html"&gt;Интернет-пейджер: старая песня на новый лад.&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>RegSubmitter English Social Bookmarks - в продаже.</title>
      <link>https://nevkontakte.com/2009/RegSubmitter-English-Social-Bookmarks-is-on-sale.html</link>
      <pubDate>Tue, 17 Feb 2009 22:11:13 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/RegSubmitter-English-Social-Bookmarks-is-on-sale.html</guid>
      <description>&lt;p&gt;Спешу вас обрадовать, &lt;strong&gt;RegSubmitter ESB&lt;/strong&gt; наконец увидел свет! На данный момент он позвояет регистрировать аккаунты в 15 зарубежных сервисах, 14 из которых - do-follow: A1-Webmarks, BibSonomy.org, Connotea, folkd.com, Furl.net, GiveALink, iKeepBookmarks.com, LinkaGoGo, myVmarks, Mister Wong.com, myHq beta, SyncOne.net, Spotback, Technorati и Delicious. Цена этого комплекса - всего &lt;strong&gt;$15&lt;/strong&gt; Ровно столько, сколько поддерживается сервисов. И с увеличением этого числа, будет расти и цена, так что покупайте заранее, ибо все обновления - бесплатные :)&lt;/p&gt;
&lt;p&gt;Купить, как всегда, можно на &lt;a href="https://web.archive.org/web/20101109014324/http://regsubmitter.ru/index.php?mode=buy"&gt;официальном сайте&lt;/a&gt;, а если вы еще колеблетесь, то можно посмотреть на &lt;a href="https://web.archive.org/web/20101109014324/http://regsubmitter.ru/demo/"&gt;демо-версию&lt;/a&gt;. Она отличается от полной только тем, что &lt;del&gt;не говорит, а только меняет цвет&lt;/del&gt; на самом деле нигде ничего не регистрирует, но зато дает в полной мере прочувствовать легкость и простоту процесса.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Но это еще не все&lt;/em&gt; приятные новости. Цена на &lt;strong&gt;RegSubmitter RSB&lt;/strong&gt;, работающий с русскими сервисами, так же снижена до &lt;strong&gt;$15&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Следующая новость&lt;/em&gt; порадует тех, кто владеет языком PHP. На этих выходных будет опубликовано подробное руководство по созданию собственных модулей для RegSubmitter, на тот случай, если какой-то нужный вам сервис не поддерживается по умолчанию.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Ну и напоследок&lt;/em&gt; немного поделюсь своими планами. Есть идея создать онлайн-сервис на базе RegSubmitter, который позволит вам регистрировать аккаунты по сравнительно небольшой цене без приобретения RegSubmitter. Нужен ли, по-вашему, такой сервис?&lt;/p&gt;
&lt;p&gt;PS. Надо сказать, что порядочную часть моего времени у меня занимает чтение всякий художественной литературы. Люблю я это дело, что греха таить. Вот и приходится регулярно гуглить &amp;ldquo;&lt;a href="http://diksis.info/knigibesplatno.html"&gt;скачать книги бесплатно&lt;/a&gt;&amp;rdquo;, а то на книжный магазин денег не напасешься :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Интернет-забор. Оставь свой автограф в сети!</title>
      <link>https://nevkontakte.com/2009/Internet-fence-Leave-their-autographs-on-the-net.html</link>
      <pubDate>Tue, 10 Feb 2009 21:45:57 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Internet-fence-Leave-their-autographs-on-the-net.html</guid>
      <description>&lt;p&gt;Признайтесь честно, вы ведь хотя бы раз испытывали желание написать что-нибудь на заборе или стене подъезда? Наверняка испытывали. Поэтому я могу вас порадовать: у вас появилась возможность в некотором роде реализовать это желание :)&lt;/p&gt;
&lt;p&gt;Позвольте представить вам &lt;a href="https://web.archive.org/web/20100612002448/http://zabora.net.ru/"&gt;Интернет-забор&lt;/a&gt;. Любой желающий может зайти туда и оставить свой автограф или иное послание совершенно невозбранно - лишь бы оно не противоречило нормам разумного приличия. Вы можете настроить внешний вид сообщения (шрифт, размер, цвет и пр.) по своему вкусу, а так же вы полностью вольны выбирать местоположение надписи на заборе 8)&lt;/p&gt;
&lt;p&gt;Проект был придуман и реализован совершенно нечаянно, на едином дыхании, так что что из этого выйдет я затрудняюсь сказать. Тем не менее, у меня уже есть изрядный список идей для усовершенствования забора. Например, прдключить к этому делу графику и имитировать рукописный шрифт, а не ограничиваться приевшимся набором стандартных. Кроме того, принимаются отзывы и пожелания ото всех желающих :)&lt;/p&gt;
&lt;p&gt;Буду благодарен всем, кто поддержит забор информационно :) С меня ссылочка.&lt;/p&gt;
&lt;p&gt;PS. &lt;a href="https://nevkontakte.com/2009/Linkomanija-than-fresh-or-topics.html"&gt;Линкоманулия&lt;/a&gt; прогрессирует. Прямое тому доказательство - аукцион по продаже ссылок с анкором &lt;a href="http://blogeer.ru/?p=41"&gt;линкомаулия&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Ровно пять дней понадобилось, чтобы на заборе появилось гордое слово &amp;ldquo;хуй&amp;rdquo;. Кто бы сомневался.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Линкоманулия или по чём свежие темы?</title>
      <link>https://nevkontakte.com/2009/Linkomanija-than-fresh-or-topics.html</link>
      <pubDate>Wed, 04 Feb 2009 13:16:57 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Linkomanija-than-fresh-or-topics.html</guid>
      <description>&lt;p&gt;Уже давно полным ходом идет конкурс &lt;a href="http://puzat.ru/linkomauliya"&gt;линкомаулия&lt;/a&gt;. Многие блоггеры приняли в ней активное участие, рассчитывая урвать кусок от призового фонда в $7000.&lt;/p&gt;
&lt;p&gt;А вот какая от этого всего польза для организатора, дона Маула?&lt;/p&gt;
&lt;p&gt;Оно, конечно, понятно - в первую очередь это большой пиар его самого и его блога. Известно, что сие весьма способствует повышению самооценки и приятно для самолюбия. Но неужели человек разумный станет станет выбрасывать такие деньги просто так, потешить себялюбие? Конечно, нет.&lt;/p&gt;
&lt;p&gt;Хитрый Дон в обмен на $7000 получает возможность изучить все темы оптимизаторов, которые из шкуры вот лезут, чтобы попасть в семерку лидеров.&lt;/p&gt;
&lt;p&gt;И правда, нехилый призовой фонд и широкая огласка конкурса порождают совершенно нездоровую конкуренцию в топе &amp;ldquo;линкомаулии&amp;rdquo;, и совершенно очевидно, что для попадания в топ за счет классических закупок ссылок и постовых придется потратить больше, чем получишь (если получишь) в качестве приза. Поэтому оптимизаторам приходится прибегать ко всем известным им хитростям и использовать все доступные темы, чтобы подняться в выдаче. Маулу же остается только наблюдать за лидерами и изучать, как они продвигаются. Получается, что свежие темы оптом нынче стоят $7000 - не больше и не меньше.&lt;/p&gt;
&lt;p&gt;Все это я пишу не к тому, что Маул такой плохой и крадет чужие темы. Наоборот, он молодец, замечательно придумал. Настолько замечательно, что все чужие темы можем получить и мы с вами - достаточно только внимательно изучить &lt;a href="http://yandex.ru/yandsearch?rpt=rad&amp;amp;text=%D0%BB%D0%B8%D0%BD%D0%BA%D0%BE%D0%BC%D0%B0%D1%83%D0%BB%D0%B8%D1%8F"&gt;выдачу&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Так что не зевайте, господа!&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/linkomanul.jpg" alt="Линкоманул"&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>SEO кроссворд от ProdvinemVmeste.ru</title>
      <link>https://nevkontakte.com/2009/SEO-crossword-from-ProdvinemVmeste-ru.html</link>
      <pubDate>Wed, 04 Feb 2009 12:48:10 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/SEO-crossword-from-ProdvinemVmeste-ru.html</guid>
      <description>&lt;p&gt;Давно уже следовало об этом написать, но как-то руки не доходили.&lt;/p&gt;
&lt;p&gt;Павет, автор блога &lt;a href="http://prodvinemvmeste.ru"&gt;Продвинем Вместе&lt;/a&gt;, сделал замечательный &lt;a href="http://www.prodvinemvmeste.ru/krossvord/krossvord-ot-pavla-aka-prodvinem-vmeste.htm"&gt;SEO кроссворд&lt;/a&gt;. Свою руку к нему приложил и я - на моей совести была техническая реализация.&lt;/p&gt;
&lt;p&gt;Кроссворд не слишком сложный, но всячески способствует разминке мозга, так что рекомендую его разгадать в добровольно-принудительном порядке ;)&lt;/p&gt;
&lt;p&gt;PS. Забавно, что спустя пару дней после январского лага ICQ мой необновленный клиент снова стал коннектиться напрямую. Зато, судя по всему, вчера они вновь перешли на новый протокол и коннектиться напрямую перестало опять. Теперь пашет только через tor, что говорит о том, что Европы их махинации не каснулись.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Не в контакте - год спустя. Отчет.</title>
      <link>https://nevkontakte.com/2009/Not-in-contacts-a-year-later-Report.html</link>
      <pubDate>Tue, 03 Feb 2009 12:20:29 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Not-in-contacts-a-year-later-Report.html</guid>
      <description>&lt;p&gt;И так, чуть более года назад в этом блоге была опубликована &lt;a href="https://nevkontakte.com/2008/The-site-is-launched.html"&gt;первая запись&lt;/a&gt;. Тогда я еще слабо представлял, что из этого выйдет, как в тематическом плане, так и в содержательном. В качестве движка был выбран &lt;a href="http://b2evolution.net"&gt;b2evolution&lt;/a&gt;, но из-за сравнительно низкой популярности стиль пришлось &lt;a href="https://nevkontakte.com/2008/b2evolution-inside-or-porting-skin.html"&gt;портировать вручную&lt;/a&gt;. Создание блога пришлось на пик популярности социальных сетей вроде вконтакта, которые в ту пору ухитрялись отнимать просто колоссальное количество времени у моих друзей и знакомых. Это настолько встревожило меня, что я решил держаться подальше от этой чумы и &lt;a href="https://nevkontakte.com/2008/Not-in-contact-or-why-it-was-called-so-this-blog.html"&gt;блог назвал соответственно&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Вскоре мое &lt;a href="https://nevkontakte.com/2008/Virtualization-and-hosting-my-search-in-the-world-of-technology.html"&gt;внимание привлекли&lt;/a&gt; технологии серверной виртуализации, и в результате я &lt;a href="https://nevkontakte.com/2008/OpenVZ-first-impressions.html"&gt;узнал&lt;/a&gt; довольно много нового и интересного для себя. Параллельно с этим я &lt;a href="https://nevkontakte.com/2008/Use-SVN-website-governance-Part-one-theoretical-considerations.html"&gt;осваивал SVN&lt;/a&gt;, который мне был необходим для разработки модов для phpBB.&lt;/p&gt;
&lt;p&gt;29 мая 2008 года я написал небольшой &lt;a href="https://nevkontakte.com/2008/Forum-Matrix-compare-engines.html"&gt;пост о выборе движка форума&lt;/a&gt;, который с тех пор надежно удерживает первое место по читаемости. Хотел бы я знать, почему.&lt;/p&gt;
&lt;p&gt;К лету старый движок блога меня окончательно достал постоянными глюками, поэтому &lt;a href="https://nevkontakte.com/2008/Moving-to-a-new-engine-and-other-Goodies.html"&gt;было решено перевести&lt;/a&gt; его на гораздо более гибкий и удобный Drupal версии 5.х. Так что третье июня можно считать вторым днем рождения этого блога :)&lt;/p&gt;
&lt;p&gt;Первые шаги в SEO я стал делать в конце июня. Примерно тогда же я наткнулся на один сайт обмена посетителями, который просто &lt;a href="https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-or-Receive-visitors-for-free.html"&gt;поразил&lt;/a&gt; меня корявостью реализации. Позже я нашел там &lt;a href="https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-Take-two.html"&gt;еще один косяк&lt;/a&gt;. Продолжая изучать поведение поисковиков, я провел &lt;a href="https://nevkontakte.com/2008/RoboMap-Project-detailed-study-of-search-engine-indexing.html"&gt;эксперимент&lt;/a&gt;, чтобы выяснить, какие ссылки индексируют поисковики. Результаты: &lt;a href="https://nevkontakte.com/2008/RoboMap-Project-first-results.html"&gt;раз&lt;/a&gt;, &lt;a href="https://nevkontakte.com/2008/RoboMap-Project-statistics-for-3-days.html"&gt;два&lt;/a&gt;, &lt;a href="https://nevkontakte.com/2008/Robomap-Project-taking-stock.html"&gt;три&lt;/a&gt;. Следующим шагом стало создание нескольких экспериментальных сателлитов, для которых понадобилось найти шаблоны. И я их &lt;a href="https://nevkontakte.com/2008/Free-patterns-for-satellites.html"&gt;нашел&lt;/a&gt;. Этот пост уверенно держит второе место по читаемости и, пожалуй, будь он опубликован раньше, стоял бы и на первом.&lt;/p&gt;
&lt;p&gt;Жестокое обострение лени заставило меня искать от нее &lt;a href="https://nevkontakte.com/2008/To-work-effectively.html"&gt;лекарство&lt;/a&gt;, рецепт приготовления я вскоре после пробы на деле изложил для всех желающих. Надо сказать, что помогает до сих пор :)&lt;/p&gt;
&lt;p&gt;Потом я снова отвлекся от СЕО в пользу родного программирования, что привело к созданию сразу нескольких полезных продуктов, которые с тех пор активно используются мною. Это были инструмент для &lt;a href="https://nevkontakte.com/2008/Dokumentacija-is-simple-PHP-Doc-Writer.html"&gt;документирования PHP кода&lt;/a&gt;, &lt;a href="https://nevkontakte.com/2008/Rapid-Template-fast-and-easy-template-engine.html"&gt;шаблонизатор&lt;/a&gt; и &lt;a href="https://nevkontakte.com/2008/Replacement-for-the-standard-JavaScript-dialogs.html"&gt;красивые диалоги на JavaScript&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Очень в пору пришлось &lt;a href="https://nevkontakte.com/2008/Zebrum-CMS-went-on-sale.html"&gt;появление Zebrum CMS&lt;/a&gt;, поскольку я вновь занялся сателлитами. Чтобы облегчить себе жизнь, я написал конвертатор &amp;ldquo;&lt;a href="https://nevkontakte.com/2008/Anything-2-Zebrum-convert-it.html"&gt;чегоугодноВзебру&lt;/a&gt;&amp;rdquo; :) Однако, контент, прежде чем конвертировать, надо откуда-нибудь брать, вот я и &lt;a href="https://nevkontakte.com/2008/Thoughts-about-unique-content.html"&gt;задумался&lt;/a&gt; о его потенциальных источниках. Чуть позже я даже &lt;a href="https://nevkontakte.com/2008/Thoughts-about-unique-content-Practical-implementation.html"&gt;написал парсер&lt;/a&gt; под это дело, но он оказался не слишком работчим. А жаль.&lt;/p&gt;
&lt;p&gt;Перед новым годом я наконец &lt;a href="https://nevkontakte.com/2008/A-blog-update-2.html"&gt;обновил движок блога&lt;/a&gt;, переведя заодно его на ветку 6.х. Так же к новому году я начал продажу &lt;a href="https://nevkontakte.com/2008/RegSubmitter-went-on-sale.html"&gt;RegSubmitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Уже после праздников я решил собрать во едино все мои мысли по поводу противостояния спамерам и более-менее связно &lt;a href="https://nevkontakte.com/2009/The-concept-of-humane-protection-against-bots.html"&gt;изложить их&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Пусть за прошедший год блог и не приобрел сумашедшей популярности, но число читателей постепенно растет и это не может не радовать мою графиманскую душу :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>День рождения блога.</title>
      <link>https://nevkontakte.com/2009/Birthday-blog.html</link>
      <pubDate>Fri, 30 Jan 2009 12:14:13 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Birthday-blog.html</guid>
      <description>&lt;p&gt;Ровно год назад был опубликован первый пост на этом блоге. Тогда я еще довольно слабо представлял, что из этого выйдет, но был полон энтузиазма и желания писать :)&lt;/p&gt;
&lt;p&gt;К сожалению, на полный отчет сейчас времени нет - буквально через пол часа надо будет выходить из дома, чтобы успеть на поезд. Так что пишу этот пост буквально &amp;ldquo;сидя на чемоданах&amp;rdquo;. Но отчет обязательно будет, как только вернусь через четыре дня :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Заработок на файлах</title>
      <link>https://nevkontakte.com/2009/Earnings-files.html</link>
      <pubDate>Wed, 28 Jan 2009 16:31:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Earnings-files.html</guid>
      <description>&lt;p&gt;Еще в прошлом году я в качестве эксперемента зарегистрировался на &lt;a href="http://smsfiles.ru/p/18011.html"&gt;SMSFiles.ru&lt;/a&gt;, залив туда пару файлов, и &lt;a href="https://nevkontakte.com/2008/Crossover-Office-Pro-Game-free.html"&gt;опубликовав&lt;/a&gt; ссылки на блоге. И был немало удивлен, когда даже столь скромные усилия стали мне приносить ежемесячно небольшую сумму.&lt;/p&gt;
&lt;p&gt;А теперь вот мне пришло от SMSFiles письмо с уведомлении о запуске нового сервиса:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Рады представить вам новый файлхостинг для мобильных устройств &lt;a href="http://sharewap.ru/p/59.html"&gt;ShareWAP.ru&lt;/a&gt;. Описание данного сервиса по пунктам:&lt;/em&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;em&gt;Вы можете загружать свои файлы как с телефона, коммуникатора, так и с компьютера.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Cкачать же можно будет лишь с какого либо мобильного устройства. Скачивание абсолютно бесплатное.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;За тысячу скачиваний, уникальных в течении 24 часов, мы платим 500 WMR.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Выплаты будут производиться два раза в месяц, 1 и 15 числа. Минимальной суммы для выплат нет.&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Имеется партнерская программа - получайте дополнительно 20% от дохода привлеченных вами участников.&lt;/em&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;em&gt;Ждем вас!&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;В общем, надо будет попробовать.&lt;/p&gt;
&lt;p&gt;PS. А вот и еще один блоггер принял участие в конкурсе &lt;a href="http://www.readmymind.ru/blog/linkomauliya/"&gt;линкомаулия&lt;/a&gt;. Пожелаем и ему удачи :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Почему чтение исходных кодов страниц полезно для здоровья.</title>
      <link>https://nevkontakte.com/2009/Why-read-the-source-code-of-the-page-is-useful-for-health.html</link>
      <pubDate>Sun, 25 Jan 2009 11:35:18 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Why-read-the-source-code-of-the-page-is-useful-for-health.html</guid>
      <description>&lt;p&gt;Как минимум три четветри русскоговорящих вебмастеров ходили читать комментарии в коде на домашней страничке &lt;a href="http://tema.ru/"&gt;господина Лебедева&lt;/a&gt;. Отжиги там попадаются еще те, кто не читал - продлите себе жизнь, почитайте.&lt;/p&gt;
&lt;p&gt;Вот только если вы думаете, что отжигать в комментах умеет только Тёма, то вы заблуждаетесь. Один из таких сайтов - www.ru, некогда популярный у системных администраторов в качестве аргумента для команды ping :) Давайте глянем, что скрывается за кулисами гордого названия &lt;strong&gt;Russia on the Net&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Первым делом бросается в взгляда качество HTML кода. Тут тебе параметры тегов и в одинарных кавычках, и в двойных, и вовсе без них. Скажу по секрету, на этом сайте очень удобно отлаживать всяких пауков, поскольку здесь им предоставляется возможность распознавать самые разные ссылки и прочие теги. В прочем это скорее грустно, чем смешно, поэтому не будем здесь задерживаться.&lt;/p&gt;
&lt;p&gt;Проматывая код, мы заметим, что все куски старательно прокомментированы. Все-таки как минимум один аккуратный программист у них есть.&lt;/p&gt;
&lt;p&gt;Трам-пам-пам, приближаемся к концу страницы и&amp;hellip;&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;!-- Text Bottom Advert --
&amp;lt;table&amp;gt;&amp;lt;tr&amp;gt;
&amp;lt;td ALIGN=&amp;#34;center&amp;#34; class=&amp;#34;links&amp;#34;&amp;gt;&amp;lt;b&amp;gt;Paid Ads:&amp;lt;/b&amp;gt;
 &amp;lt;A href=http://www.order-pills-online.org&amp;gt;Order Pills&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.order-pills-online.us&amp;gt;Weight loss&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.purchase-pills-online.org&amp;gt;Purchase Pills&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.purchase-pills-online.us&amp;gt;Muscle Relaxants&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.buy-cheap-pills.info&amp;gt;Super Pills&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.cheap-pills-online.us&amp;gt;Cheap Pills&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.cheap-pills-online.org&amp;gt;Pills Online&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.buy-cheap-pills.com&amp;gt;Buy Pills&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.order-cheap-pills.biz&amp;gt;Pills Info&amp;lt;/A&amp;gt;
 &amp;lt;A href=http://www.cheap-pills-online.info&amp;gt;CyberPills&amp;lt;/A&amp;gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&amp;lt;/table&amp;gt;
-- Text Bottom Advert --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Как вам? &amp;ldquo;Россия в Сети&amp;rdquo; предлагает таблетки всем желающим :) После этого все, что о нас думает заграница, не кажется слишком удивительным.&lt;/p&gt;
&lt;p&gt;А на пару строчек ниже:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;!-- уши начало --&amp;gt;
&amp;lt;!-- ухо 1 начало --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;А вы думали, что только у стен есть уши?&lt;/p&gt;
&lt;p&gt;Гуляем дальше&amp;hellip; Заходим в категорию &amp;ldquo;&lt;a href="http://www.ru/eng/index.1.html?topic=2"&gt;Business&lt;/a&gt;&amp;rdquo; и видим забавный кусочек php кода:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;!-- passthru (&amp;#34;/www/httpd/clients/www_ru/cgi-bin/r.scr $topic&amp;#34;); --
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;К сожалению, этот скрипт уже удален с сервера, а то, возможно, узнали бы что-нибудь интересное.&lt;/p&gt;
&lt;p&gt;Теперь чего-нибудь &lt;a href="http://www.ru/eng/index.search.html?s2f=fuck&amp;amp;slang=1"&gt;поищем&lt;/a&gt;&amp;hellip; И найдем 8)&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;lt;!--zzzbegin www_ru.ms.mem_select(&amp;#39; fuck&amp;#39;,1,21,-1,-1,-1,0); end;--&amp;gt;
&amp;lt;!-- select id,uptopic_id,decode(lang,1,a.uptopic_name_eng,a.uptopic_name_rus),topic_id,decode(lang,1,a.topic_name_eng,a.topic_name_rus),name,note from www_ru.site a, www_ru.ctx_page d where id = www_ru.ms.get_id(d.n) and d.n &amp;lt;= www_ru.ms.get_num --&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;В общем, зрите в исходник и продлевайте себе жизнь здоровым смехом. И, главное не делайте таких же ляпов :)&lt;/p&gt;
&lt;p&gt;PS. Пузат участвует в конкурсе &lt;a href="http://puzat.ru/linkomauliya"&gt;линкомаулия&lt;/a&gt;. Что ж, желаю ему удачи ;)&lt;/p&gt;
&lt;p&gt;PPS. А &lt;a href="http://atrlebedev.ru/"&gt;сайт Артемия&lt;/a&gt; закрылся на реконструкцию. Неужели Артемий решил сделать себе нормальный сайт с нормальным дизайном?&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen31.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen31.jpg" alt="screen31.jpg"&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>ICQ выпала. Опять.</title>
      <link>https://nevkontakte.com/2009/ICQ-fell-Again.html</link>
      <pubDate>Thu, 22 Jan 2009 18:42:07 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/ICQ-fell-Again.html</guid>
      <description>&lt;p&gt;Нет, все-таки в AOL сидят законченные сволочи. Мало того, что они опять что-то нахимичили с серверами, что все альтернативные клиенты перестали пахать, так еще и это нововведение касается только России и близлежащих.&lt;/p&gt;
&lt;p&gt;Наглядное доказательство тому - через забугорный прокси или tor все отлично коннектится. А напрямую - &amp;ldquo;хрен вам, качайте официальный клиент ICQ6 и смотрите нашу рекламу&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Эй, вы, господа, которые в ALO&amp;rsquo;е сидят! Вы совсем охренели? Вы сделали аську под Linux? Нет? А какого черта все линуксовые клиенты перестали коннектиться?! Я знаю, вы никогда этих строк не прочтете, но мне пох. Точно так же, как вам на всех пользователей линукса.Гудбай, америка онлайн, добро пожаловать, Жаббер. Вы меня достали, поэтому вот моя новая цель на этот год: перенести 90% общения на жаббер. Все важные контакты - в первую очередь, ибо если очередной ваш финт сорвет мне дела, хуже будет не вам, а мне. Нахер такие риски. В гробу я вас видал.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;С уважением, антисоциальный программер.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;PS. Большинство виндовых клиентов уже обновились. А всем, кто пользуется никсовыми, необновленными клиентами солюшн: поставьте и запустите tor, в настройках клиента выберите SOCKS5 прокси, хост 127.0.0.1 и порт 9050. Работать будет медленно, но хоть как-то.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Две темы на заметку.</title>
      <link>https://nevkontakte.com/2009/Two-themes-in-mind.html</link>
      <pubDate>Tue, 20 Jan 2009 14:22:09 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Two-themes-in-mind.html</guid>
      <description>&lt;p&gt;Последние дни были крайне урожайными в плане информации к размышлению.&lt;/p&gt;
&lt;p&gt;Первая занимательная &lt;a href="http://forum.searchengines.ru/showthread.php?p=4212120#post4212120"&gt;тема&lt;/a&gt; была на серче, и речь шла о том, как Яндекс учитывает ссылки. Хоть гуру и не сумели прити к конченсусу, много занимательных фактов было озвучено. Там, кстати, &lt;a href="http://forum.searchengines.ru/showpost.php?p=4212120&amp;amp;postcount=26"&gt;была произнесена&lt;/a&gt; одна интересная фраза: «&lt;em&gt;Кстати, размещение в каталогах убивает траст напрочь. Повысить его можно купив сcылки на жирных донорах, чтобы плохие каталожные ссылки пропали из наиболее вероятностного разброса и перестали учитываться&lt;/em&gt;». В общем, рекомендуется к прочтению.&lt;/p&gt;
&lt;p&gt;Вторая тема касается Гугля и обсуждается на &lt;a href="http://forum.searchengines.ru/showthread.php?t=307362"&gt;серче&lt;/a&gt; и &lt;a href="http://www.umaxforum.com/showthread.php?t=31694"&gt;умаксе&lt;/a&gt;. Суть заключается в том, что любой поддомен вида hyves.* имеет PR 7, 4 или 0, в зависимости от того, не наложены ли на сайт, под фильтром ли он или забанен. Про это, кстати, я прочитал у &lt;a href="http://100baksov.blogspot.com/2009/01/hyves.html"&gt;Будущего Миллионера&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Хороший пост по мотивам топика про Яндекс и ссылки написал &lt;a href="http://brukva.ru/2009/01/17/imeet-li-ssylka-otricatelnyj-ves/"&gt;Семен Бруква&lt;/a&gt;. Всем рекомендую к прочтению.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD2&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Дискуссия продолжается, и Семен написал еще один пост. &lt;a href="http://brukva.ru/2009/01/23/imeet-li-ssylka-otricatelnyj-ves-2/"&gt;Читаем&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>3 причины выучить PHP.</title>
      <link>https://nevkontakte.com/2009/3-reasons-to-learn-PHP.html</link>
      <pubDate>Mon, 19 Jan 2009 12:02:48 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/3-reasons-to-learn-PHP.html</guid>
      <description>&lt;p&gt;Если вы читаете мой блог, то у вас наверняка есть сайт, и даже не один. И если вы до сих пор не знаете PHP, то вот вам три причины, почему его стоит выучить:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Экономия финансов.&lt;/strong&gt; Во время создания любого серьезного сайта всегда приходится дорабатывать какие-то части движка &amp;ldquo;под себя&amp;rdquo;. Даже если вы выбрали очень удачный движок, лезть в код вам все равно придется ради каких-нибудь мелких косметических правок.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Пример&lt;/em&gt;: блок последних комментариев в Drupal в исходном виде крайне неинформативен - он не выводит ни названия поста, к которому относится комментарий, ни его автора. Если вы не знаете PHP, вам пришлось бы заплатить фрилансеру за приведение его в нормальный вид, скажем, $3, но если вы знаете язык, то вы сделаете это сами за пять минут и совершенно бесплатно.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Экономия времени&lt;/strong&gt;. Владея любым языком программирования вы сможете автоматизировать многие нудные задачи, которые вам пришлось бы выполнять вручную.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Пример&lt;/em&gt;: Сейчас я делаю сайт, посвященный моей любимой группе &lt;a href="http://www.painworldwide.com/home/"&gt;Pain&lt;/a&gt;. Вполне закономерно, что я решил разместить на нем и тексты песен. При этом во мне разыгралась корысть, и чтобы увеличить количество продажных страниц, я решил каждую песню разместить на отдельной странице. В сумме это составляет 64 страницы. Если бы я создавал их вручную, то на каждую страницу с учетом прописывания мета-тегов и прочей пакости у меня уходило бы примерно 3 минуты. Итого - 3 часа 12 минут нудной и утомительной работы. Вместо этого, я за двадцать минут написал скрипт, который перегоняет простой список песен с текстами в формат, пригодный для импорта в &lt;a href="https://nevkontakte.com/2008/Zebrum-CMS-went-on-sale.html"&gt;Zebrum&lt;/a&gt;, одновременно прописывая все нужные параметры, и за 10 минут добавил все нужные страницы на сайт. Экономия в 6 раз, не говоря уже о потраченных нервах и косяках, которые непременно возникли бы при ручной работе.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Независимость&lt;/strong&gt;. Вы не будете зависеть от прихотей и личных проблем фрилансера, которому вы поручили ту или иную работу. Вас никто, кроме вашей собственной лени, не сможет вас &amp;ldquo;кинуть&amp;rdquo;. Вы всегда будете контролировать состояние дел.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Пример&lt;/em&gt;: общаясь со многими своими заказчиками я нередко слышал высказывания в духе &amp;ldquo;предыдущему программисту стало некогда&amp;rdquo;, &amp;ldquo;предыдущий программист исчез/женился/ушел в запой/ушел в монастырь&amp;rdquo;, &amp;ldquo;кучу нервов потратил&amp;rdquo;, &amp;ldquo;сайт завис недоделанный&amp;rdquo; и т.д. Хотите попасть в такую ситуацию?&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Еще пример&lt;/em&gt;: человек обращается с проблемой &amp;ldquo;вылазит странная ошибка &lt;em&gt;warning: &amp;hellip; Permission denied &amp;hellip;&lt;/em&gt;&amp;rdquo;. А вся проблема лишь в том, что хостер перенастроил сервер и необходимые права доступа к файлам изменились. Человек, мало-мальски знающий PHP, с первого взгляда поймет, в чем дело и исправит. А незнающий пойдет на форум поддержки, будет ждать ответа, а сайт будет простаивать. &lt;em&gt;Оно вам надо?&lt;/em&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Почему именно PHP? Первая причина - ваш сайт скорее всего написан именно на этом языке. Вам будет проще его дорабатывать. Впрочем, если вы принципиально делаете сайты на Питоне - вам лучше знать Питон. Вторая причина - этот язык легкий, и вы без проблем его освоите, его знают очень много людей и смогут вам помочь. Тот же Перл хоть и популярен, но хопаться в чужих программах на этом языке - то еще удовольствие. Гибкость этого языка порождает массу стилей написания кода и это часто приводит к путанице.&lt;/p&gt;
&lt;p&gt;Надеюсь, что я смог убедить вас выучить этот язык и сэкономить кучу времени, денег и нервов (-:&lt;/p&gt;</description>
    </item>
    <item>
      <title>"Спалили" тему с фальшивыми пузомерками.</title>
      <link>https://nevkontakte.com/2009/Burned-theme-with-fake-puzomerka.html</link>
      <pubDate>Sat, 10 Jan 2009 12:51:10 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/Burned-theme-with-fake-puzomerka.html</guid>
      <description>&lt;p&gt;Московский Полубомж тут недавно как бы &lt;a href="http://mpbseo.ru/?p=367"&gt;спалил тему&lt;/a&gt; про тИЦ. Еще где-то похожая &lt;a href="http://devaka.ru/articles/fake-pagerank-howto"&gt;всплыла&lt;/a&gt; про PR. И тут же понеслась вонь &amp;ldquo;&lt;a href="http://gtfo.ru/2009/01/09/za-butylochkoj-budvajzera/"&gt;нафиг палить чужие темы&lt;/a&gt;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Так вот господа. Оказывается из-за собственной лени почти пол года владел офигенной темой и не заработал ни копейки. Обосную свои слова. Задумываться о такой возможности я начал еще летом, когда в подробностях изучал склейку. Я даже немного &lt;a href="http://www.masterwebs.ru/index.php?showtopic=880"&gt;поспрашивал&lt;/a&gt; на одном форуме у более знающих товарищей. Естественно, я слегка завуалировал вопрос, чтобы не получить тухлым помидором в морду и обвинение в желании обмануть всех и вся. Спрашивал специально не на серче, а на форуме поменьше, чтобы сократить число людей, обративших внимание на топик. Удовлетворившись ответами, я даже написал небольшой скрипт, который бы помогал мне приклеиваться к чужим сайтам. Его у меня хватило ума не публиковать. А после этого я отвлекся на новые идеи и возиться с этой темой мне стало лень.&lt;/p&gt;
&lt;p&gt;Вот так и вышло, что исключительно благодаря своей лени я за пол года обладания &amp;ldquo;мега-темой&amp;rdquo; не получил с нее ни копейки. Стыд и позор.&lt;/p&gt;
&lt;p&gt;PS. Не я один &lt;a href="http://7bloggers.ru/vkontakte/"&gt;не в контакте&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Концепция человечной защиты от ботов.</title>
      <link>https://nevkontakte.com/2009/The-concept-of-humane-protection-against-bots.html</link>
      <pubDate>Wed, 07 Jan 2009 22:40:24 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/The-concept-of-humane-protection-against-bots.html</guid>
      <description>&lt;p&gt;Мое активное присутствие в интернете можно отсчитывать с 6 апреля 2005, когда я впервые установил phpBB 2.0.13 на свой компьютер с целью &amp;ldquo;поиграться&amp;rdquo;. И с тех пор этот движок занимает достаточно важную часть моей жизни. Соответственно, занимаясь форумами, мне приходилось сталкиваться с разными видами спама и защиты от него. Среди последних были и эффективные, и не очень. Ниже я постараюсь изложить метод защиты от спама, который  должен сбивать с толку ботов и без проблем проходиться человеком.&lt;/p&gt;
&lt;h4 id="базовая-идея"&gt;Базовая идея.&lt;/h4&gt;
&lt;p&gt;Боты пользуются большим распространением небольшого количества известных движков. Научился работать с одним из них - получил возможность спамить по десяткам тысяч ресурсов. С другой стороны, каким бы навороченным не был пятый хрумер - даже двадцать пятый не сможет оценивать смысловую составляющую  формы регистрации/постинга, как это делает человек.&lt;/p&gt;
&lt;p&gt;Соответственно, наша задача - сделать форму &lt;em&gt;непонятной&lt;/em&gt; для бота.&lt;/p&gt;
&lt;h4 id="техническая-сторона"&gt;Техническая сторона.&lt;/h4&gt;
&lt;p&gt;Бот имеет возможность вычленять по определенным сигнатурам те или иные части страницы и анализировать их, определяя назначения полей или типы защиты. Чаще всего он ориентируется на имена полей, реже - на их порядок, совсем редко - на располагающиеся рядом подписи.&lt;/p&gt;
&lt;p&gt;Таким образом, чтобы отсеять абсолютное большинство ботов, мы должны разрушить хотя бы два первых ориентира.&lt;/p&gt;
&lt;p&gt;Для первого вариант прост: имена полей формы должны быть уникальны для каждого экземпляра движка. Это можно достигнуть путем привязки к домену, а так же использование некоторого случайного числа, которое будет генерироваться при установке. Затем можно проделывать какое угодно количество хеширований (формулу хеширования тоже, кстати, можно сделать динамической) и пропускать имена всех полей через оные процедуры.&lt;/p&gt;
&lt;p&gt;Со вторым вариантом, чтобы не осложнять жизнь людям, чуть сложнее, но лишь чуть. Выходом будет случайное разбрасывание по всей форме дополнительных полей-призраков со своими уникальными именами, скрытых при помощи JS или CSS от глаз людей. Чем больше такого мусора - тем больше шанс запутать бота. Заполнение хотя бы одного из таких полей будет сигналом для срабатывания защиты.&lt;/p&gt;
&lt;p&gt;Как вариант, этим полям можно по умолчанию давать какие-то значения и сверять их при обработке формы.&lt;/p&gt;
&lt;p&gt;На последний пункт сложнее всего влиять, поскольку подписи к формам необходимы в первую очередь людям, но и тут есть выход. К полям-призракам можно добавлять подписи, дублирующие подписи нормальных полей. Тогда боту придется угадывать правильное поле и чем больше полей-призраков, тем меньше у него шансов.&lt;/p&gt;
&lt;h4 id="больше-крови"&gt;Больше крови!&lt;/h4&gt;
&lt;p&gt;Чтобы окончательно посадить спамеров на бобы, можно генерировать уникальные имена полей и расположение полей-призраков для каждой сессии.&lt;/p&gt;
&lt;h4 id="человеческая-сторона"&gt;Человеческая сторона.&lt;/h4&gt;
&lt;p&gt;Замечательность такого подхода, на мой взгляд, состоит в том, что человек даже не заметит присутствия антиспама, если его, конечно, не понесет читать исходный код страницы.&lt;/p&gt;
&lt;h4 id="реализация"&gt;Реализация.&lt;/h4&gt;
&lt;p&gt;Подход, связанный с переименованием полей используется в моде для phpBB2 &lt;a href="http://www.phpbbguru.net/community/topic18557.html"&gt;Stop Advertisement Bots v.3&lt;/a&gt;, написанном &lt;strong&gt;Xpert&lt;/strong&gt;&amp;lsquo;ом. Этот мод отлично защищал от спама конференцию на phpBBGuru.net до ее перехода на phpBB3 и защищает многие другие вплоть до сего момента.&lt;/p&gt;
&lt;p&gt;А вот полей-призраков я еще нигде не встречал. Возможно, прохлопал ушами, но до сих пор я нигде ничего похожего не видел.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Чем живет лиру?</title>
      <link>https://nevkontakte.com/2009/What-lives-lyre.html</link>
      <pubDate>Tue, 06 Jan 2009 14:09:44 +0000</pubDate>
      <guid>https://nevkontakte.com/2009/What-lives-lyre.html</guid>
      <description>&lt;p&gt;Идея назревала довольно давно. Ведь если вдуматься, подавляющее большинство блоггеров не слышали ни о блогуне, ни о монетизации как таковой, и пишут-то они в основном личные заметки. За счет чего же они становятся популярны и читаемы? Жутко любопытно.&lt;/p&gt;
&lt;p&gt;Посему в качестве эксперимента я решил заняться быдлоблоггингом. Без монетизации, уникального контента и авторских статей. Для этих целей я завел &lt;a href="http://www.liveinternet.ru/users/3013352/"&gt;быдлоблог&lt;/a&gt; на &lt;a href="http://li.ru/"&gt;быдлосервисе&lt;/a&gt; и написал первый &lt;a href="http://www.liveinternet.ru/users/3013352/post93346587/"&gt;быдлопост&lt;/a&gt;. Поначалу хотел делать быдлоблог на ЖЖ, но быстро передумал, вспомнив, насколько у них все убого и неудобно. Я же не полное быдло, так ведь? ;) Что из этого выйдет - фиг знает. Но есть шанс, что я еще как следует повеселюсь, наблюдая развитие процесса.&lt;/p&gt;
&lt;p&gt;Планы:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Взять несколько уроков &lt;a href="http://www.liveinternet.ru/users/respect_with_me/profile/"&gt;дизайна&lt;/a&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;p&gt;PS. Не принимайте слишком всерьез ;)&lt;/p&gt;
&lt;p&gt;PPS. И не парьтесь вы с финансовым кризисом. Просто вспомните, где мы были 10 лет назад и работайте, чтобы снова там не оказаться. Тогда все образуется.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Не прошло и получаса, как пригласили в какое-то быдлосообщество. Круто. Я знаменит!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Год кончился... Да здравствует новый год! (Итоги 2008 года).</title>
      <link>https://nevkontakte.com/2008/Year-ended-long-live-the-new-year-2008.html</link>
      <pubDate>Wed, 31 Dec 2008 17:23:02 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Year-ended-long-live-the-new-year-2008.html</guid>
      <description>&lt;p&gt;До конца года осталось 7 часов, пришло время подводить итоги.&lt;/p&gt;
&lt;p&gt;Вспомнить есть что, как в реальной жизни, так и в виртуальной. Год назад я был совсем другим человеком.&lt;/p&gt;
&lt;p&gt;И так, за этот год я успел:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Успешно закончить школу (Привет, ФМШ! Ты - самая счастливая эпоха в моей жизни! Кто знает, тот поймет).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Успешно поступить в университет, и даже на тот факультет, на который хотел. Эти два достижения, пожалуй, самые важные.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/2008/AP-Yasha-Guitar-and-useful-links.html"&gt;Приобрести чудесную гитару&lt;/a&gt; B. C. Rich Masterpiece. Пожалуй, самое удачное вложение денег за этот год, если измерять по количеству приятных часов. Позавчера, кстати, в качестве подарка самому себе купил новую педальку к ней.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Очередной раз съездить в &lt;a href="https://web.archive.org/web/20190129112755/http://school.iis.nsk.su/syp08"&gt;ЛШЮП&lt;/a&gt;, теперь уже в качестве подмастерья. Незабываемый опыт, хорошие друзья и масса позитива.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Создать этот блог.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Придумать и реализовать несколько проектов. В частности, &lt;a href="https://web.archive.org/web/20090301094823/http://scb.net.ru/"&gt;Google Cache Browser&lt;/a&gt;, &lt;a href="https://web.archive.org/web/20090302082843/http://a2z.oint.ru/"&gt;Anything 2 Zebrum&lt;/a&gt;, &lt;a href="https://web.archive.org/web/20120101043121/http://regsubmitter.ru/index.html"&gt;RegSubmitter&lt;/a&gt;, &lt;a href="https://nevkontakte.com/2008/Your-parser-dictionaries-Yandex.html"&gt;Йа.Словарь&lt;/a&gt; и еще вагон с тележкой более мелких идей.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Провести эксперимент по тому, какие ссылки индексируют разные поисковики (&lt;a href="https://nevkontakte.com/2008/RoboMap-Project-detailed-study-of-search-engine-indexing.html"&gt;раз&lt;/a&gt;, &lt;a href="https://nevkontakte.com/2008/RoboMap-Project-first-results.html"&gt;два&lt;/a&gt;, &lt;a href="https://nevkontakte.com/2008/RoboMap-Project-statistics-for-3-days.html"&gt;три&lt;/a&gt;, &lt;a href="https://nevkontakte.com/2008/Robomap-Project-taking-stock.html"&gt;четыре&lt;/a&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;????????&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;PROFIT!!!&lt;/p&gt;
&lt;p&gt;Большую часть заработка в этом году мне принес фриланс, но это и не удивительно - ничем другим я всерьез и не занимался.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;И многое, многое другое.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Что я хочу успеть в следующем году? Многое:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Успешно сдать две сессии и быть готовым к третьей.&lt;/li&gt;
&lt;li&gt;Собрать свою группу и выйти на сцену. &lt;del&gt;Будет одной дерьмовой группой больше.&lt;/del&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;PROFIT&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В общем, &lt;strong&gt;с Новым Годом&lt;/strong&gt; всех! Успехов, радости и душевного равновесия в следующем году!&lt;/p&gt;</description>
    </item>
    <item>
      <title>RegSubmitter вышел в продажу!</title>
      <link>https://nevkontakte.com/2008/RegSubmitter-went-on-sale.html</link>
      <pubDate>Sat, 27 Dec 2008 18:00:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/RegSubmitter-went-on-sale.html</guid>
      <description>&lt;p&gt;Спустя месяц напряженной работы, он наконец увидел свет!&lt;/p&gt;
&lt;p&gt;Для тех, кто не читал анонса сообщаю: &lt;strong&gt;RegSubmitter&lt;/strong&gt; - это авторегистратор аккаунтов в &lt;strong&gt;13&lt;/strong&gt; сервисах социальных закладок. Программа написана на PHP5 и будет отлично работать практически на любом хостинге с поддержкой curl.&lt;/p&gt;
&lt;p&gt;Для более подробного ознакомления вы можете посетить &lt;a href="https://web.archive.org/web/20120101043121/http://regsubmitter.ru/index.html"&gt;сайт RegSubmitter&lt;/a&gt;, а так же пощупать &lt;a href="https://web.archive.org/web/2008/http://regsubmitter.ru/demo"&gt;демо-версию&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Стоить программа будет $25, но по случаю праздников и начала продаж до 3 января цена будет вдвое меньше - **$12**.&lt;/p&gt;
&lt;p&gt;Так что, пока не поздно - &lt;a href="https://web.archive.org/web/2008/http://regsubmitter.ru/index.php?mode=buy"&gt;налетай&lt;/a&gt; ;)&lt;/p&gt;
&lt;p&gt;PS. Надо же было такому случиться - только я начал готовить к релизу RegSubmitter, как оказалось, что Тормоз &lt;a href="http://brokenbrake.biz/2008/12/24/prodam-pribylnyi-proekt"&gt;собрался продать Закладочник&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;PPS. Нашел сайт, где имеются всякие футболки для тех, кто занимается &lt;a href="http://teescloud.com"&gt;заработком через интернет&lt;/a&gt;. Порадовать себя новой футболкой, что ли? Хотя у меня их и так до фига &lt;a href="http://www.artlebedev.ru/kovodstvo/sections/135/"&gt;))&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Список датацентров Google 24.12.2008</title>
      <link>https://nevkontakte.com/2008/A-list-of-Google-datacenters-24-12-2008.html</link>
      <pubDate>Wed, 24 Dec 2008 16:23:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/A-list-of-Google-datacenters-24-12-2008.html</guid>
      <description>&lt;p&gt;Для собственных нужд скомпоновал список рабочих ДЦ Гугля, возможно коме-то пригодится. Всего в списке 55 ip адреса, возможно есть и еще :)&lt;/p&gt;
&lt;p&gt;Собственно, список:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;209.85.129.104
209.85.135.102
209.85.135.19
209.85.135.99
209.85.143.184
216.239.59.115
216.239.59.147
216.239.59.17
216.239.59.19
216.239.59.99
64.233.161.102
64.233.161.147
64.233.161.184
64.233.161.19
64.233.161.81
64.233.161.84
64.233.161.99
64.233.179.184
64.233.179.19
64.233.179.99
64.233.183.17
64.233.187.91
64.233.189.161
64.233.189.83
66.102.1.104
66.102.1.115
66.102.1.184
66.102.1.44
66.102.1.84
66.102.9.102
66.102.9.104
66.102.9.115
66.102.9.147
66.102.9.99
66.249.89.184
66.249.91.81
66.249.91.84
66.249.93.44
66.249.93.81
66.249.93.91
66.249.93.99
72.14.203.99
72.14.205.100
72.14.205.81
72.14.207.100
72.14.207.81
72.14.207.99
72.14.221.101
72.14.221.184
72.14.221.84
72.14.221.99
72.14.235.102
72.14.235.83
72.14.235.84
72.14.253.104
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Удачи ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>PHP.net уже готов к новому году. А вы?</title>
      <link>https://nevkontakte.com/2008/PHP-net-ready-for-the-new-year-And-you.html</link>
      <pubDate>Tue, 23 Dec 2008 20:01:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/PHP-net-ready-for-the-new-year-And-you.html</guid>
      <description>&lt;p&gt;Только что заметил, что у них обновился логотип (тот, что в верхнем левом углу).&lt;/p&gt;
&lt;p&gt;Не я один к новому году решил обновить дизайн.&lt;/p&gt;
&lt;p&gt;А Гугль, кстати, уже давно праздничную картинку повесил :)&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.google.ru/logos/holiday08_3.gif" alt="Google Holiday Doodle"&gt;&lt;/p&gt;
&lt;p&gt;Так что еще раз всех с наступающим.&lt;/p&gt;
&lt;p&gt;PS. Блин, всего-то неделя осталась до нового года&amp;hellip; Даже не верится как-то.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обновление блога - 2</title>
      <link>https://nevkontakte.com/2008/A-blog-update-2.html</link>
      <pubDate>Mon, 22 Dec 2008 14:20:02 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/A-blog-update-2.html</guid>
      <description>&lt;p&gt;Давно планировал как следует заняться блогом, но до сих пор находились причины отложить обновление на завтра. В субботу такие причины кончились - теперь блог работает на Drupal 6 :)&lt;/p&gt;
&lt;p&gt;Кроме того, было сделано множество мелких доработок и, самое главное, слегка изменен уже поднадоевций дизан. За окном суровая и непредсказуемая сибирская зима, так что и раскраска блога стала &amp;ldquo;зимней&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Из наиболее значительных изменений - из формы комментирования исчезла капча, будучи замененной ее скрытой JS версией, а сама форма работает на AJAX (спасибо автору блога &lt;a href="http://drupaldance.com/ajax_comments"&gt;DrupalDance&lt;/a&gt;). Так же была убрана дурацкая надпись &amp;ldquo;не проверенно&amp;rdquo; от ников незарегистрированных комментаторов. Старый невнятный блок последних комментариев тоже стал чуть более приличным, что тоже гуд.&lt;/p&gt;
&lt;p&gt;Всех с наступающим Новым Годом!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мысли по поводу уникального контента. Практическая реализация.</title>
      <link>https://nevkontakte.com/2008/Thoughts-about-unique-content-Practical-implementation.html</link>
      <pubDate>Sun, 14 Dec 2008 16:03:46 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Thoughts-about-unique-content-Practical-implementation.html</guid>
      <description>&lt;p&gt;Некоторое время назад я &lt;a href="https://nevkontakte.com/2008/Thoughts-about-unique-content.html"&gt;изложил&lt;/a&gt; идею о том, как можно получать хороший, уникальный контент в больших количествах. А теперь наконец дошли руки до реализации.&lt;/p&gt;
&lt;p&gt;Google Cache Dumper парсит выдачу гугла по запросу site:example.com и пытается выкачать из кеша гугла все найденные страницы. На вход принимаются домен, количество страниц выдачи, подлежащих парсингу и задержка между запросами. На выходе - папка со кешированными страницами.&lt;/p&gt;
&lt;p&gt;На данный момент существует только одна проблема - через некоторое время гугль палит, что его пытаются доить, и перестает отдавать требуемые страницы. Как с этим бороться я пока не придумал.&lt;/p&gt;
&lt;p&gt;Тем не менее, желающие могут скачать и пользоваться: &lt;a href="https://nevkontakte.com/files/gcache.php.txt"&gt;gcache.php.txt&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Кроме того, в комментариях к тому посту была высказана идея парсить вебархив. В принципе здесь даже проще, чем с гуглом, зато существует проблема найти сайт с достаточно большим количеством сохраненных страниц. Все проверенные мною домены содержали не более 10 страниц, что явно недостаточно. Так что если кто предложет эффективный способ - с меня реализация в виде кода :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UDP&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Появилась идея отправлять запросы разным датацентрам по очереди. Надо будет попробовать.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mozilla Firefox и докачка файлов.</title>
      <link>https://nevkontakte.com/2008/Mozilla-Firefox-and-swap-files.html</link>
      <pubDate>Thu, 11 Dec 2008 19:51:47 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Mozilla-Firefox-and-swap-files.html</guid>
      <description>&lt;p&gt;Ни для кого не секрет, что родной менеджер закачек в Firefox, мягко говоря, слабоват. Однако, иногда нет выбора и приходится пользоваться им, например, если для скачивания файла требуется хитрая авторизация. И порою случаются ситуации, когда, скачав добрую половину файла, закачка прерывается из-за обрыва связи или еще чего-нибудь. Как в таком случае быть? Начинать закачку по новой, тратя кучу времени и трафика?&lt;/p&gt;
&lt;p&gt;Оказывается, выход есть. Единственное требование, чтобы сервер, откуда качаете, поддерживал докачку файлов. И так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Заходим в папку, куда мы хотели сохранить файл.&lt;/li&gt;
&lt;li&gt;Находим в ней файл с именем &lt;em&gt;имя_файла.part&lt;/em&gt; и переименовываем его во что-нибудь. Например, &lt;em&gt;имя_файла.part.bak&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Начинаем закачку заново, с нуля. Достаточно, чтобы скачалась пара десятков килобайт, после чего ставим закачку на паузу.&lt;/li&gt;
&lt;li&gt;Переименовываем файл &lt;em&gt;имя_файла.part.bak&lt;/em&gt;обратно в *имя_файла.part__,*заменяя вновь созданный при повторном старте закачки. (Здесь предполагается, что при второй попытке мы сохранили файл под тем же именем.)&lt;/li&gt;
&lt;li&gt;Возобновляем закачку.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;В результате вышеописанных манипуляций закачка должна продолжиться с того места, где она оборвалась.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Примечание: этот способ так же действует в случае, если старая ссылка для закачки истекла или мы решили качать с другого зеркала. Тогда надо на третьем&lt;/em&gt;шаге &lt;em&gt;начать закачку по новому адресу и все.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;PS. &lt;a href="http://www.prodvinemvmeste.ru/interesno/estafeta-palyu-temu-itogi.htm"&gt;Закончилась&lt;/a&gt; эстафета &amp;ldquo;Палю тему&amp;rdquo;, в которой я &lt;a href="https://nevkontakte.com/2008/Relay-PAL-topic.html"&gt;принимал участие&lt;/a&gt;. Тем было спалено немного, но поводы для размышления есть.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Бета-тестеры RegSubmitter</title>
      <link>https://nevkontakte.com/2008/Beta-testers-RegSubmitter.html</link>
      <pubDate>Tue, 09 Dec 2008 21:31:12 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Beta-testers-RegSubmitter.html</guid>
      <description>&lt;p&gt;Тестерами стали:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://seoinsoul.ru/"&gt;SEOinSoul&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Sabotage&lt;/li&gt;
&lt;li&gt;Sokol_jack&lt;/li&gt;
&lt;li&gt;&lt;a href="http://search-bot.net/"&gt;Voeslav&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кроме того, по-прежнему вакантно одно место, условия участия &lt;a href="https://nevkontakte.com/2008/Trying-to-enter-the-beta-testers-RegSubmitter.html"&gt;те же&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Гугль меня не любит.</title>
      <link>https://nevkontakte.com/2008/Google-does-not-like-me.html</link>
      <pubDate>Tue, 02 Dec 2008 22:34:36 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Google-does-not-like-me.html</guid>
      <description>&lt;p&gt;Я вот, однажды, хочу &lt;a href="http://www.xekcc.com/2008/11/firefox.html"&gt;тут&lt;/a&gt; коммент оставить, а Гугль говорит, что гадить в комменты - сакс. А я, такой, ему: &amp;ldquo;А ты вообще знаешь, что такое гадить в комменты? Ну а раз не знаешь, так вообще молчи, раз умный такой!&amp;rdquo;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen19_a.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen19_a.jpg" alt="screen19_a.jpg"&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Антикапча с примерами</title>
      <link>https://nevkontakte.com/2008/Antikapcha-with-examples.html</link>
      <pubDate>Sun, 30 Nov 2008 13:53:52 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Antikapcha-with-examples.html</guid>
      <description>&lt;p&gt;&lt;em&gt;Предисловие для пришедших и поисковиков: Скорее всего, вы искали &lt;a href="https://web.archive.org/web/20130728054312/http://nevkontakte.org.ru/anticaptcha-invite"&gt;инвайты на антикапчу&lt;/a&gt; или информацию о том, &lt;a href="https://nevkontakte.com/2009/Write-a-simple-car-Part-4-plug-antikapcha.html"&gt;как ею пользоваться&lt;/a&gt;. Указанные две ссылки вам помогут. А эта статься немного о других вещах ;)&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;По ходу работы над &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;&amp;lsquo;ом мне довелось бодаться с самыми разными капчами и теперь хочется изложить наиболее типичные ошибки, которые делают веб-программисты, реализуя антиботовскую защиту. Почему антикапча? Потому, что капча подразумевает усложнение регистрации для ботов и легкость регистрации для людей. В приведенных ниже случаях капча лишь усложняет жизнь людям, но боты обходят ее с легкостью.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Передача секретного кода скрипту генерации картинки в виде части URL.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Почему так нельзя делать:&lt;/strong&gt; проверочный код не должен ни в каком виде передаваться на сторону клиента. Спамеры не дураки и распарсить нужный фрагмент html страницы, чтобы извлечь код - секундное дело.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Пример:&lt;/strong&gt; &lt;a href="http://myelect.ru/Common/Registration.aspx"&gt;MyElect.ru&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Решение:&lt;/strong&gt; передавать проверочный код в качестве переменной сессии.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Передача эталонного кода в виде скрытого поля формы.&lt;/p&gt;
&lt;p&gt;**Почему так нельзя делать: **по сути, это еще более грубый вариант предыдущей ошибки. При таком подходе спамер сможет передавать фальшивый эталонный код, который будет геренироваться не сайтом, а программой-спамером. Естественно, передавая в качестве введенного кода тот же самый код, спамер пройдет проверку.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Пример:&lt;/strong&gt; &lt;a href="http://savelink.org.ua/reg.php"&gt;Savelink.org.ua&lt;/a&gt; (о нем я, кстати, уже &lt;a href="https://nevkontakte.com/2008/Excellent-service-Savelink-org-ua.html"&gt;писал&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Решение:&lt;/strong&gt; как и в прошлом случае, хранить эталонный код на сервере в качестве переменной сессии.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Использование ограниченного набора вопросов/заданий (или, что еще хуже, вообще только одного)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Почему так нельзя делать:&lt;/strong&gt; спамер может заранее заготовить ответы на все вопросы и подставлять всякий раз один из них, в зависимости от вопроса.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Пример:&lt;/strong&gt;&lt;a href="http://www.ru-marks.net/register.php"&gt;Ru-Marks.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Решение:&lt;/strong&gt; генерировать случайное задание.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;И напоследок другая крайность: &lt;a href="https://web.archive.org/web/20180812233142/http://www.ruspace.ru/index.php?link=siteusers&amp;amp;action=registration"&gt;капча&lt;/a&gt; непроходимая как для ботов, так и для людей.&lt;/p&gt;
&lt;p&gt;Фраза &amp;ldquo;13+18=&amp;rdquo; угадывается только после длительного и вдумчивого изучения картинки.&lt;/p&gt;
&lt;p&gt;ОК, с ошибками разобрались, а где взять нормальную капчу? Я пользуюсь &lt;a href="http://captcha.ru/kcaptcha/"&gt;KCaptcha&lt;/a&gt;. Для человека она вполне читабельна, но вместе с тем я ни разу не слышал, чтобы боты ее пробивали.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPD 15.03.09&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Сейвлинк.орг.юа загнулся. Сдох. Перестал существовать. Почему-то меня это не удивляет.&lt;/p&gt;
&lt;p&gt;PS. Естественно, индусы пишут не только разнообразные антикапчи. Они пишут и много другого &lt;a href="http://govnokod.ru/"&gt;говнокода&lt;/a&gt; ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Набираю бета-тестеров RegSubmitter!</title>
      <link>https://nevkontakte.com/2008/Trying-to-enter-the-beta-testers-RegSubmitter.html</link>
      <pubDate>Thu, 27 Nov 2008 22:25:06 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Trying-to-enter-the-beta-testers-RegSubmitter.html</guid>
      <description>&lt;p&gt;Для начала пару слов о том, что собой представляет &lt;a href="http://regsubmitter.ru"&gt;RegSubmitter&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;RegSubmitter&lt;/strong&gt; - это инструмент для полуавтоманической регистрации аккаунтов в сервисах социальных закладок.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;На данный момент поддерживаются 13 сервиов: &lt;a href="http://moemesto.ru/"&gt;Моё место&lt;/a&gt;, &lt;a href="http://zakladok.net/"&gt;Закладок.нет&lt;/a&gt;, &lt;a href="http://memori.ru/"&gt;Memori&lt;/a&gt;, &lt;a href="http://bobrdobr.ru/"&gt;BobrDobr.ru&lt;/a&gt;, &lt;a href="http://savelink.org.ua/"&gt;Savelink.org.ua&lt;/a&gt;, &lt;a href="http://html-city.ru/"&gt;HTML-City.ru&lt;/a&gt;, &lt;a href="http://myelect.ru/"&gt;Мое избранное (MyElect.ru)&lt;/a&gt;, &lt;a href="http://www.mister-wong.ru/"&gt;Mister Wong&lt;/a&gt;, &lt;a href="http://memori.ru/"&gt;Lopas.RU&lt;/a&gt;, &lt;a href="http://ruspace.ru/"&gt;RuSpace&lt;/a&gt;, &lt;a href="http://kli.kz/"&gt;KLI.KZ&lt;/a&gt;, &lt;a href="http://www.ru-marks.net/"&gt;Ru-marks.net&lt;/a&gt;, &lt;a href="http://www.100zakladok.ru/"&gt;Сто Закладок&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Поддерживается регистрация нескольких аккаунтов за раз.&lt;/li&gt;
&lt;li&gt;Процесс регистрации состоит всего из двух шагов: указание данных для регистрации и ввод каптч.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Системные требования скрипта тоже невелики:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;PHP5&lt;/li&gt;
&lt;li&gt;Расширения CURL и mbSrting.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Точная цена скрипта будет определена к концу бета-тестирования, но пока ожидается, что это будет $25.&lt;/p&gt;
&lt;h3 id="а-теперь-вернемся-к-бета-тестерам"&gt;А теперь вернемся к бета-тестерам.&lt;/h3&gt;
&lt;p&gt;Для бета-тестирования требуется 5 человек.&lt;/p&gt;
&lt;p&gt;Что получат бета-тестеры:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Возможность опробовать RegSubmitter первыми&lt;/li&gt;
&lt;li&gt;Возможность повлиять на направление его развития&lt;/li&gt;
&lt;li&gt;Полноценную лицензию RegSubmitter к моменту начала продаж&lt;/li&gt;
&lt;li&gt;На основе сформированной в этот команды тестеров будут формироваться группы тестеров и последующих продуктов на основе RegSubmitter.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Требования к тестерам:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Хотя бы минимальные познания в PHP&lt;/li&gt;
&lt;li&gt;Умение детально описывать возникшие ошибки&lt;/li&gt;
&lt;li&gt;Адекватность&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Желающие принять участие в бета-тестировании неужно отправить анкету с указанными ниже данными на адрес &lt;a href="mailto:beta@regsubmitter.ru"&gt;beta@regsubmitter.ru&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Имя (как к вам обращаться)&lt;/li&gt;
&lt;li&gt;Опыт программирования на PHP&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;
&lt;p&gt;Лицензия для бета-тестеров будет стоить &lt;strong&gt;$10&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Кроме того, имеют место следующие бонусы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Участникам форума searchengines.ru с репутацией более 5000 лицензия будет предоставлена бесплатно. В этом случае заявку на участие в бета-тестировании нужно отправлять &lt;a href="http://forum.searchengines.ru/member.php?u=72664"&gt;мне&lt;/a&gt; через ЛС на серче.&lt;/li&gt;
&lt;li&gt;Авторам хороших блогов по сайтостроению и близкой теманики - так же бесплатно. Чтобы подтвердить, что это действительно ваш блог вы можете написать короткую заметку про RegSubmitter или создать какой-нибудь секретный файл, в котором будет написано, что вы действительно подавали заявку ! ;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Окончательный список тестеров будет опубликован 8 декабря, в понедельник.&lt;/p&gt;
&lt;p&gt;Кроме того, с каждым из тестеров я еще свяжусь лично.&lt;/p&gt;
&lt;p&gt;PS. &lt;a href="https://web.archive.org/web/20081226155859/http://regsubmitter.ru/talk/viewtopic.php?f=2&amp;amp;t=3"&gt;Первоисточник&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Чудесный сервис Savelink.org.ua</title>
      <link>https://nevkontakte.com/2008/Excellent-service-Savelink-org-ua.html</link>
      <pubDate>Mon, 17 Nov 2008 19:40:28 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Excellent-service-Savelink-org-ua.html</guid>
      <description>&lt;p&gt;Честно говоря, я не планировал написать этот пост гораздо позже, но по ходу написания одной софтинки, о которой я скажу в конце поста, мне посчастливилось столкнуться с этим замечательным сервисом.&lt;/p&gt;
&lt;p&gt;Чем он меня так впечатлил? О, такое впечатление, что делали его не просто школьники, а еще и лентяи. Совершенно непереносимый дизайн и невалидный - раз. Господа поленились прикрутить ЧПУ - два.&lt;/p&gt;
&lt;p&gt;Капча. О, она заслуживает пары отдельных слов. Во-первых, даже простенькие боты распознают ее не задумываясь. А во-вторых, ее даже распознавать не надо, ибо достаточно только глянуть в код и увидеть, что ссылка на картинку имеет такой вид: &lt;a href="http://savelink.org.ua/pic.php?text=51672"&gt;http://savelink.org.ua/pic.php?text=51672&lt;/a&gt;, на картинке написано &lt;img src="http://savelink.org.ua/pic.php?text=51672" alt="51672"&gt; (я, кстати, пока баловался с ней получил один раз ровно, а 76543, без подтасовок) и рядышком в коде присутствует это:  &lt;code&gt;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;x&amp;quot; value=51672&amp;gt;&lt;/code&gt;. Так что капча - это сразу и три, и четыре и пять.&lt;/p&gt;
&lt;p&gt;В общем, рекомендую всем внимательно изучить этот сайт и &lt;strong&gt;никогда&lt;/strong&gt;&lt;em&gt;так&lt;/em&gt;&lt;strong&gt;не делать&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Пока писал пост этот сервис успел дважды упасть и один раз подняться :)&lt;/p&gt;
&lt;h3 id="ну-а-теперь-о-томчто-за-софт-я-сейчас-пишу"&gt;Ну а теперь о том, что за софт я сейчас пишу&lt;/h3&gt;
&lt;p&gt;А пишу я скрипт &lt;strong&gt;RegSubmitter&lt;/strong&gt; - полуавтомат для регистрации аккаунтов на соцзакадках. ИМХО, это будет неплохим дополнением к известному &lt;a href="http://ru.bmsubmitter.com/za/"&gt;Закладочнику&lt;/a&gt; от Вдохновенного Тормоза. На данный момент скрипт уже успешно работает с восемью сервисами и в ближайшие дни я допишу еще некоторое количество модулей. Когда большая часть модулей будет готова мне понадобятся бета-тестеры, но об этом в другой раз :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Мысли по поводу уникального контента.</title>
      <link>https://nevkontakte.com/2008/Thoughts-about-unique-content.html</link>
      <pubDate>Mon, 17 Nov 2008 16:08:05 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Thoughts-about-unique-content.html</guid>
      <description>&lt;p&gt;Щас вот ехал в маршрутке и думал. Не для кого не секрет, что нередко в кеше гугля хранятся страницы уже мертвых сайтов, у которых кончился хостинг или домен или просто снесли. У некоторых даже по нескольку сотен страниц кешированных бывает. Да вот что будет, если я аккуратненько напарсю оттуда контент, дам ему отлежаться пар месяцев, пока их кеша не удалится, а потом сам где-нибудь заюзаю. При условии, что контент изначально не был копипастом, я получу неплохое количество уника.&lt;/p&gt;
&lt;p&gt;Кто-нибудь пробовал такой трюк?&lt;/p&gt;
&lt;p&gt;PS. Судя по статистике, ко мне заходит довольно много земляков. Интересно, кто это?&lt;/p&gt;
&lt;p&gt;PPS. Я, кстати, заметил, что в Новосибирске вообще довольно много блоггеров.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Акция "Увеличиваем ссылочную массу бесплатно"</title>
      <link>https://nevkontakte.com/2008/Action-Increasing-reference-weight-for-free.html</link>
      <pubDate>Wed, 12 Nov 2008 21:55:42 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Action-Increasing-reference-weight-for-free.html</guid>
      <description>&lt;p&gt;&lt;a href="http://brukva.ru"&gt;Семен Бруква&lt;/a&gt; проводит отличную &lt;a href="http://brukva.ru/2008/10/29/akciya-uvelichivaem-ssylochnuyu-massu-besplatno/"&gt;акцию&lt;/a&gt; - бесплатный прогон по каталогам по вручную собранной базе. Чем хороша эта база? Вот что о ней говорит сам Семен:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;База SEOb Lite имеет следующие параметры&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Каталогов в базе: 3064&lt;/li&gt;
&lt;li&gt;Каталогов, проиндексированных и Яндексом и Google: 1329 (при этом все остальные есть в индексе одного из поисковиков)&lt;/li&gt;
&lt;li&gt;Средний ТИЦ по базе: 90&lt;/li&gt;
&lt;li&gt;Средний PR по базе: 2_&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Неплохо, правда? Да, считается, что от каталогов пользы больше нет. Но это не совсем так. Пользы нет от тупого прогона по первой попавшейся базе, а тщательно составленная база до сих пор приносит небольшой прирост пузомерок.&lt;/p&gt;
&lt;p&gt;Чтобы получить бесплатный прогон, необходимо иметь блог схожей тематики и сделать на нем анонс этой акции. После этого нужно отписаться в комментариях и дождаться очереди.&lt;/p&gt;
&lt;p&gt;Количество бесплатных прогонов всего 30, при чем треть их них уже занята! Так что не зевайте ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>#5 Обзор закладок</title>
      <link>https://nevkontakte.com/2008/5-Overview-bookmarks.html</link>
      <pubDate>Sun, 09 Nov 2008 12:05:51 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/5-Overview-bookmarks.html</guid>
      <description>&lt;p&gt;Давненько я не делал ревизию своих закладок, между тем добавляется туда что-то почти каждый день. Что ж, исправим упущение.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://www.inoseo.com"&gt;InoSeo.com&lt;/a&gt;
Весьма занимательный в информационном плане блог, на котором публикуются переводы наиболее интересных зарубежных статей по SEO.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://shvabrashvabr.ru/"&gt;Швабрашвабр&lt;/a&gt;
Эдакий аналог движка хабра, только собранный на Друпале. На сайте есть подробная инструкция о том, как собрать свой швабрашвабр. Так что любителям клепать социалки будет любопытно почитать.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://drupaldance.com/"&gt;Танцы с Друпалом&lt;/a&gt;
Еще один сайт про Друпал. Несмотря на то, что количество информации на нем пока не очень велико, есть и очень интересные статьи, например про &lt;a href="http://drupaldance.com/blog/tuning-comments-form"&gt;форму комментирования&lt;/a&gt;. Так что в ближайшем будущем этот блог ждет еще один этап доработки.&lt;/li&gt;
&lt;li&gt;[Поваренная книга Друпала](http:// DrupalCookBook.RU)
Достал я уже с ним, да? Но тем не менее, всем, кто работает с Друпалом, читать этот сайт обязательно, как книжку на ночь.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://getyacg.com/"&gt;YACG&lt;/a&gt; - yet another content generator
Интересное закрытое англоязычное комьюнити, а так же программка, вокруг которой оно построилось. В чем-то похожа на мой &lt;a href="https://nevkontakte.com/2008/Your-parser-dictionaries-Yandex.html"&gt;Йа.Словарь&lt;/a&gt;, но судя по описанию, гораздо мощнее.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Йа.Словарь - парсер словарей Яндекса</title>
      <link>https://nevkontakte.com/2008/Your-parser-dictionaries-Yandex.html</link>
      <pubDate>Sat, 08 Nov 2008 20:03:29 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Your-parser-dictionaries-Yandex.html</guid>
      <description>&lt;p&gt;Недавно мне понадобилось надыбать тематического контента под синонимизацию. Источником оного я решил сделать Яндекс.Словари и быстренько набросал парсер, который по заданному кейворду парсил выдачу словарей и сохранял выдранные статьи в отдельную папочку.&lt;/p&gt;
&lt;p&gt;Сегодня делать было как-то нечего, и я решил довести мое давишнее творение до ума, добавив в него возможность парсить по отдельным словарям ну и еще по мелочам.&lt;/p&gt;
&lt;p&gt;В результате получилась вполне симпатичная программка:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/s_screen11.png" alt="Йа словарь"&gt;&lt;/p&gt;
&lt;p&gt;Которой я с вами и спешу поделиться :)&lt;/p&gt;
&lt;p&gt;Скачать: &lt;a href="https://nevkontakte.com/files/ya_slovar.txt"&gt;ya_slovar.txt&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Трюки с файлообменниками.</title>
      <link>https://nevkontakte.com/2008/Tricks-with-file-storage.html</link>
      <pubDate>Tue, 04 Nov 2008 22:55:38 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Tricks-with-file-storage.html</guid>
      <description>&lt;p&gt;Поскольку я слишком жаден, чтобы держать на файлообменниках премиум аккаунты, а качать оттуда периодически приходится, я начал составлять подборку хаков, которые бы избавили меня от надоедливой рекламы и таймеров. Чтобы пользоваться ими, надо перетащить указанные ниже ссылки на панель закладок и по необходимости нажимать на них.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="javascript:(function()%7Bwindow.topFrame.y=1;windows.topFrame.DownloadClick=function()%7B%7D;%7D)()"&gt;Letibit Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Нажимать&lt;/strong&gt; если выбрали бесплатное скачивание без всяких акселераторов, когда идет обратный отсчет.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Эффект&lt;/strong&gt;: Обратный отсчет закончится и появится ссылка, при клике на которую никакая реклама вылезать не будет.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="javascript:void(c=0);"&gt;Rapidshare Download&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Нажимать&lt;/strong&gt; когда идет обратный отсчет.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Эффект&lt;/strong&gt;: обратный отсчет закончится и покажется ссылка на скачивание. Правда, с недавних пор они похоже и на стороне сервера следят за временем, так что хак почти потерял актуальность.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На самом деле, набор был гораздо больше, но по неосторожности я его потерял, а когда восстанавливал смог вспомнить только про эти два сервиса. Так что если кто-то помнит еще подобные - милости прошу в коммнты :)&lt;/p&gt;
&lt;p&gt;Ну и напоследок: пока готовил этот пост, наткнулся на &lt;a href="http://savefrom.net/"&gt;вот такой сервис&lt;/a&gt;, который так же упрощает жизнь при работе с некоторыми файлообменниками.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Постовой&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.kavelin.net/2008/08/01/prodvizhenie-statyami/"&gt;Продвижение статьями&lt;/a&gt; от &amp;ldquo;А&amp;rdquo; до &amp;ldquo;Я&amp;rdquo; на блое Александра Кавелина&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Crossover Office Pro &amp; Game - бесплатно!</title>
      <link>https://nevkontakte.com/2008/Crossover-Office-Pro-Game-free.html</link>
      <pubDate>Tue, 28 Oct 2008 21:19:52 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Crossover-Office-Pro-Game-free.html</guid>
      <description>&lt;p&gt;Сегодня проходит уникальная акция от &lt;a href="http://down.codeweavers.com/"&gt;Codewavers&lt;/a&gt; - они предлагают бесплатно скачать полноценные неограниченные версии любых их продуктов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Download CrossOver Mac Pro&lt;/li&gt;
&lt;li&gt;Download CrossOver Games Mac&lt;/li&gt;
&lt;li&gt;Download CrossOver Linux Pro&lt;/li&gt;
&lt;li&gt;Download CrossOver Games Linux&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Акция длится всего один день! Рекомендую поспешить!&lt;/p&gt;
&lt;p&gt;Crossover Office - это коммерческая версия известного эмуятора среды Windows для *NIX платформ Wine, адаптированная для работы с современными офисными программами, такими как MS Office, Photoshop и многими другими. Crossover Office есть в реализации, как для Linux, так и для Mac OS X.&lt;/p&gt;
&lt;p&gt;PS. Я пользуюсь этим продуктом уже довольно давно и могу сказать, что вещь очень полезная в хозяйстве линуксоида.&lt;/p&gt;
&lt;p&gt;PPS. Даунлоад менеджер говорит, что качаться это чудо будет еще минут пятнадцать, как скачается - отзеркалю куда-нибудь.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Акция закончилась, а ссылки все равно живут :) Как и обещал, вот зеркала &lt;a href="http://smsfiles.ru/f/0c47ce6e93aa15613fe2680d7925410b/install-crossover-pro-7.1.0.sh.html"&gt;CXffice Pro&lt;/a&gt; и &lt;a href="http://smsfiles.ru/f/c98104ef12a055670e024cd9f8102c78/install-crossover-games-7.1.2.sh.html"&gt;CXOffice Game&lt;/a&gt; для Linux.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Новый синонимайзер Smart Rewriter от SmartByte.</title>
      <link>https://nevkontakte.com/2008/New-synonymizer-Smart-Rewriter-from-SmartByte.html</link>
      <pubDate>Thu, 23 Oct 2008 17:41:14 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/New-synonymizer-Smart-Rewriter-from-SmartByte.html</guid>
      <description>&lt;p&gt;Как я уже говорил раньше, я решил пойти по пути сателлитостроения. Собственно, я и пошел, но довольно быстро столкнулся с проблемой уникального контента. При этом ситуация выходила самая печальная: покупать готовый контент или заказывать рерайт - дорого, писать самому - тяжело и времени много отнимает, публичные &lt;strong&gt;синонимайзеры&lt;/strong&gt; работали из рук вон плохо. Я уже начал задумываться о написании собственного решения.&lt;/p&gt;
&lt;p&gt;И тут мне повезло. На серче я наткнулся на &lt;a href="http://forum.searchengines.ru/showthread.php?t=277215"&gt;топик&lt;/a&gt;, где автор предлагал &lt;strong&gt;качественный синонимайзер&lt;/strong&gt; всего за $25. При чем, топик почти полностью (!) состоял из положительных отзывов тех, кто уже купил программу. После пятиминутного ознакомления с демкой сего продукта, я без колебаний принял решение о покупке.&lt;/p&gt;
&lt;p&gt;Отдельного упоминания заслуживает суппорт. Достаточно сказать, что я только добавил номер автора в контакт-лист и даже не успел открыть окно чата, как мне уже пришло приветствие и сообщение о том, что он готов ответить на все вопросы касательно программы. Такое впечатление, что меня ждали :)&lt;/p&gt;
&lt;p&gt;Ну а теперь перейду к цифрам и фактам:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Качественная, вручную составленая база синонимов. На данный момент их в базе 7777 и с каждым обновлением их число увеличивается.&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;a href="http://smartbyte.org/smartrew_info.htm"&gt;на сайте программы&lt;/a&gt; (или посмотреть пример работы) а еще лучше потестить &lt;a href="http://smartbyte.org/free_files/Smartrewriter_demo.exe"&gt;демку&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;От себя добавлю, что средний процент уникализации текстов выходит 10-15% при чистой синонимизации, а при помощи букв-фантомов и генератора ошибок этот показатель можно повысить до любого уровня.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ну а теперь бонус!&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Всем, кто при покупке скажет, что пришел по моей рекомендации, - скидка $1. Напомню, что цена программы составляет $25, так что вы имеете возможность приобрести сей продукт с 4% скидкой ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Спамеры жгут.</title>
      <link>https://nevkontakte.com/2008/Spammers-harness.html</link>
      <pubDate>Mon, 20 Oct 2008 23:04:59 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Spammers-harness.html</guid>
      <description>&lt;p&gt;Вот сегодня получил спамовое письмо такого содержания:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Здрaвcтвуйтe.&lt;/p&gt;
&lt;p&gt;Oзнакoмившиcь c Baшим пpоeктoм на http://OINT.RU/, нaчальник отделa cбытa RU, прoизводственногo пpeдпpиятия Tropic, выделил Baс кaк блaгoнaдeжногo кандидaта на высокоoплaчивaемyю (~2200 еврo в мeсяц), диcтaнционную дoлжнoсть финaнсoвoго oпеpатoра ПK.&lt;/p&gt;
&lt;p&gt;Еcли этo предлoжениe Вас зaинтeресовало, изучитe его детали на http://******&lt;strong&gt;.eu/&lt;/strong&gt;/**********.php&lt;/p&gt;
&lt;p&gt;Инфоpматop Tropic&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;И это при том, что на момент получения письма там висело гордое &amp;ldquo;Will be soon&amp;hellip;&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Вы бы хоть действительно проверяли, что за сайт спамите, господа&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Шаблон для Zebrum Lite (косметика/красота/здоровье)</title>
      <link>https://nevkontakte.com/2008/The-template-for-Zebrum-Lite-cosmetics-beauty-health.html</link>
      <pubDate>Sun, 19 Oct 2008 19:15:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/The-template-for-Zebrum-Lite-cosmetics-beauty-health.html</guid>
      <description>&lt;p&gt;&lt;img src="https://nevkontakte.com/files/screen6.jpg" alt="None"&gt;&lt;/p&gt;
&lt;p&gt;Выкладываю для публичного пользования шаблон для Zebrum Lite, портированный мною под эту cms.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Тематика&lt;/strong&gt;: красота, здоровье.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Верстка:&lt;/strong&gt; табличная, с использованием css&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Валидация:&lt;/strong&gt; XHTML 1.0 Transitional&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Вес архива&lt;/strong&gt;: - 52 Кб&lt;/p&gt;
&lt;p&gt;Скачать: &lt;a href="https://nevkontakte.com/files/buy-cosmetics.zip"&gt;buy-cosmetics.zip&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Конкурс: кто на свете всех быстрее?</title>
      <link>https://nevkontakte.com/2008/Contest-who-on-earth-all-faster.html</link>
      <pubDate>Wed, 15 Oct 2008 21:26:10 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Contest-who-on-earth-all-faster.html</guid>
      <description>&lt;p&gt;Недавно в рамках эстафеты &amp;ldquo;Палю тему&amp;rdquo; я &lt;a href="https://nevkontakte.com/2008/Relay-PAL-topic.html"&gt;писал&lt;/a&gt; о сервисе тестирования скорости сайтов webslug.info и о том, как сделать свой сайт самым быстрым :)&lt;/p&gt;
&lt;p&gt;Конкурс прост и состоит из двух номинаций:&lt;/p&gt;
&lt;h3 id="1-мои-быстрые-сайты"&gt;1) Мои быстрые сайты.&lt;/h3&gt;
&lt;p&gt;Здесь победителем становится тот, кто на первых двух страницах &lt;a href="http://www.webslug.info/index/fastest"&gt;топа webslug.info&lt;/a&gt; первым найдет все (ну или наибольшее количество) сайтов, к которым я имею отношение (приложил лапу к созданию или просто писал о них).&lt;/p&gt;
&lt;p&gt;Результаты своих поисков можете оставлять в комментариях к этому посту или, чтобы не помогать соперникам, список можете отправить на адрес aleks[dogg]aradmin.org.&lt;/p&gt;
&lt;p&gt;Победитель в это номинации получит сквозную ссылку с моего блога (PR 3, тИЦ 30) до конца этого года.&lt;/p&gt;
&lt;h3 id="2-я---шустрый"&gt;2) Я - шустрый.&lt;/h3&gt;
&lt;p&gt;Ну а здесть победит тот, чей сайт на момент окончания конкурса будет самым быстрым :) Чтобы исключить всякие махинации, на сайте должна быть страничка, на которой написан ник его владельца и то, что он участвует в конкурсе. Ссылку на такую страницу необходимо оставить в комментариях к этому посту.&lt;/p&gt;
&lt;p&gt;Сайт-победитель после окончания конкурса получит подробный обзор на моем блоге, а те, которые окажутся на второй и третьей позициях - ссылку в постовом.&lt;/p&gt;
&lt;h3 id="конкурс-длится-неделю-до-1900-22-октября"&gt;&lt;del&gt;Конкурс длится неделю, до 1900 22 октября.&lt;/del&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Решил не ограничивать первую часть конкурса по времени. Так что дерзайте ;)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Zebrum CMS поступила в продажу!</title>
      <link>https://nevkontakte.com/2008/Zebrum-CMS-went-on-sale.html</link>
      <pubDate>Wed, 15 Oct 2008 20:55:18 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Zebrum-CMS-went-on-sale.html</guid>
      <description>&lt;p&gt;Рад сообщить вам радостную новость: &lt;a href="http://zebrum.ru/?c=36F2653BCE"&gt;ZebrumCMS&lt;/a&gt; поступила в открытую продажу! До сих пор доступ к ней только десять бета-тестеров, но теперь ее может приобрести любой желающий.&lt;/p&gt;
&lt;h3 id="каковы-же-возможности-zebrum"&gt;Каковы же возможности Zebrum?&lt;/h3&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;Загрузка сайтов на хостинг по FTP&lt;/li&gt;
&lt;li&gt;Возможность подключения к системе уже существующих сайтов на платформе Zebrum Lite.&lt;/li&gt;
&lt;li&gt;И многое другое&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;От себя могу сказать, что это действительно очень удобный и продуманный инструмент, позволяющий облегчить контроль за большим количеством сайтов.&lt;/p&gt;
&lt;h3 id="как-приобрести-zebrum-cms"&gt;Как приобрести Zebrum CMS?&lt;/h3&gt;
&lt;p&gt;Покупка легко совершается онлайн, на &lt;a href="http://zebrum.ru/buy/?c=36F2653BCE"&gt;сайте CMS&lt;/a&gt;, цена самой CMS составляет 2450р, а подписка на годичную поддержку и обновления - 7450р, какой из этих вариантов выбирать - решать вам, но мой выбор - это CMS+Обновления, потому что это дает доступ ко всем нововведенимя сразу после их появления.&lt;/p&gt;
&lt;h2 id="useful-stuff"&gt;Useful Stuff.&lt;/h2&gt;
&lt;p&gt;Так же всем, кто работает с Zebrum или Zebrum Lite советую ознакомиться с &lt;a href="https://web.archive.org/web/20101022095431/http://anything2.zebrum.net.ru/"&gt;Anything 2 Zebrum&lt;/a&gt; :) Ну а если вы любите делать блоговиные сателлиты, то вам непременно придется по душе &lt;a href="https://web.archive.org/web/20090328124044/http://zebrum.net.ru/"&gt;Zebrum Bloglike&lt;/a&gt;, который так же бесплатен, как и a2z.&lt;/p&gt;
&lt;p&gt;Удачного сателлитостроения!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Эстафета "Палю тему!"</title>
      <link>https://nevkontakte.com/2008/Relay-PAL-topic.html</link>
      <pubDate>Mon, 13 Oct 2008 18:12:17 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Relay-PAL-topic.html</guid>
      <description>&lt;p&gt;Павел, автор блога &lt;a href="http://www.prodvinemvmeste.ru/"&gt;Продвинем Вместе&lt;/a&gt;, передал мне эстафету &lt;a href="http://www.prodvinemvmeste.ru/interesno/estafeta-prodvinem-vmeste-ili-palyu-temu.htm"&gt;&amp;ldquo;Продвинем вместе или Палю тему&amp;rdquo;&lt;/a&gt; и я с радостью ее принимаю.&lt;/p&gt;
&lt;p&gt;Суть эстафеты проста &amp;ldquo;спалить&amp;rdquo; пусть хоть совсем маленькую, но все же &amp;ldquo;тему&amp;rdquo;, откуда можно раздобыть бесплатную жирную ссылку, немного тИЦ или еще что-нибудь в этом роде.
Длиться эстафета будет до первого декабря, а по ее результатам будет создан &amp;ldquo;сборник паленых тем&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;И так, &lt;strong&gt;палю тему&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Собственно, темы у меня неказистые, поэтому их будет две.&lt;/p&gt;
&lt;h4 id="первая-кто-на-свете-всех-быстрее"&gt;Первая: &amp;ldquo;Кто на свете всех быстрее?&amp;rdquo;&lt;/h4&gt;
&lt;p&gt;Речь пойдет о сервисе &lt;a href="http://webslug.info"&gt;webslug.info&lt;/a&gt;, который замеряет и сравнивает скорость загрузки разных сайтов. Результатом этого сравнения становится &lt;a href="http://www.webslug.info/index/fastest"&gt;топ быстрейших сайтов&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Было бы здорово туда попасть? Нет проблем. Замер происходит на стороне клиента, а потому легко поддается манипуляции. B)&lt;/p&gt;
&lt;p&gt;При помощи &lt;a href="http://www.google.ru/search?q=%D1%84%D0%B0%D0%B9%D0%BB+hosts"&gt;файла hosts&lt;/a&gt; задаем для продвигаемого домена ip 127.0.0.1. После этого открываем &amp;ldquo;Test a site&amp;rdquo; и указываем наш домен. Протестировав свой домен в таком режиме пару десятков раз вы без проблем выберетесь на вершину топа.&lt;/p&gt;
&lt;p&gt;К сожалению, ссылки в топе закрыты nofollow, но если вы вытащите в топ англоязычный сайт вебмастерской направленности, то обязательно получите небольшое количество целевого вебмастерского трафика и кучу понта :)&lt;/p&gt;
&lt;p&gt;Ну и последнее. Слегка доработав вышеизложенную идею можно так же легко манипулировать топами большинства подобных рейтингов, производящих тестирование на стороне сервера.&lt;/p&gt;
&lt;h4 id="вторая-передай-палочку"&gt;Вторая: &amp;ldquo;Передай палочку&amp;rdquo;.&lt;/h4&gt;
&lt;p&gt;Это скорее шутка, чем &amp;ldquo;тема&amp;rdquo;, но пусть будет. Требуется всего-навсего запустить самому или принять от кого-нибудь эстафету и постараться передать какому-нибудь известному блоггеру. Поскольку обычно, принимая эстафету, блоггер указывает, кто ее ему передал, то вы получаете &amp;ldquo;безвозмездно, то есть даром&amp;rdquo; и ссылку, и посетителей, которыми будут читатели того блога. ну а дальше - главное сделать этих посетителей своими читателями при помощи уникального и интересного контента ;) Естественно, запускать свою собственную эстафету еще лучше, но сложнее.&lt;/p&gt;
&lt;p&gt;Передать эстафету буду рад любому, кто пожелает ее перехватить и в особенности хотелось бы передать ее &lt;a href="http://rav4click.ru/"&gt;Безколесному бомжу&lt;/a&gt; и &lt;a href="http://zarabotai.lv/ru/blog/"&gt;Дминтрию Ветрову&lt;/a&gt;, поскольку я уже давно читаю их блоги и проникся глубоким уважением к этим людям.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Anything 2 Zebrum - конвертируй это!</title>
      <link>https://nevkontakte.com/2008/Anything-2-Zebrum-convert-it.html</link>
      <pubDate>Sun, 12 Oct 2008 18:47:18 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Anything-2-Zebrum-convert-it.html</guid>
      <description>&lt;p&gt;Подходит к концу период закрытого бета-тестирования новой многосайтовой системы &lt;a href="http://zebrum.ru"&gt;Zebrum CMS&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Как бета-тестер могу сказать вам, что потенциал у этой штуки очень пристойный (я, правда, как последний мешок, его даже толком не начал использовать, пинок мне под зад) а посему рекомендую готовить &lt;a href="http://blog.zebrum.ru/stoimost-zebrum-cms/"&gt;требуемую сумму&lt;/a&gt; для ее приобретения.&lt;/p&gt;
&lt;p&gt;Но на само деле, мой пост не об этом :)
Речь пойдет о моем детище под названием &lt;strong&gt;&lt;a href="http://a2z.oint.ru"&gt;Anything 2 Zebrum&lt;/a&gt;&lt;/strong&gt;. Это набор модулей, предназначенных для конвертирования разнообразных данных в сайты на платформе &lt;strong&gt;Zebrum&lt;/strong&gt; и &lt;strong&gt;Zebrum Lite&lt;/strong&gt;. Нафиг это надо? Ответ простой: чтобы сэкономить время. При помощи &lt;strong&gt;Anything 2 Zebrum&lt;/strong&gt; вы сможете за пару минут из большого исходного текста (скана книги, например) сгенерировать сайт на Zebrum, вместо того, чтобы сидеть и до посинения вручную копипастить куски книги и оформлять параметры.&lt;/p&gt;
&lt;p&gt;Что мы можем на данный момент?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Text 2 Zebrum&lt;/strong&gt; позволяет при помощи регулярных выражений за несколько секунд превратить произвольно отформатированный текст в готовый для импорта в Zebrum набор страниц.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Что мы сможем в ближайшем будущем?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS 2 Zebrum&lt;/strong&gt; сконвертирует любой RSS поток во все тот же файл для импорта в Z.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для доступа к &lt;strong&gt;Anything 2 Zebrum&lt;/strong&gt; необходимо:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Указать логин &lt;em&gt;zebrum&lt;/em&gt; и пароль &lt;em&gt;test-it&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;Быть читателем моего блога (а иначе как бы вы узнали пароль? ;) )&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Поскольку у меня возникли серьезные сомнения в интуитивной понятности всего богатого набора опций Anything 2 Zebrum, я записал демонстрационный ролик работы с сервисом. Ролик можно посмотреть на главной странице A2Z в двух низком и высоком качестве - на ваш выбор.&lt;/p&gt;
&lt;p&gt;Удачного сателлитостроения!&lt;/p&gt;
&lt;p&gt;Постовой:
Недавно открылся &lt;a href="http://www.seo-net.ru"&gt;блог о контекстной рекламе&lt;/a&gt; в Я.Директе. Для работающих с этой партнеркой рекомендуется к прочтению.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Осеннее обострение.</title>
      <link>https://nevkontakte.com/2008/Autumn-exacerbation.html</link>
      <pubDate>Mon, 06 Oct 2008 15:27:48 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Autumn-exacerbation.html</guid>
      <description>&lt;p&gt;Натурально. Дел - не мерено, а руки опускаются. Так ничего толкового до ума не довел, а надо бы. Разрываюсь между фрилансом, дорвееводством (да, решил попробовать себя в этой сфере) и блогосферой. А всю прошедшую неделю я вообще тупо проболел. И вроде не так уж злостно болел, а дела все равно никак не делал :( Хреново. Пора браться за голову и работать.&lt;/p&gt;
&lt;p&gt;Список дел:&lt;/p&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;При помощи имеющегося в моем распоряжении Зебрума сделать хотя бы пять MFS и по-быстрому их проиндексировать. А еще надо бы подыскать метод прокачки пузомерок.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Сроку на всю эту хрень - неделя. Если не справлюсь - значит сам дурак.&lt;/p&gt;
&lt;p&gt;Да, и еще надо бы написать что-нибудь из запланированных постов.&lt;/p&gt;
&lt;p&gt;До скорого.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Установка Zend Optimizer на XAMPP под Linux</title>
      <link>https://nevkontakte.com/2008/Installing-the-Zend-Optimizer-on-XAMPP-under-Linux.html</link>
      <pubDate>Wed, 01 Oct 2008 17:29:17 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Installing-the-Zend-Optimizer-on-XAMPP-under-Linux.html</guid>
      <description>&lt;p&gt;Поскольку мне повезло &lt;a href="http://blog.zebrum.ru/10-testerov-zebrum-cms/"&gt;принять участие&lt;/a&gt; в бета-тестировании &lt;strong&gt;ZebrumCMS&lt;/strong&gt;, то возникла нужда в установке &lt;strong&gt;Zend Optimizer&lt;/strong&gt;, который необходим для работы этой системы. Забегая вперез скажу, то это действительно мощная и удобная система, и своих денег она стоит. Но вернемся к нашим баранам. &lt;a href="http://www.apachefriends.org/files/win32/howtos/Howto%20install%20zendplatform%20on%20XAMPP.pdf"&gt;Инструкцию по установке&lt;/a&gt; ZO под windows оказалась найти проще простого, но пользы от нее был ровный ноль - линуксовый установщик не имеет ничего общего со своим собратом для винды. Поэтому пришлось разбираться самому, что, честно говоря, не оказалось слишком уж сложным. И так, поехали!&lt;/p&gt;
&lt;p&gt;Для скачивания ZO необходимо зарегистрироваться на сайте. Далее идем в раздел загрузок и скачиваем вариант &lt;em&gt;Linux x86 (32 bit)&lt;/em&gt;, поскольку входящий в состав XAMPP Apache был собран под 32-х битную архитектуру. Если у вас не XAMPP и сервер собран под x86_64, то смело выбирайте &lt;em&gt;Linux x86 (64 bit)&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;После распаковки архива необходимо напустить скрипт install от имени root. Если вы все сделали как надо, то от вас поприветствует вот таким экраном:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen1.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen1.png" alt="screen1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Принимаем все лиценизионные соглашения и вводим путь для установки Zend Optimizer: /opt/lampp/Zend&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen2.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen2.png" alt="screen2.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;php.ini у нас расположен по адресу /opt/lampp/etc:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen3.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen3.png" alt="screen3.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;XAMPP основан на Apache и разрабатывается командой Apachefriends, поэтому на следующий вопрос отвечаем утвердительно:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen4.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen4.png" alt="screen4.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Утилита apachectl в XAMPP располагается по адресу /opt/lampp/bin/apachectl, что мы и сообщаем установщику:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen5.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen5.png" alt="screen5.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Далее происходит модификация файла php.ini для активации ZO и радостная весть об успешной установке:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen6.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen6.png" alt="screen6.png"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/screen7.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen7.png" alt="screen7.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;На последок установщик предлагает нам перезапустить Apache и мы принимаем его предложение:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/screen8.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen8.png" alt="screen8.png"&gt;&lt;/a&gt;&lt;a href="https://nevkontakte.com/files/screen9.png"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/screen9.png" alt="screen9.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ну вот, практически все сделано. Осталось только добавить в файл php.ini в раздел &lt;strong&gt;[Zend]&lt;/strong&gt; строку:
&lt;code&gt;zend_optimizer.enable_loader = 1&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Еще раз перезагружаем веб-сервер.
Если вы сделали все правильно, что Zend Optimizer должен функционировать.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Постовой:&lt;/strong&gt;&lt;a href="http://www.epochta.ru/products/mailer/"&gt;ePochta Mailer&lt;/a&gt; - мощный инструмент для создания крупных маркетинговых рассылок с гибким управление базой клиентов и рассылок и простым интерфейсом.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://sergey.pavlenko.org/?p=18"&gt;Сергей Павленко о продвижении сайтов с j2j.ru&lt;/a&gt; - анализ эффективности продвижения от одного из создателей системы.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как не надо делать сайты автосерфинга - Дубль два.</title>
      <link>https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-Take-two.html</link>
      <pubDate>Sun, 28 Sep 2008 16:00:21 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-Take-two.html</guid>
      <description>&lt;p&gt;Я уже &lt;a href="https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-or-Receive-visitors-for-free.html"&gt;писал&lt;/a&gt; про сайт &lt;strong&gt;asurf.net.ru&lt;/strong&gt; и его клонах, о том, насколько дырявая стоит там система. Однако, корявый у них не только скрипт, но и, видимо, админ. Откуда вывод? да оттуда: после того как я &lt;a href="https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-or-Receive-visitors-for-free.html"&gt;автоматизировал&lt;/a&gt; использования дыр в скрипте обмена посетителями и поставил это дело на поток, они предпочли вместа фикса, а это не так уж сложно, полагаю, тупо забанить те сайты, на которые я гнал посетителей. Блин, наивные люди, честное слово.&lt;/p&gt;
&lt;p&gt;Но речь сегодня пойдет о другом. А именно, о еще одном баге, который имеет место в их скрипте. Это скрипт партнерской программы. Суть его проста: ты ставишь на них ссылку на раскручиваемом сайте, они начисляют тебе дополнительные баллы. Самое забавное заключается в том, что их проверялка за милую душу хавает ссылку внутри html комментария! Я уже не говорю о более хитрых способах сокрытия ссылок от посетителей и поисковиков. Ребята, медаль вам за гениальность. Чтож, &amp;ldquo;тему&amp;rdquo; я спалил, теперь пойду, направлю полсотни леммингов с этого сайта на эту статью и посмотрю, что их этого выйдет.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ну а теперь о приятном.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;От &lt;a href="http://seomoney.org.ua/2008/09/apdejt-pagerank-ili-pagerank-vsyo-desheveet-attention-lomayut-aski-i-spamyat-iz-nix-po-kontakt-listu/"&gt;Simple&lt;/a&gt; оплучил эстафету, которую и продолжу.&lt;/p&gt;
&lt;p&gt;5 любимых вещей в блогосфере:&lt;/p&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;/ol&gt;
&lt;p&gt;5 нелюбимых вещей&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Спам. Он достал всех.&lt;/li&gt;
&lt;li&gt;Оплачиваемая реклама всюду, где можно. Писать за деньги можно, но не в ущерб читателям - поэтому размещайте тематическую рекламу. Она и стоит дороже, кстати.&lt;/li&gt;
&lt;li&gt;Мат. Нет, в меру его использовать можно &lt;del&gt;и нужно&lt;/del&gt;, но в каждом предложении - это перебор.&lt;/li&gt;
&lt;li&gt;Однообразные посты. Скучно, когда все пишут про &lt;a href="http://blogun.ru/?r=8921"&gt;Блогун&lt;/a&gt; (реже - &lt;a href="http://j2j.ru/360"&gt;j2j&lt;/a&gt;), &lt;del&gt;к&lt;/del&gt;&lt;a href="http://www.sape.ru/r.93b640dd91.php"&gt;cапу&lt;/a&gt; и &lt;a href="http://ya.ru"&gt;тИЦ&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Прекрасный способ убить время, даже если потребности в этом нет ;)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;Ну и последнее&lt;/strong&gt;, что я хотел сказать. Блог Продвинем Вместе &lt;a href="http://www.prodvinemvmeste.ru/news/konkurs-luchshij-kommentator-goda-ili-najdi-u-menya-stranicu-s-pr8.htm"&gt;проводит конкурс&lt;/a&gt; на лучшего комментатора. На кону - 6 жирных ссылок.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Гугль ломает стереотипы.</title>
      <link>https://nevkontakte.com/2008/Google-breaks-the-stereotypes.html</link>
      <pubDate>Sat, 27 Sep 2008 18:51:09 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Google-breaks-the-stereotypes.html</guid>
      <description>&lt;p&gt;В сегодняшнем посте я намереваюсь затронуть две темы: &lt;strong&gt;ап PageRank от 27.09.08&lt;/strong&gt; и сообщение Гугля о том, что &lt;strong&gt;для скриптов предпочтительнее динамические url&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;И так, апдейт PR. Пожалуй, самый позитивный на моей, да и не только на моей, памяти.
Мой блог получил долгожданную тройку.
Многие нулевые сайты получили PR по 2-3, более старые - еще больше. В частности, &lt;a href="https://web.archive.org/web/2008/http://scb.net.ru/"&gt;Google Cache Browser&lt;/a&gt; получил PR3 с нуля, при том, что он никаким образом не раскручивался.
Но с этим еще пол беды, проект вполне белый и пушистый и посему сам по себе заслуживает одобрения со стороны гугля :D Удивительно, что единственный мой ГС с нуля поднялся до двух при опять-таки полном отсутствии раскрутки с моей стороны.
В общем, Гугль сделал хороший подарок веб-мастерам на свой &lt;a href="http://www.google.ru/tenthbirthday/"&gt;юбилей&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Ну а теперь перейдем к другой весьма интригующей &lt;a href="http://googlewebmastercentral.blogspot.com/2008/09/dynamic-urls-vs-static-urls.html"&gt;новости от гугла&lt;/a&gt;.
Если говорить вкратце, то Гугль официально заявил, что динамические URL для него уже не проблема и, более того, для динамических страниц предпочтительнее использовать именно их, так как это способствует более верному анализу структуры сайта ботом поисковика. Вот такие пироги.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Постовой&lt;/strong&gt;
Настоятельно рекомендую подписаться вам на &lt;a href="http://blog.zebrum.ru/"&gt;блог Zebrum CMS&lt;/a&gt;. Zebrum - это продвинутая система управления сетью сателлитов, которая еще даже не будучи выпущенной в публичное пользование изрядно тревожит умы многих манимейкеров :)&lt;/p&gt;
&lt;p&gt;А вот еще одна весьма &lt;a href="http://partner.mylove.ru/"&gt;партнерская программа сайта знакомств&lt;/a&gt; с хорошими бонусами для активных партнеров.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Очистка рабочей копии .svn</title>
      <link>https://nevkontakte.com/2008/Cleanup-a-working-copy-svn.html</link>
      <pubDate>Wed, 24 Sep 2008 20:05:45 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Cleanup-a-working-copy-svn.html</guid>
      <description>&lt;p&gt;При разработке своих программ я, как и многие другие программисты, часто прибегаю к помощи систем контроля версий. В частности, Subversion. Но когда приходит время собирать из рабочей копии нормальный дистрибутив, начинаются сложности: в каждой папке SVN создает свою системную папку .svn, удалять которые вручную довольно утомительно, а не удалять нельзя - из-за этого общий размер дистрибутива вырастет примерно раза в два. Кому это надо? Немного помаявшись, я изобрел простое, как все гениальное, решение:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;создаем копию рабочей копии (простите за тавтологию)&lt;/li&gt;
&lt;li&gt;открываем консоль и переходим в созданную нами папку&lt;/li&gt;
&lt;li&gt;выполняем команду: &lt;code&gt;rm -fr find | grep \.svn$&lt;/code&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вуаля! Все лишние файлы удалены, можно приступать к упаковке дистрибутива.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Постовой:&lt;/strong&gt;&lt;a href="http://webdown.ru/"&gt;WebDown обменивается постовыми&lt;/a&gt; с другими блоггерами
Так же постовыми с блогами близких тематик обменивается и &lt;a href="http://www.prodvinemvmeste.ru/obmen-ssylkami"&gt;блог &amp;ldquo;Продвинем вместе&amp;rdquo;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>#4 Обзор закладок или Все для создания форума.</title>
      <link>https://nevkontakte.com/2008/4-Overview-of-bookmarks-or-All-of-the-forum.html</link>
      <pubDate>Tue, 23 Sep 2008 21:39:50 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/4-Overview-of-bookmarks-or-All-of-the-forum.html</guid>
      <description>&lt;p&gt;Эта подборка ссылок будет тематическая, поскольку в силу моих интересов, у меня накопилось довольно много информации на форумную тему. Приступим.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://forum.searchengines.ru/showthread.php?t=42743"&gt;Как я раскрутил форум&lt;/a&gt;
Очень подробная и занимательная статья о том, как правильно подойти к созданию форума, чтобы не тратить силы впустую.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Раскрутка форума - подробное руководство, &lt;a href="http://stakhov.ru/2008/07/raskrutka-foruma-podrobnoe-rukovodstvo-chast-1/"&gt;часть 1&lt;/a&gt; и &lt;a href="http://stakhov.ru/2008/08/raskrutka-foruma-podrobnoe-rukovodstvo-chast-2/"&gt;часть 2&lt;/a&gt;
Тоже весьма объемное руководство, которое спасет вас от многих ошибок.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.managingonlineforums.com/"&gt;Managing Online Forums: Everything You Need to Know to Create and Run Successful Community Discussion Boards&lt;/a&gt;
Сайт книги, написанной одним из администраторов phpBBhacks.com и владельцем iFroggy Networks. Иными словами, человек на форумах собаку съел. Обсуждение этой книги можно найти &lt;a href="http://www.phpbbguru.net/community/topic21707.html"&gt;здесь&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.communityadmins.com/"&gt;Community Admins&lt;/a&gt;
Англоязычный форум, посвященный созданию, поддержке и развитию форумных (да и не только форумных) сообществ.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://web.archive.org/web/2008/http://phpbbtools.ru/"&gt;phpBB 3.0.2 Russian&lt;/a&gt;
Моя сборка phpBB3 с предустановленной русификацией.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Еще будет полезно почитать мой давний &lt;a href="https://nevkontakte.com/2008/Forum-Matrix-compare-engines.html"&gt;пост&lt;/a&gt; о сайте Forum Matrix и о том, как правильно подобрать движок для форума.&lt;/p&gt;
&lt;p&gt;PS. Вот еще один &lt;a href="http://michael.com.ru/"&gt;блог о веб-программировании&lt;/a&gt;. Коллега, так сказать :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>С днем программиста!</title>
      <link>https://nevkontakte.com/2008/On-the-day-of-programmer.html</link>
      <pubDate>Fri, 12 Sep 2008 22:11:40 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/On-the-day-of-programmer.html</guid>
      <description>&lt;p&gt;Что ж, поздравляю всю программирующую публику с 256 днем года и желаю творческих успехов.&lt;/p&gt;
&lt;p&gt;Своеобразный подарок к этому празднику преподнес сеошникам Яндекс - вчера официально был осуществлен переход на новый алгоритм ранжирования - Находку. Следующим приказали ждать Анадырь. И из-за этого &amp;ldquo;подарочка&amp;rdquo; по форумам прошла волна жалоб на ухудшение позиций, но у себя я ничего подобного не заметил, даже небольшой рост местами. Может, потому что я практически не прибегал к искусственному наращиванию параметров сайта? :?&lt;/p&gt;</description>
    </item>
    <item>
      <title>#3 Обзор закладок, ап тИЦ от 08.09.2008 и новые цели.</title>
      <link>https://nevkontakte.com/2008/3-Review-bookmarks-AP-TIC-from-08-09-2008-and-new-goals.html</link>
      <pubDate>Mon, 08 Sep 2008 19:33:59 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/3-Review-bookmarks-AP-TIC-from-08-09-2008-and-new-goals.html</guid>
      <description>&lt;p&gt;Начну с очередного обзора пяти свежих закладок. Предыдущий обзор можно найти &lt;a href="https://nevkontakte.com/2008/2-Overview-of-bookmarks-or-Sunday-nonsense.html"&gt;здесь&lt;/a&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.bananascript.com/index.php?home"&gt;Bananascript.com&lt;/a&gt;
Это бесплатный сервис упаковки JavaScript скриптов. Именно им я после небольшого поиска воспользовался для создания сжатой копии библиотека &lt;a href="https://nevkontakte.com/2008/Replacement-for-the-standard-JavaScript-dialogs.html"&gt;CoolDialog&lt;/a&gt;. Почему? да потому что он продемонстировал самое эффективное сжатие из всех протестированных мною пакеров - почти 77%(!!). Поэтому настоятельно рекомендую всем.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.gelatocms.com/"&gt;Gelato CMS&lt;/a&gt;
Молодая CMS open-source с очень привлекательными заявленными характеристиками. Потестировать я ее еще не успел, но на досуге обязательно займусь.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://allajax.ru/"&gt;All Ajax&lt;/a&gt;
Сайт с огромной подборкой AJAX и JS скриптов. Среди всего многообразия я нашел несколько скриптов, которые искал уже давно, а так же парочку творческих идей :)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://webcron.org/index.php?&amp;amp;lang=en"&gt;Web Cron&lt;/a&gt; и &lt;a href="http://cronjob.ru/"&gt;Cron Job&lt;/a&gt;
Два сервиса - русский и зарубежный, предоставляющие бесплатные услуги крона. Если на вашем дешевом/бесплатном хостинге нет поддержки крона, но вам требуется регулярное выполнение каких-то задач, то эти сервисы вас сильно выручат.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.opendesigns.org/"&gt;Open Designes&lt;/a&gt;
Этот сайт будет хорошим дополнением к посту о &lt;a href="https://nevkontakte.com/2008/Free-patterns-for-satellites.html"&gt;бесплатных шаблонах для сателлитов&lt;/a&gt;
Сайт содержит большое количество свободно распространяемых макетов сайтов, среди которых попадаются очень и очень достойные варианты. Несомненным плюсом так же служит гибкий поиск по базе дизайнов, который позволит &amp;ldquo;на раз&amp;rdquo; отсеять ненужные варианты.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На этом с обзором все, ниже следует небольшое ассорти из мыслей, посетивших меня за последнее время.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Первым делом меня порадовал тот факт, что сегодня тИЦ моего блога вырос еще на десяточку. На самом деле, конечно 30 тИЦ - это мелочь, но мелочь приятная.&lt;/li&gt;
&lt;li&gt;Коллеги! Обсуждая с новым клиентом заказ в первую очередь обязательно обсудите способы оплаты! Иначе хлопот не оберетесь, если клиент, скажем никогда не имел дела с вебмани или другой платежной системой да и при том живет где-нибудь в СНГ, где законность он-лайн платежных систем с точки зрения местного законодательства вообще под вопросом. Такая нехитрая предосторожность может сэкономить вам поряком времени и нервов.&lt;/li&gt;
&lt;li&gt;Поставил себе очередную цель - к следующему семестру обзавестись нетбуком. Ибо когда у тебя окно между парами, а домой ехать влом, то вылезти в интернет или чего-нибудь попечатать - самое то. Но ведь не таскать же с собой из-за этого здорвый и увесистый ноутбук?&lt;/li&gt;
&lt;li&gt;Никогда и ни ради чего не жертвуйте сном! Если вы всю ночь просидите, судорожно что-то делая, то завтра вы потеряете куда больше времени, чем сэкономили ночью, из-за офигенного желания поспать еще хотя бы пару часиков. Проверено на личном опыте :(&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Замена стандартным JavaScript диалогам.</title>
      <link>https://nevkontakte.com/2008/Replacement-for-the-standard-JavaScript-dialogs.html</link>
      <pubDate>Sat, 06 Sep 2008 21:42:50 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Replacement-for-the-standard-JavaScript-dialogs.html</guid>
      <description>&lt;p&gt;Впервые такая мысль мысль пришла в голову, когда я занимался разработкой мода &lt;a href="http://www.phpbbguru.net/community/topic18043.html"&gt;Full AlJAX для phpBB3&lt;/a&gt;
Там я старался выдержать все элементы управления в едином стиле и стандартные диалоговые окна казались мне довольно убогими и некрасивыми. Тогда я предпринял пару неубедительных попыток решить эту проблему, но до ума так и не довел.&lt;/p&gt;
&lt;p&gt;А сегодня я вдруг вспомнил о той давней идее и решил ее осуществить, тем более, что с тех пор я накопил кое-какую полезную инфу по теме.&lt;/p&gt;
&lt;p&gt;Результатом стал набор из трех функций &lt;code&gt;myAlert()&lt;/code&gt;, &lt;code&gt;myConfirm()&lt;/code&gt; и &lt;code&gt;myPrompt()&lt;/code&gt;, которые реализовали функционал стандартных диалогов при помощи слоев и DOM.
Благодаря этому внешний вид диалогов можно легко подогнать под любой стиль, используя лишь CSS.&lt;/p&gt;
&lt;p&gt;Ниже я привожу пример моего диалога:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt; &lt;span class="na"&gt;src&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s"&gt;&amp;#34;http://nevkontakte.org.ru/files/cooldialog.js.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;popup_dialog&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c"&gt;/* Netscape 4, IE 4.x-5.0/Win and other lesser browsers will use this */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;absolute&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;150&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mh"&gt;#f6f4d0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;dotted&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mh"&gt;#105289&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;z-index&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="nt"&gt;body&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;popup_dialog&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c"&gt;/* used by Opera 5+, Netscape6+/Mozilla, Konqueror, Safari, OmniWeb 4.5+, iCab, ICEbrowser */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;popup_dialog&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c"&gt;/* IE5.5+/Win - this is more specific than the IE 5.0 version */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;expression&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;          &lt;span class="mi"&gt;150&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;              &lt;span class="n"&gt;ignoreMe&lt;/span&gt; &lt;span class="err"&gt;=&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;documentElement&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scrollTop&lt;/span&gt; &lt;span class="err"&gt;?&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;                &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;documentElement&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scrollTop&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;body&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scrollTop&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;            &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;px&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;popup_control&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;pointer&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hand&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;popup_headerbar&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;right&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;popup_buttons&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;text-align&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;center&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="c"&gt;/*.popup_buttons input {
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;    float: left;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;  }*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;popup_content&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;block&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="k"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="kt"&gt;px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;style&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;testDlg&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;myPrompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Введите ваше имя:&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Алекс&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;        &lt;span class="nx"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Анонимус&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;      &lt;span class="nx"&gt;alert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Ваше имя:&amp;#34;&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="p"&gt;});&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Скачать: &lt;a href="https://nevkontakte.com/files/dialog.zip"&gt;dialog.zip&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Новинка от Гугля: Google Chrome Browser</title>
      <link>https://nevkontakte.com/2008/Novelty-from-Google-Google-Chrome-Browser.html</link>
      <pubDate>Wed, 03 Sep 2008 21:44:43 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Novelty-from-Google-Google-Chrome-Browser.html</guid>
      <description>&lt;p&gt;Это будет самый короткий пост в блоге, навеяно &lt;a href="http://blog.rumoneybook.net/2008/09/blog-post.html"&gt;этим&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Под вайном устанавливается, но не запускается, падает. Версию под Линукс обещают, но пока ее нет, посему - нафиг поделку.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Rapid Template - быстрый и удобный шаблонизатор.</title>
      <link>https://nevkontakte.com/2008/Rapid-Template-fast-and-easy-template-engine.html</link>
      <pubDate>Fri, 29 Aug 2008 21:30:55 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Rapid-Template-fast-and-easy-template-engine.html</guid>
      <description>&lt;p&gt;Незадолго до того, как началась повальная пиар акция CMS Zebrum Lite я начал писать собственную cms примерно с теми же целями - минимально требовательный и быстрый движок для сателлитов. После некоторых раздумий я решил, что раз уж я взялся писать cms с нуля, то надо и шаблонизатор свой написать, чтоб был быстрый и удобный. Ну а поскольку я ярый фанат phpBB и считаю их систему шаблонов одной из наиболее правильных, то свой шаблонизатор я сделал по образу и подобию его собрата из phpBB.&lt;/p&gt;
&lt;p&gt;Основные особенности Rapid Template:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Небольшой размер движка (4.1 кб)&lt;/li&gt;
&lt;li&gt;Быстрота&lt;/li&gt;
&lt;li&gt;Простой синтаксис&lt;/li&gt;
&lt;li&gt;Полная абстракция дизайна от кода&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://gist.github.com/nevkontakte/16bcc8bd86a61bf423b470bd6e86565a"&gt;Rapid Template 1.0&lt;/a&gt;&lt;/p&gt;
&lt;!-- Local copy: /files/template.txt --&gt;
&lt;p&gt;Все файлы шаблонов должны храниться в папке /template/ и иметь расширение .tpl&lt;/p&gt;
&lt;p&gt;Теперь вкратце опишу синтаксис Rapid Template.&lt;/p&gt;
&lt;h4 id="подключение-дополнительного-файла-шаблона"&gt;Подключение дополнительного файла шаблона&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- INCLUDE tplname --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;tplname&lt;/code&gt; - имя файла шаблона без расширения
Эта конструкция будет заменена на содержимое указанного файла на этапе загрузки файла перед компиляцией. Глубина включений не ограничена.&lt;/p&gt;
&lt;h4 id="переменные-шаблонов-верхнего-уровня"&gt;Переменные шаблонов верхнего уровня&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{VARIABLE_NAME}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Во время компиляции эти метки будут заменены на значения, заданные с помощью функции &lt;code&gt;Template::set_vars()&lt;/code&gt;. Пример использования:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;set_vars&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="s1"&gt;&amp;#39;VARIABLE_NAME&amp;#39;&lt;/span&gt;  &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;Hello world!&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="циклы-и-переменные-циклов"&gt;Циклы и переменные циклов&lt;/h4&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- BEGIN loop1 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{loop1.VAR1}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- BEGIN loop1.loop2 --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;{loop1.loop2.VAR1}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- END --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c"&gt;&amp;lt;!-- END --&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Циклы позволяют повторять один и тот же фрагмент шаблона по несколько раз, подставляя на места переменных циклов различные данные. Циклы могут быть вложены друг в друга и тогда имя вложенного цикла должно начинаться с имени родительского и отделяться от него точкой. Вложенность циклов не ограничена.
Переменные циклов при каждой итерации могут принимать разные значения и их имя должно начинаться с имени цикла и отделяться от него точкой. Переменные цикла не могут использоваться вне цикла, но в то же время переменные верхнего уровня могут использоваться внутри циклов (их значения при этом останутся постоянными).&lt;/p&gt;
&lt;p&gt;Вот и все :)
В будущем планируется еще добавить условные блоки, но пока это не реализовано.&lt;/p&gt;
&lt;p&gt;PS/Offtopic:
Подробная статья о том, как правильно оценивать стоимость продвижения с помощью &lt;a href="http://mexboy.ru/?p=27"&gt;Яззл&lt;/a&gt;а.
Профессиональная &lt;a href="http://artgk-cms.ru"&gt;система управления сайтом&lt;/a&gt; с широким спектром решаемых при ее помощи задач.&lt;/p&gt;</description>
    </item>
    <item>
      <title>#2 Обзор закладок или Воскресная чепуха.</title>
      <link>https://nevkontakte.com/2008/2-Overview-of-bookmarks-or-Sunday-nonsense.html</link>
      <pubDate>Tue, 26 Aug 2008 21:14:44 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/2-Overview-of-bookmarks-or-Sunday-nonsense.html</guid>
      <description>&lt;p&gt;Да, я в курсе, что сегодня вторник :-) Но из-за того, что какие-то умники с&lt;del&gt;пи&lt;/del&gt;воровали из подъезда свитч я на выходные остался без интернета и запланированный пост написать не смог. Ну ладно, покончим с лирикой.&lt;/p&gt;
&lt;p&gt;В &lt;a href="https://nevkontakte.com/2008/1-Overview-of-bookmarks-or-that-I-have-seen-interesting.html"&gt;предыдущем обзоре&lt;/a&gt; я уже опубликовал несколько занятных ссылок и сегодня опубликую еще. Приступим.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://wasting-money.blogspot.com/2008/08/wasting-money-rus.html"&gt;SEO для новичков&lt;/a&gt;
Аудиокурс по основам SEO. Новичкам вроде таких, каким был я пол года назад будет занятно послушать.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.masterwebs.ru/index.php?showforum=52"&gt;SEO школа&lt;/a&gt;
Еще один курс, рассчитанный на новичков. Единственный недостаток - лекции публикуются в закрытом разделе и набор заявок уже завершен. К счастью, я успел вовремя заявку подать и доступ к лекциям получить успел. Опоздавших могу обнадежить тем, что автор лекций планирует на их основе сделать онлайн-книгу и выложить ее в свободный доступ.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://skypeseo.ru/"&gt;Еженедельные SEO конференции&lt;/a&gt;
Я уже писал об этом ресурсе в своем обзоре RSS лент и напишу еще раз. Собственно, это сайт еженедельных SEO конференций, проходящих через skype. Для общего образования бывает полезно послушать. Иногда палятся темы, но это редко-редко, и в записи они не попадают, так что настоятельно рекомендую слушать в живую.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://htaccess.net.ru/"&gt;.htaccess по-русски&lt;/a&gt;
Несмотря на неказистый дизайн и бесплатный домен, этот сайт содержит много полезных статей по использованию .htaccess в частности и настройке Apache вцелом.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.sqlbuddy.com/"&gt;SQL Buddy&lt;/a&gt;
Это своего рода дополнение к моему посту о &lt;a href="https://nevkontakte.com/2008/phpMyAdmin-2-11-8-1-0-Russian-Lite.html"&gt;phpMyAdmin Russian Lite&lt;/a&gt;.
Очень легкий и в то же время функциональный веб-интерфейс для MySQL. Единственным серьезным недостатков является плохая работа с кодировкой cp1251, но в свете повального перехода на юникод это не так уж страшно.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://bablo.biz/%d0%ba%d0%b0%d0%ba-%d0%bf%d0%be%d0%bb%d1%83%d1%87%d0%b8%d1%82%d1%8c-%d0%bc%d0%b0%d0%ba%d1%81%d0%b8%d0%bc%d0%b0%d0%bb%d1%8c%d0%bd%d1%8b%d0%b9-%d0%b4%d0%be%d1%85%d0%be%d0%b4-%d0%be%d1%82-%d0%bf%d1%80/"&gt;Одесский НеБомж спалил вкусную тему&lt;/a&gt;. Для кого-то идея уже баян, а для кого-то станет настоящим открытием. В любом случае, стоит принят к сведению.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://seoshnic.ru/2008/08/palyu-temu-ssylka-pr-3-tic-10-za-001-bez-problemm/"&gt;Сквозная ссылка PR-3 ТИЦ-10 за 0.01$&lt;/a&gt;
Весьма заманчивое предложение, не так ли? И почти на халяву ;-)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>Докуметнация - это просто. PHP Doc Writer</title>
      <link>https://nevkontakte.com/2008/Dokumentacija-is-simple-PHP-Doc-Writer.html</link>
      <pubDate>Mon, 25 Aug 2008 18:25:44 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Dokumentacija-is-simple-PHP-Doc-Writer.html</guid>
      <description>&lt;p&gt;Любой программист рано или поздно сталкивается с необходимостью документирования своего кода, особенно если он пишет opensource проект или работает в команде.&lt;/p&gt;
&lt;p&gt;К сожалению (или к счастью?) сия проблема не минула и меня. В процессе написания документации к проекту Web Update я довольно быстро устал копаться в коде, выискивая каждую функцию и описывая ее.&lt;/p&gt;
&lt;p&gt;Поразмыслив за кружечкой кофе я пришел к выводу, что неплохо бы написать какую-нибудь программу, которая будет сама извлекать определения функций из исходного кода и предоставлять удобный интерфейс редактирования описаний к этим функциям.&lt;/p&gt;
&lt;p&gt;Результатом стал скрипт &lt;a href="https://web.archive.org/web/http://nevkontakte.org.ru/docwriter/index.php"&gt;PHP Doc Writer&lt;/a&gt;.
Этот скрипт работает со скриптами php и способен генерировать документацию в формате, совместимом с &lt;a href="http://www.phpdoc.org/"&gt;phpDocumentator&lt;/a&gt;.
На сегодняшний день он может работать только с документированием классов и функций, но в будущем я планирую расширить возможности, а так же добавить возможность работы с несколькими файлами одновременно.&lt;/p&gt;
&lt;p&gt;Регистрации для работы с Doc Writer&amp;rsquo;ом не требуется, единственное, что необходимо - это включенные cookies. Так как вся информация о документации хранится в данных сессии, поэтому потеряв сессию, вы теряете все сделанные правки, если не успели их скачать, конечно.&lt;/p&gt;
&lt;p&gt;Постовой:
История и современность рока в личном блоге Евгения Штольца &lt;a href="https://web.archive.org/web/20090216221309/http://timerider.ru/"&gt;Рок радио, рок музыка, рок&lt;/a&gt;
А так же рекомендую почитать &lt;a href="https://web.archive.org/web/20080913171449/http://streha.ru/"&gt;seo блог&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>phpMyAdmin 2.11.8.1.0 Russian Lite</title>
      <link>https://nevkontakte.com/2008/phpMyAdmin-2-11-8-1-0-Russian-Lite.html</link>
      <pubDate>Fri, 22 Aug 2008 16:04:32 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/phpMyAdmin-2-11-8-1-0-Russian-Lite.html</guid>
      <description>&lt;p&gt;Сегодня мне понадобилось быстро развернуть у одного из клиентов работающий phpMyAdmin и чтобы впредь не тратить лишнее время на скачивание и закачивание довольно толстого дистрибутива я создал урезанный пакет, включающий только жизненно необходимые файлы.
И так, отличия от оригинального пакета:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Включены только русская и английские локализации&lt;/li&gt;
&lt;li&gt;Убрана сопутствующая документация&lt;/li&gt;
&lt;li&gt;Убран скин &amp;ldquo;darkblue_orange&amp;rdquo;, оставлен лишь дефолтный скин&lt;/li&gt;
&lt;li&gt;Убраны все сопутствующие скрипты, кроме инсталлятора&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для его эта сборка была сделана? Единственная идея сборки - убрать все лишнее и ускорить процесс развертывания phpMyAdmin на хосте. Какой смысл загружать документацию, если мы и так умеем им пользоваться? Или для чего нам тестирующие скрипты, если мы ими вообще ни разу не пользовались? Именно по такому принципу и проходило усечение.&lt;/p&gt;
&lt;p&gt;Ну и напоследок немного статистики (в скобках приведены показатели стандартного дистрибутива):&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Размер архива bz2 - 1.3 Mb (3.0 Mb)&lt;/li&gt;
&lt;li&gt;После распаковки - 3.8 Mb (12.3 Mb)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Скачать: &lt;a href="https://nevkontakte.com/files/phpMyAdmin-2.11.8.1-ru-en.tar.bz2"&gt;phpMyAdmin-2.11.8.1-ru-en.tar.bz2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;PS. Студия, занимающаяся &lt;a href="http://selivanov.com.ua/"&gt;продвижением сайтов&lt;/a&gt; более 5 лет. Так же на сайте есть раздел статей, содержащих немного полезной информации.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ап Яши, Гитара и полезные ссылки.</title>
      <link>https://nevkontakte.com/2008/AP-Yasha-Guitar-and-useful-links.html</link>
      <pubDate>Thu, 21 Aug 2008 18:31:12 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/AP-Yasha-Guitar-and-useful-links.html</guid>
      <description>&lt;p&gt;Вот опять случился ап у Яндекса. Случиться-то случился, но меня он почти не затронул. Единственная подвижка - снялся с одного сайта фильтр в 10 страниц, о котором я уже &lt;a href="https://nevkontakte.com/2008/Yandex-was-thrown-out-of-the-index.html"&gt;писал&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Теперь опубликую несколько ссылок, которые мне попались за последнее время:
&lt;a href="http://www.rightscripts.com/pagerank/"&gt;Массовый вывод PR страниц сайта&lt;/a&gt;
Блог &lt;a href="http://www.googlization.org.ru/"&gt;Гуглизация&lt;/a&gt;&lt;a href="http://www.xml-sitemaps.com/"&gt;Генерация карт сайта для Google и Яндекса&lt;/a&gt;&lt;a href="http://startrekguide.com/"&gt;Академия phpBB (англ)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;И на последок - сегодня я наконец-то купил себе электрогитару с комбиком.
Гитарой стала красавица B.C. Rich Masterpiece:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/bich_masterpiece_red.jpg" alt="B.C. Rich Masterpiece"&gt;&lt;/p&gt;
&lt;p&gt;А комбиком недорогой, но качественный Kustom Dual 30RC:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/kustom.jpg" alt="Kustom Dual 30RC"&gt;&lt;/p&gt;
&lt;p&gt;Держитесь, соседи!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Что я читаю: избранные RSS ленты.</title>
      <link>https://nevkontakte.com/2008/What-I-read-selected-RSS-feed.html</link>
      <pubDate>Sun, 17 Aug 2008 15:01:15 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/What-I-read-selected-RSS-feed.html</guid>
      <description>&lt;p&gt;&lt;strong&gt;SEO &amp;amp; Манимейкинг&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://company.yandex.ru/blog/index.rss"&gt;RSS&lt;/a&gt; &lt;a href="http://company.yandex.ru/blog/"&gt;Блог Яндекса&lt;/a&gt; - без комментариев.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://webmaster.ya.ru/rss/posts.xml"&gt;RSS&lt;/a&gt; &lt;a href="http://webmaster.ya.ru/"&gt;Яндекс.Поиск&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/deepseo?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://www.deepseo.ru/"&gt;DeepSEO.ru&lt;/a&gt; - основная тема постинга - это Google и AdSense.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/mpbseo/ITkO?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://mpbseo.ru/"&gt;On-line дневник оптимизатора&lt;/a&gt; - дневник Московского Полубомжа. Без комментариев.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/profithunter/JUQu?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://www.profithunter.ru/"&gt;Profit Hunter&lt;/a&gt; - много разнообразных и толковых статей на тему манимейкинга.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/SeoMoney?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://seomoney.org.ua/"&gt;SEO &amp;amp; Money&lt;/a&gt; - обновляется блог не слишком часто, но периодически проскакивают занятные посты.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/SeoWriter?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://www.seowriter.ru/"&gt;SEO writer - Личный помощник в SEO!&lt;/a&gt; - интересный блог, специализирующийся в основном на медийной оптимизации.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://skypeseo.ru/?feed=rss2"&gt;RSS&lt;/a&gt; &lt;a href="http://skypeseo.ru/"&gt;SkypeSEO.ru - сайт о еженедельных SEO-конференциях&lt;/a&gt; - название говорит само за себя.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://seom.info/feed/"&gt;RSS&lt;/a&gt; &lt;a href="http://seom.info/"&gt;SEOM.info&lt;/a&gt; - здесь регулярно выкладываются записи конференций с предыдущего сайта.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://seo-theory.com/wordpress/feed/"&gt;RSS&lt;/a&gt; &lt;a href="http://www.seo-theory.com/wordpress"&gt;SEO Theory - SEO Theory and Analysis Blog&lt;/a&gt; - англоязычный блог о SEO.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/Webmoon?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://webmoon.ru/"&gt;WebMoon&lt;/a&gt; - хороший блог от интересного автора.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/rav4click?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://rav4click.ru/"&gt;Бомж без колес&lt;/a&gt; - отличный представитель клана бомжей.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/ruhomeless?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://homelerss.org/"&gt;Бомжелента 3.0&lt;/a&gt; - посты с блогов разных бомжей в одном месте.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/rmm"&gt;RSS&lt;/a&gt; &lt;a href="http://disdain.ru/"&gt;Презренный Манимейкинг&lt;/a&gt; - толково и понятно пишет о раскрутке и монетизации.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/brokenbrake"&gt;RSS&lt;/a&gt; &lt;a href="http://brokenbrake.biz/"&gt;Сука тормоzzz&lt;/a&gt; - так же без комментариев.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Веб-программирование&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/Alexf?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://alexf.name/"&gt;Alexf: блог где палят темы&lt;/a&gt; - много интересного с точки зрения веб-программирования&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lasto.com/blog/rss.php"&gt;RSS&lt;/a&gt; &lt;a href="http://lasto.com/blog/"&gt;Lasto Blog&lt;/a&gt; - без комментариев. Действительно Мастер.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.phpbb.com/blog/feed/"&gt;RSS&lt;/a&gt; &lt;a href="http://www.phpbb.com/blog"&gt;phpBB&lt;/a&gt; - Блог официального сайта движка phpBB.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/zhilinsky?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://zhilinsky.ru/"&gt;Блог интернет-разработчика&lt;/a&gt; - долго колебался, куда отнести этот блог. С одной стороны, это seo, с другой - подход исключительно программистский.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://blog.glebkalinin.ru/feed/"&gt;RSS&lt;/a&gt; &lt;a href="http://blog.glebkalinin.ru/"&gt;Глеб Калинин&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Разное&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/anycolor"&gt;RSS&lt;/a&gt; &lt;a href="http://malkin.com.ua/"&gt;Блог про фриланс и интернет. Ведет Станислав Малкин.&lt;/a&gt; - интересный блог о фрилансе.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/web20me?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://www.web2me.ru/"&gt;Вебдванольные заметки&lt;/a&gt; - основное содержимое - обзоры всевозможных сервисов.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://feeds.feedburner.com/debianletters?format=xml"&gt;RSS&lt;/a&gt; &lt;a href="http://mydebianblog.blogspot.com/"&gt;Записки дебианщика&lt;/a&gt; - масса полезных статей про Linux. Несмотря на то, что сам пользуюсь openSUSE, нахожу там много полезного и интересного.&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Как работать эффективно.</title>
      <link>https://nevkontakte.com/2008/To-work-effectively.html</link>
      <pubDate>Sun, 17 Aug 2008 12:09:47 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/To-work-effectively.html</guid>
      <description>&lt;p&gt;Последнее время мне стало не хватать дня, чтобы успеть все, что было задумано или пришло в голову по ходу дела. Такова оборотная сторона любого интересного дела - чем дальше в лес, тем больше идей. Дошло до того, что, постоянно отвлекаясь туда на пять минут, сюда на две, я перестал успевать вообще что бы то ни было. Решение пришло из прошлого: в детстве я всегда требовал, чтобы мне с утра выдали список дел, лежащих на мне сегодня, выполнив которые, я смогу заниматься чем пожелаю. Иными словами, обычный TODO лист.&lt;/p&gt;
&lt;p&gt;Честно говоря, я даже не мог предположить, насколько эффективным это окажется. Тратя пять минут с утра на составление списка и дополняя его по ходу дела я стал успевать в разы больше. Почему? Наверное, потому что вместо того, чтобы отвлекаться на каждую мелочь, я ее просто добавляю в todo-лист и сосредотачиваюсь на текущей задаче.&lt;/p&gt;
&lt;p&gt;И так, как же организовать эффективный todo-лист? Несколько советов из личного опыта.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Нарежьте несколько десятков небольших листочков 10х10 см, не более и всегда держите их вместе с ручкой поблизости от рабочего места. Если вам что-то придет в голову всегда можно будет их записать и обдумать на досуге.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Каждое утро составляйте свежий todo-лист. Вчерашние помарки, сделанные дела и прочий мертвый груз - зачем он вам?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Держите туду-лист перед глазами - прилепите на уголок монитора, к полке над столом, карандашнице или в специальную подставку - главное, чтобы вы в любой момент могли глянуть, что у вас там по плану.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Не добавляйте в список мелкие дела, которые вы не забудете и так, но обязательно добавляйте все важные дела - такой подход позволит вам хорошо ориентироваться в запланированных задачах и правильно распределить время.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Расставляйте дела в таком порядке, в каком их намерены делать и придерживайтесь единожды намеченного. Частые перестановки внесут лишнюю путаницу и отнимут драгоценное время.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Наиболее важные/сложные дела ставьте в начало списка - к вечеру у вас просто не останется сил на них или не хватит времени.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Не забывайте про перерывы :) Нет ничего худшего, чем непрерывная работа - это &lt;del&gt;отупляет&lt;/del&gt; чрезмерно утомляет.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Надеюсь, эти советы помогут вам увеличить прибыль за единицу времени :)&lt;/p&gt;
&lt;p&gt;Напоследок, фотография моей &amp;ldquo;тудушницы&amp;rdquo; - очень удобная вещь, всем рекомендую.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/imgp4081.jpg" alt="Тудушница"&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>#1 Обзор закладок или что я видел интересного.</title>
      <link>https://nevkontakte.com/2008/1-Overview-of-bookmarks-or-that-I-have-seen-interesting.html</link>
      <pubDate>Thu, 14 Aug 2008 13:22:44 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/1-Overview-of-bookmarks-or-that-I-have-seen-interesting.html</guid>
      <description>&lt;p&gt;Последнее время я читаю довольно много интересной и полезной информацией и кое-что даже кладу себе в закладки. При этом количество закладок растет устрашающими темпами и раз уж так выходит, то не грех и с прочим честным людом находками поделиться. не знаю, насколько регулярно я буду это делать, но по мере появления материала буду его сортировать и публиковать.&lt;/p&gt;
&lt;p&gt;И так, поехали.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;О блоге &lt;a href="http://mpbseo.ru/"&gt;Московского Полубомжа&lt;/a&gt; не знает только ленивый.
Между тем, он проводит очень заманчивую &lt;a href="http://mpbseo.ru/?p=235"&gt;акцию&lt;/a&gt;, которая проходит при поддержке небезызвестного &lt;a href="http://glavmed.com/"&gt;Главмеда (крупнейшая партнерка в области фарма-seo)&lt;/a&gt;, &lt;a href="http://peakclick.com/"&gt;PeakClick - так же очень выгодная PayPer Click партнерка, замечательная хорошей отдачей&lt;/a&gt; и &lt;a href="http://jonn22.com/"&gt;Jonn22 - производителя самого разнообразного софта для манимейкеров&lt;/a&gt;.
Что в ней интересного? Во-первых, сама по себе возможность поработать с такими крупными партнерами - хороший шанс обеспечить своему кошельку достойное содержимое, а во вторых, очень лакомы приз в $5000 и неоднократно упомянутые дополнительные призы.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://tutorial.semonitor.ru/"&gt;Раскрутка и оптимизация сайта - краткий курс&lt;/a&gt;.
Здесь довльно подробно и доступно для новичков описаны различные оспекты оптимизации сайтов и в качестве книжки на ночь эта страница может быть очень полезной. Для людей, у которых seo не является профильным занятием, но имеющих свой сайт этот документ просто незаменим.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://mpbseo.ru/?p=268"&gt;Как заработать на Smotri.Ru&lt;/a&gt;
Все тот же Полубомж рассказываем о непыльном способе заколачивания денег. Правда, для того чтобы действительно зарабатывать хорошие деньги надо иметь творческую жилку и ориентироваться в актуальных темах.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://www.fpublisher.ru/documentation/javascript_doc/"&gt;Документация по JavaScript&lt;/a&gt;
Очень и очень подробная документация по JavaScript. Пару лет назад я посвятил много времени поиску подробного справочника, но результаты были довольно скромны и все равно частенько приходилось подолгу гуглить, чтобы найти описание нужной функции или атрибута. Можете себе представить мою радость, когда я совершенно случайно наткнулся на этот сайт.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="http://arn.ro/taxonomy/term/18"&gt;Уникальный Человек о сателлитах&lt;/a&gt;
Если вы еще не пробовали себя в сателлитостроении, но хотите начать, то эта серия постов будет вам полезна и предупредит многие обидные ошибки.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На этом, наверное, на сегодня закруглюсь, ибо дел еще немеренно&amp;hellip;&lt;/p&gt;
&lt;p&gt;Всем успешной мохнатизации!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Апдейт тИЦ &amp; выдачи Яндекса 12.08.08.</title>
      <link>https://nevkontakte.com/2008/Update-TIC-issue-Yandex-12-08-08.html</link>
      <pubDate>Tue, 12 Aug 2008 21:40:59 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Update-TIC-issue-Yandex-12-08-08.html</guid>
      <description>&lt;p&gt;Что-то зачастили в последнее время апы у яндекса не прошло и двух недель с последнего апа от 29.07.08 и вот вновь. Да и не просто ап тиц, но и ап выдачи Яндекса, что не может не радовать.&lt;/p&gt;
&lt;p&gt;Надо сказать и то, и другой событие в целом для меня стали позитивны. В ходе апа выдачи исчез тот лимит в 10 страниц, о котором я &lt;a href="https://nevkontakte.com/2008/Yandex-was-thrown-out-of-the-index.html"&gt;писал&lt;/a&gt; раньше.&lt;/p&gt;
&lt;p&gt;Ап тица тоже порадовал: у трех моих сайтов тиц подрос на 10 и лишь у одного упал на столько же. Так же не так давно мой блог попал в DMOZ, что тоже должно дать некоторые бонусы.&lt;/p&gt;
&lt;p&gt;Ну и чтобы пост не был совсем уж бесполезным поделюсь ссылкой на &lt;a href="http://tools.promosite.ru/"&gt;правильный детектор апдейтов Яндекса&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Удачных вам апдейтов!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Бесплатные шаблоны для сателлитов</title>
      <link>https://nevkontakte.com/2008/Free-patterns-for-satellites.html</link>
      <pubDate>Sun, 10 Aug 2008 23:27:17 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Free-patterns-for-satellites.html</guid>
      <description>&lt;p&gt;Занимаясь множественным созданием сайтов для мохнатизации собственного кошелька невольно сталкиваешься с необходимостью добывания дизайна для очередного экземпляра веб-мастерского искусства. И чем более долгая жизнь предписывается говносайту, тем тщательней приходится к этому подходить.&lt;/p&gt;
&lt;p&gt;Те, кто делают эти сайты на популярных движках типа Вордпресса этой проблемы не имеют благодаря огромной базе готовых шаблонов, имеющихся в интернете. Но как быть тем, кто пользуется собственными движками или просто не очень популярными, но в чем-то удобными? Решение проблемы состоит в поиске баз готовых дизайнов, не ориентированных на какой-то конкретный движок и последующая адаптация приглянувшихся.&lt;/p&gt;
&lt;p&gt;Чем хорош этот подход? Вам не нужно часами сидеть с фотошопом, придумывая что-то свое или ковыряться в многочисленных файлах шаблона другого движка, пытаясь портировать его на свой. Преимущество таких дизайнов, что они как правило сосредоточены в одном html файле + сопутствующие css и картинки, структура страницы предельно проста и прокомментирована и зачастую прилагаются исходники графических элементов.&lt;/p&gt;
&lt;p&gt;Где же их можно взять? Вот небольшой список сайтов, которыми пользуюсь я:
&lt;a href="http://www.templateworld.com/free_templates.html"&gt;Template World&lt;/a&gt;&lt;a href="http://www.oswd.org/"&gt;Open Source Web Design&lt;/a&gt;&lt;a href="http://www.freecsstemplates.org/"&gt;Free CSS Templates&lt;/a&gt;&lt;a href="http://www.zymic.com/free-templates"&gt;Zymic.com&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Яндекс выбросил из индекса.</title>
      <link>https://nevkontakte.com/2008/Yandex-was-thrown-out-of-the-index.html</link>
      <pubDate>Thu, 07 Aug 2008 19:01:59 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Yandex-was-thrown-out-of-the-index.html</guid>
      <description>&lt;p&gt;Два дня назад обнаружил, что Яндекс неожиданно вышвырнул большую часть страниц моего блога из индекса, оставив лишь 10, да и то не самых лучших. С чем это связано я пока не совсем понял, тем более, что аналогичная ситуация сложилась и с еще одним моим сайтом, у которого в индексе остались те же 10 страниц.
Интересно, что раскручивал я их изначально по-разному и строго &amp;ldquo;белыми&amp;rdquo; способами, но такой вылет с ними случился одновременно.&lt;/p&gt;
&lt;p&gt;Пока я буду разбираться, с чем такой фокус связан, проведу небольшой эксперимент, который уже давно хотел устроить, но ленился. Заключается он в генерации карты сайта и наблюдении за процессом индексирования. Тем более, что в условиях отсутствия большей части страниц в индексе быстрая индексация мне совсем не помешает.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Параноик Яндекс.</title>
      <link>https://nevkontakte.com/2008/Paranoid-Yandex.html</link>
      <pubDate>Wed, 06 Aug 2008 14:11:59 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Paranoid-Yandex.html</guid>
      <description>&lt;p&gt;Видать, нынче модно у поисковых систем защищаться от DDOS атак путем блокировки IP, с которых совершается много запросов. Первым я это заметил у Гугля, а сегодня и у Яндекса. При этом, к сожалению, страдают в основном простые пользователи локальных сетей, у которых один внешний IP на несколько сотен/тысяч машин. И если Гугль еще предлагает ввести капчу и пользоваться дальше, то Яндекс тупо говорит: 403 - идите на фиг.&lt;/p&gt;
&lt;p&gt;В прочем, причиной поста послужил другой факт. В конце длинного сообщения, что я, злой и завирусованный подлец пытаюсь завалить несчастный Яндекс, есть интересная приписка:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Рекомендуем вам проверить компьютер на вирусы или обратиться к администратору вашего компьютера или вашей сети. Для проверки компьютера вы можете воспользоваться бесплатной программой Я.Онлайн с антивирусной защитой Касперского, скачать которую можно с сайта &lt;a href="http://online.yandex.ru/?from=kaspersky"&gt;Я.Онлайна&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Ради любопытства я кликнул на ссылочку и&amp;hellip; 403!!! - иди лечись от вирусов.&lt;/p&gt;
&lt;p&gt;&amp;ldquo;Вот и иди после этого к свету.&amp;rdquo; (с) Роджер Желязны.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Robomap Project: подводим итоги.</title>
      <link>https://nevkontakte.com/2008/Robomap-Project-taking-stock.html</link>
      <pubDate>Sat, 02 Aug 2008 16:40:12 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Robomap-Project-taking-stock.html</guid>
      <description>&lt;p&gt;Пожалуй, пришло время подвести результаты проекта RoboMap. За прошедшие три недели была собрана довольно занимательная статистика о поведении различных поисковиков и теперь я попробую ее проанализировать.&lt;/p&gt;
&lt;p&gt;Бесспорным лидером оказался &lt;strong&gt;Google&lt;/strong&gt;. С самого начала расковыряв большую часть видов ссылок, он удержал лидерство до конца. Так же интересно заметить, что он подгрузил CSS, использованные на странице. Напрашивается вывод, что это ему необходимо для проверки на скрытые блоки текста и прочие приемы черной оптимизации, основанные на CSS.&lt;/p&gt;
&lt;p&gt;Как ни странно, второе место занял &lt;strong&gt;MSN/Live&lt;/strong&gt; от великой корпорации Майкрософт. Он сумел опознать php-редирект и js-ссылку при помощи window.open(). Тем не менее, налицо неспешность и полное отсутствие любопытства к обновлению контента. В частности, сборщик статистики не зафиксировал его обращения к главной странице, а так же проверок на обновления.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yandex&lt;/strong&gt;, &lt;strong&gt;Rambler&lt;/strong&gt; и &lt;strong&gt;Yahoo&lt;/strong&gt; поделили третье место: прошли только по редиректу и на том успокоились. В то же время, все они повели себя по-разному. Вкратце обрисую ситуацию по каждому из них.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yandex&lt;/strong&gt; выделился своим собственным вариантом интерпретации robots.txt. Страницы со статистикой были намеренно запрещены для индексации, но директивы Disallow шли после &amp;ldquo;Allow: /&amp;rdquo;. Ну и согласно мнению Яши, решение о возможности индексации страницы надо принимать по первому правилу, совпадающему с адресом. В итоге статистика попала в индекс. CSS он вроде как не грузил.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rambler&lt;/strong&gt; вообще ничего интересного о себе не рассказал. Впрочем в связи с покупкой Рамблера Гуглем, это уже не слишком актуально.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yahoo&lt;/strong&gt; загрузил только одну CSS из двух. С какой целью он это сделал, не совсем понятно, но есть подозрение, что он догружает их каким-то особым ботом, который сборщиком статистики не определился.&lt;/p&gt;
&lt;p&gt;Вот такие вот результаты&amp;hellip; Если у кого-то появится желание провести подобное исследование, я могу опубликовать исходный код проекта.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RoboMap Project: статистика за 3 дня.</title>
      <link>https://nevkontakte.com/2008/RoboMap-Project-statistics-for-3-days.html</link>
      <pubDate>Tue, 15 Jul 2008 14:57:20 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/RoboMap-Project-statistics-for-3-days.html</guid>
      <description>&lt;p&gt;С момента предыдущего отчета картина изменилась не слишком радикально.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Google&lt;/strong&gt; ничем новым не порадовал, успокоившись на достигнутом еще в первые сутки так ни разу и не зашел с тех пор.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Yahoo!&lt;/strong&gt; несколько раз проверял уже проиндексированные страницы, но ничего нового не нашел.
Все прочие поисковики оказались слегка подинамичнее.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Рамблер&lt;/strong&gt; таки добрался до редиректовой странички, но JS ссылки ему оказались не по зубам.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Яндекс&lt;/strong&gt; со свойственной ему неспешностью проиндексировал только главную, чем и ограничился, а &lt;strong&gt;творение Microsoft&lt;/strong&gt; вообще отличилось - скачало только &lt;code&gt;robots.txt&lt;/code&gt; и ушло.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Покажи свою берлогу!</title>
      <link>https://nevkontakte.com/2008/Show-your-lair.html</link>
      <pubDate>Sun, 13 Jul 2008 15:02:27 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Show-your-lair.html</guid>
      <description>&lt;p&gt;&lt;a href="http://zarabotai.lv/ru/blog/"&gt;Дмитрий Ветров&lt;/a&gt; проводит акцию &amp;ldquo;&lt;a href="http://zarabotai.lv/ru/blog/pokazhi-svoyu-berlogu/"&gt;Покажи свою берлогу&lt;/a&gt;&amp;rdquo;&lt;/p&gt;
&lt;p&gt;После некоторых колебаний, я решил присоединиться. Тем более, что у меня в фотоархиве завалялась чудесная фотка на эту тему:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://nevkontakte.com/files/imgp3107_ed.jpg" alt="Берлога"&gt;&lt;/p&gt;
&lt;p&gt;Конечно, обычно все не так запущено, но бардака всегда хватает :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>RoboMap Project: первые результаты.</title>
      <link>https://nevkontakte.com/2008/RoboMap-Project-first-results.html</link>
      <pubDate>Sat, 12 Jul 2008 16:20:55 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/RoboMap-Project-first-results.html</guid>
      <description>&lt;p&gt;Не прошло и суток, а первые результаты уже появились.&lt;/p&gt;
&lt;p&gt;Наибольшую активность проявил Google, который нашел почти все страницы из тех, что были созданы. В частности, он продемонстрировал отличную способность отыскивать ссылки в JavaScript и следовать редиректам.
Не опознал он текстовую ссылку, переход JavaScript, приделанный к тегу , обычные JS переходы с помощью &lt;code&gt;window.open()&lt;/code&gt; и &lt;code&gt;document.location.href&lt;/code&gt; и ссылку в &lt;code&gt;robots.txt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Вторым с изрядным опозданием идет Rambler. Он проиндексировал главную страницу и и сделал вялую попытку пройти по редиректу, но до цели так и не дошел.&lt;/p&gt;
&lt;p&gt;Yahoo ограничился просмотром главной страницы и дальше не пошел.&lt;/p&gt;
&lt;p&gt;Самым ленивым оказался Яндекс. Он посмотрел лишь содержимое robots.txt в момент отправки формы добавления и на этом успокоился.&lt;/p&gt;
&lt;p&gt;Для большей наглядности я создал два скрипта, отображающих текущую статистику по поисковикам:
&lt;a href="https://web.archive.org/web/2008/http://robomap.nevkontakte.org.ru/stat.php"&gt;http://robomap.nevkontakte.org.ru/stat.php&lt;/a&gt; - список посещенных поисковиками страниц.
&lt;a href="https://web.archive.org/web/2008/http://robomap.nevkontakte.org.ru/pages.php"&gt;http://robomap.nevkontakte.org.ru/pages.php&lt;/a&gt; - подробный журнал посещений поисковиками.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RoboMap Project: детальное исследование индексации поисковиками.</title>
      <link>https://nevkontakte.com/2008/RoboMap-Project-detailed-study-of-search-engine-indexing.html</link>
      <pubDate>Fri, 11 Jul 2008 18:11:47 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/RoboMap-Project-detailed-study-of-search-engine-indexing.html</guid>
      <description>&lt;p&gt;На разных SEO форумах неоднократно возникали обсуждения, касающиеся того, какие ссылки поисковики индексируют, а какие - нет. Тем не менее, однозначных выводов нигде так и не было сделано. Чтобы в деталях разобраться, какие поисковики и как индексируют ссылки я запустил небольшой проект под названием &lt;a href="https://web.archive.org/web/2008/http://robomap.nevkontakte.org.ru/"&gt;RoboMap&lt;/a&gt;.
Ниже цитирую описание с его главной страницы:&lt;/p&gt;
&lt;p&gt;Основная цель проекта RoboMap - это исследовать тонкости индексирования сайта поисковиками и влияние файла &lt;code&gt;robots.txt&lt;/code&gt; на этот процесс.&lt;/p&gt;
&lt;p&gt;В частности, будет выяснено, как поисковики обрабатывают инструкции Allow в robots.txt и разные типы ссылок. Для этого был создан набор страниц, на каждую из которых ссылается только один тип ссылок. Вот список разновидностей ссылок, которые будут исследоваться:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Текстовая ссылка&lt;/li&gt;
&lt;li&gt;Простая JavaScript ссылка через &lt;code&gt;window.open()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Простая JavaScript ссылка через &lt;code&gt;document.location.href&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;JavaScript ссылка с url в контексте вызова: &lt;code&gt;my_open_function('http://mysite.ru/page.html')&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;JavaScript ссылка с url вне контекста вызова: &lt;code&gt;open_my_site()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;JavaScript редирект, не ассоциированный с тегом &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;HTTP Redirect.&lt;/li&gt;
&lt;li&gt;Директива Allow в файле &lt;code&gt;robots.txt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Анализироваться будут наиболее популярные в рунете поисковики:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Яндекс&lt;/li&gt;
&lt;li&gt;Google&lt;/li&gt;
&lt;li&gt;Рамблер&lt;/li&gt;
&lt;li&gt;MSN/Live&lt;/li&gt;
&lt;li&gt;Yahoo&lt;/li&gt;
&lt;li&gt;Webalta&lt;/li&gt;
&lt;/ul&gt;</description>
    </item>
    <item>
      <title>Как зарегать красивый домен *.co.cc</title>
      <link>https://nevkontakte.com/2008/How-to-zaregat-beautiful-domain-co-cc.html</link>
      <pubDate>Wed, 09 Jul 2008 19:40:55 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/How-to-zaregat-beautiful-domain-co-cc.html</guid>
      <description>&lt;p&gt;Сегодня вообще довольно остро стоит &amp;ldquo;проблема&amp;rdquo; с бесплатными доменами - после введения RIPN&amp;rsquo;ом капчи при регистрации доменов *.net.ru, *.org.ru и *.pp.ru вкупе с лимитом 4 домена в час простые смертные практически лишились возможности получить домен в этих зонах. Поэтому где-то вскоре после этого памятного события в моду стали входить домены на кокосовых островах - *.co.cc. &lt;del&gt;Сами поселиться там не можем, так хоть доменов нарегаем&lt;/del&gt;.&lt;/p&gt;
&lt;p&gt;Фишка этой зоны в том, что стоимость домена определяется в зависимости от &amp;ldquo;красивости&amp;rdquo; домена. Поэтому домен &lt;code&gt;www.google.co.cc&lt;/code&gt; там стоит 2,464 бакса, а &lt;code&gt;www.sdgfsghfs.co.cc&lt;/code&gt; отдают на халяву. Некоторые даже &lt;a href="http://www.svoloch.info/2008/07/02/cocc-na-xalyavu/"&gt;заявляли&lt;/a&gt;, что зарегать что-нибудь толковое там нельзя в принципе и вообще все грустно&amp;hellip; Все это действительно печально, но хотелось бы получить какой-нибудь домен и при том бесплатно. К счастью, при достаточной изобретательности это вполне реально, благо, любую автоматику легко обмануть.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Первый из них:&lt;/strong&gt; если к какому-нибудь красивому слову добавить приставку &amp;ldquo;pro-&amp;rdquo; или &amp;ldquo;my-&amp;rdquo;, то он почти наверняка будет бесплатным. Из свободных на данный момент - &lt;code&gt;www.pro-film.co.cc,&lt;/code&gt; а пару дней назад я успешно зарегал &lt;code&gt;www.pro-blog.co.cc.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Второй:&lt;/strong&gt; Если между логическими частями интересующего нас домена добавить дефис, то он наверняка окажется бесплатным, или, в худшем случае, бдет стоить пару баксов, что, по сути, не деньги. В качестве примера - www.&lt;code&gt;mp-3.co.cc.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Третий:&lt;/strong&gt; Суффикс &amp;ldquo;2u&amp;rdquo; (расшифровывается как &amp;ldquo;to you&amp;rdquo; (англ. &amp;ldquo;тебе&amp;rdquo;)). Это вообще довольно странно при том, что они учли суффикс &amp;ldquo;4u&amp;rdquo; (&amp;ldquo;для тебя&amp;rdquo;). Но тем не менее домен &lt;code&gt;www.php2u.co.cc&lt;/code&gt; беслатен, хотя за &lt;code&gt;www.php4u.co.cc&lt;/code&gt; просят $12.
&lt;strong&gt;Четвертый:&lt;/strong&gt; Слова, написанные транслитом. Взять, например &lt;code&gt;www.spamim.co.cc.&lt;/code&gt; Шикарный домен, не правда ли? ;-)&lt;/p&gt;
&lt;p&gt;Ну и в качестве бонуса приведу небольшой список доменов, которые мне самому регить было лень, но показались интересными:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;www.my-homepage.co.cc&lt;/code&gt; - для какого-нибудь мелкого хостинга - самое то. Или для домашней странички.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.my-sin.co.cc&lt;/code&gt; - &amp;ldquo;Мой грех&amp;rdquo;. Просто находка для какого-нибудь гота. &lt;del&gt;или, извиняюсь, онлайн проституток&lt;/del&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.my-ad.co.cc&lt;/code&gt; - баннерная сеть, партнерки и прочая реклама&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.pro-spam.co.cc&lt;/code&gt; - без комментариев.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.pro-spamim.co.cc&lt;/code&gt; - вообще находка и &amp;ldquo;профессионально спамим&amp;rdquo; и &amp;ldquo;проспамим&amp;rdquo; в одном флаконе.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.splin-it.co.cc&lt;/code&gt; - для поклонников Сплинов :)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.live-free.co.cc&lt;/code&gt; - живите свободно, господа!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.metallica-fan.co.cc&lt;/code&gt; - металлисты, не зевайте!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.write-story.co.cc&lt;/code&gt; - сайт клуба писателей. Или продажа контента для сайтов, как выйдет.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.build-world.co.cc&lt;/code&gt; - а этот домен неплохо пошел бы для какой-нибудь онлайновки.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.uvizhu.co.cc&lt;/code&gt; - увижу своими глазами - самое то для журналистов.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.solntze.co.cc&lt;/code&gt; - астрономы следят за солнцем :S&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.sledim.co.cc&lt;/code&gt; - сайт Большого Брата. Который следит.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www.stsuko.co.cc&lt;/code&gt; - сцуко, домен :D&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;PS. Все упомянутые выше домены были свободными и бесплантыми на момент написания поста. И не моя вина, если кто-то зарегал их до вас ;)
PPS. А еще у них есть неплохая фишечка, предлагающая похожие домены. Там тоже можно нарыть кое-чего полезного.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Кросспостинг</title>
      <link>https://nevkontakte.com/2008/Crossposting.html</link>
      <pubDate>Wed, 09 Jul 2008 16:54:46 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Crossposting.html</guid>
      <description>&lt;p&gt;Почитав разные блоги других авторов, в частности, &lt;a href="http://www.ctrlc.ru/"&gt;Ctrl+C&lt;/a&gt;, проникся мыслью о пользе кросспостинга и решил настроить его и для своего блога. По ходу дела вылезла проблема - мало какие сервисы умели импортировать записи из RSS, хотя и дружили с ЖЖ. Казалось бы - в чем проблема: настроить ЖЖ как надо и все дела. Но Drupal не умеет корсспостить в ЖЖ (для вордпресса есть такой плагин, а для Друпала нету :( ), а ЖЖ не умеет самостоятельно импортировать что бы то ни было откуда бы то ни было. Положение спас multiply.com, который умел и RSS импортировать и экспортировать в ЖЖ. К сожалению, в ЖЖ почему-то записи добавились в обратном порядке и во все сервисы, синхронизирующиеся с ЖЖ тоже. Надеюсь, хоть последующие посты нормально добавятся.&lt;/p&gt;
&lt;p&gt;И так, вот список &amp;ldquo;зеркал&amp;rdquo; моего блога:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://nevkontakte.multiply.com/journal"&gt;http://nevkontakte.multiply.com/journal&lt;/a&gt;
&lt;a href="http://ne-v-kontakte.livejournal.com/"&gt;http://ne-v-kontakte.livejournal.com/&lt;/a&gt;
&lt;a href="http://live.cnews.ru/ne"&gt;http://live.cnews.ru/ne&lt;/a&gt;_v_kontakte/
&lt;a href="http://nevkontakte.blog.ru/"&gt;http://nevkontakte.blog.ru/&lt;/a&gt;
&lt;a href="http://nevkontakte.moskva.com/"&gt;http://nevkontakte.moskva.com/&lt;/a&gt;
&lt;a href="http://livehh.ru/za2"&gt;http://livehh.ru/za2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Еще вроде как настроил импорт на ливинтернет, но старые записи он не скушал&amp;hellip; Посмотрим, добавит ли новые.
&lt;a href="http://www.liveinternet.ru/community/2684512/"&gt;http://www.liveinternet.ru/community/2684512/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Палю тему: Google Cache Browser</title>
      <link>https://nevkontakte.com/2008/PAL-topic-Google-Cache-Browser.html</link>
      <pubDate>Tue, 08 Jul 2008 13:13:52 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/PAL-topic-Google-Cache-Browser.html</guid>
      <description>&lt;p&gt;Речь пойдет о проекте &lt;a href="https://web.archive.org/web/20101114082036/http://scb.net.ru:80/"&gt;Google Cache Browser&lt;/a&gt;
Судя по всему, этот проект появился в сети совсем недавно, так как в поисковиках мне его обнаружить не удалось. Я сам узнал о нем совершенно случайно - друг за бутылочкой пива рассказал, что читал анонс этого сервиса на форуме какого-то хостинга, где девелопер обещал, что сайт вот-вот появится. Но это все лирика.&lt;/p&gt;
&lt;p&gt;Что же на самом деле представляет собою этот сервис?
Вот что говорится на странице описания проекта:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Google Cache Browser - это инструмент, позволяющий легко и быстро просматривать страницы из кеша Google. Принцип действия от части похож на веб-прокси (анонимайзер): Google Cache Browser (далее GCB) загружает страницу из кеша Google и заменяет ссылки в документе так, чтобы они приводили к загрузке новых страниц из кеша снова через GCB.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Иными словами, мы можем просматривать кеш гугля в режиме обычного серфинга. Удобно :)&lt;/p&gt;
&lt;p&gt;Надо отметить, что сервис доступен на двух языках - русском и английском. Надо полагать, что у владельца есть далеко идущие планы на развитие сайта и бесплатный домен - это только первая ступенька лестницы. Еще одно наблюдение, за верность которого я поручиться не могу, но подозреваю, что не слишком далек от истины: В копирайте значится &amp;ldquo;Spider Cache Browser&amp;rdquo; и домен SCB.net.ru наводят на мысль, что автор собирается реализовать аналогичный сервис и для других поисковых систем.&lt;/p&gt;
&lt;p&gt;Еще хочется отметить, что там очень грамотно, на мой взгляд, реализована система сообщения об ошибках - на каждой странице в правом верхнем углу есть ссылка на форму баг-репорта, в которой автоматом прописывается адрес проблемной страницы и надо только написать описание ошибки.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Избранное с блогов вебмастеров рунета в одном месте!</title>
      <link>https://nevkontakte.com/2008/Favorites-blogs-webmasters-Runet-in-one-place.html</link>
      <pubDate>Sat, 05 Jul 2008 15:54:24 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Favorites-blogs-webmasters-Runet-in-one-place.html</guid>
      <description>&lt;p&gt;Дмитрий Рогов в своем &lt;a href="http://webmoon.ru"&gt;блоге&lt;/a&gt; запустил один &lt;a href="https://web.archive.org/web/20160304215820/http://webmoon.ru/izbrannoe-s-vebmasterskix-blogov-runeta-v-odnom-meste"&gt;интересный проект&lt;/a&gt;. Идея проста до гениальности - собрать в одном месте ссылки на наиболее полезные статьи в блогах вебмастеров рунета.&lt;/p&gt;
&lt;p&gt;Вот несколько ссылок, которые мне показались наиболее интересными с программистской точки зрения:
&lt;a href="http://zhilinsky.ru/2008/03/13/morphlogy/"&gt;Морфологический анализатор для PHP-скриптов&lt;/a&gt;&lt;a href="http://www.profithunter.ru/uroki-ot-stompernet/kak-izbavitsya-ot-nakazaniya-za-dublirovannyj-kontent/"&gt;Как избавиться от наказания за дублированный контент&lt;/a&gt;&lt;a href="http://zhilinsky.ru/2008/04/14/yandex-cy-php/"&gt;Проверка ТиЦ на PHP - ещё быстрее.&lt;/a&gt; и &lt;a href="http://zhilinsky.ru/2008/03/06/pr-cy-php/"&gt;Определяем Google PR и Яндекс ТиЦ в PHP&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>FF3: Марш!</title>
      <link>https://nevkontakte.com/2008/FF3-March.html</link>
      <pubDate>Sat, 05 Jul 2008 02:15:09 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/FF3-March.html</guid>
      <description>&lt;p&gt;Наконец у меня дошли руки поставить себе третий FireFox. Из новшеств наиболее заметно то, что при вводе в адресную строку поиск подходящих сайтов ведется еще и о заголовкам страниц и порою это пригождается. По скорости он, на мой взгляд, теперь не слишком уступает даже Опере, которая долгое время лидировала в этом направлении.&lt;/p&gt;
&lt;p&gt;Порадовало то, что большинство необходимых расширений уже доступны для новой версии и прекрасно с нею работают. В общем, разработчикам троекратное ура и поздравления с очередным хорошим релизом!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Firefox 3 и самоподписанные сертификаты.</title>
      <link>https://nevkontakte.com/2008/Firefox-3-and-self-signed-certificates.html</link>
      <pubDate>Fri, 04 Jul 2008 22:50:51 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Firefox-3-and-self-signed-certificates.html</guid>
      <description>&lt;p&gt;Надо сказать, что разработчики FireFox при разработке третьей версии много внимания уделили безопасности. На мой вкус, местами они даже перестарались. Один из таких случаев - сайты, доступные только по HTTPS и с самоподписанными сертификатами. Например, многие хостеры в целях экономии денег для панели управления хостингом сами генерируют и подписывают SSL сертификат. Почему это плохо? Теоретически, любой человек может понаделать таких сертификатов сколько угодно и, соответственно, доверять как благонадежным им нельзя. В то же время это само по себе не представляет никакого вреда.&lt;/p&gt;
&lt;p&gt;Так вот, разработчики FF3 почему-то решили, что это плохо и по умолчанию запретили доступ к подобным сайтам. но если нам необходимо туда попасть, то нужно проделать следующие действия:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Открыть страницу about:config и установить свойство browser.xul.error_pages.expert_bad_cert равным true.&lt;/li&gt;
&lt;li&gt;Теперь при заходе на такой сайт на странице с сообщением об ошибке добавится кнопочка &amp;ldquo;Добавить исключение&amp;rdquo;. Жмем на нее.&lt;/li&gt;
&lt;li&gt;В появившемся диалоге жмем на &amp;ldquo;Получить сертификат&amp;rdquo; и &amp;ldquo;Подтвердить исключение безопасности&amp;rdquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Вуаля! Теперь сайт благополучно открывается!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Апгрейд</title>
      <link>https://nevkontakte.com/2008/Upgrade.html</link>
      <pubDate>Fri, 04 Jul 2008 18:33:16 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Upgrade.html</guid>
      <description>&lt;p&gt;Свершилось! Наконец-то сделал своему компу апгрейд. Ощущения такие, как будто с копейки пересел на бмв. Впрочем, это неудивительно - против новой конфигурации стараявообще ни на что не годится.&lt;/p&gt;
&lt;p&gt;Собственно, результаты апгрейда:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Процессор: Intel Core2 Duo E8400 - 3 Ghz, 6Mb L2, 1333 Mhz FSB&lt;/li&gt;
&lt;li&gt;Материнка: Intel DG33FBC&lt;/li&gt;
&lt;li&gt;Память: Kingston 2*1024, 800 Mhz.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Раньше же стояло:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Процессор: Intel CeleronD 2.66 Ghz, 256Kb L2 и не помню какая FSB&lt;/li&gt;
&lt;li&gt;Мать: ASUS P4P800-VM&lt;/li&gt;
&lt;li&gt;Память: 4*256Mb от Корсара, не помню частоту, но какая-то совсем уж маленькая :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Переферию и всякие сидиромы оставил прежними.&lt;/p&gt;
&lt;p&gt;Как бы то ни было, без граблей все же не обошлось. Первыми граблями оказалось то, что у меня стояло довольно старое ядро, которое не поддерживало новый чипсет и отказывалось грузиться. Винда, естественно, тоже не поняла шутки с подменой железа и свалилась в БСОД. Пришлось искать лив-сиди, делать бекапы и преставлять систему. Вот тут-то и лежали вторые грабли, детские. Черт меня дернул подставить openSUSE 11.0 с KDE4. Откровенно говоря, я так и не понял, где их хваленая красивость, зато в полной мере вкусил все глюки четвертых кедов. Пришлось промаяться целый день, чтобы хоть как-то настроить кеды для минимально глючной работы и научиться обходить неустранимые глюки.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Финты ICQ...</title>
      <link>https://nevkontakte.com/2008/Feint-ICQ.html</link>
      <pubDate>Thu, 03 Jul 2008 18:55:02 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Feint-ICQ.html</guid>
      <description>&lt;p&gt;Так случилось, что именно 1 июля сего года я занялся апгрейдом железа на своем компе. В результате, я на два дня начисто выпал из онлайновой жизни и когда сегодня у меня все заработало настолько, что можно было подумать и о том, чтобы проверить свои дела в онлайне я обнаружил, что ни один асечный клиент не желает коннектиться. Оказывается, умные дяди из AOL перешли на 6 версию протокола, а подавляющее большинство линуксовых клиентов ориентированы на 5. Единственым клиентом, который включил необходимую поддержку и при этом имелся в репозиториях openSUSE 11.0 оказался Pidgin. Честно говоря, не самый плохой вариант, но функционалом, мягко говоря не изобилует&amp;hellip;&lt;/p&gt;
&lt;p&gt;В прочем, АОЛовцы добились своего - я начинаю думать о переходе на жаббер и перетаскиванию на него всех знакомых и клиентов. А то хрен их знает, в АОЛе, вдруг прибьют вообще все альтернативные клиенты за ненадобностью, что тогда делать? ну их нах.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Как не надо делать сайты автосерфинга или Получаем посетителей на халяву</title>
      <link>https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-or-Receive-visitors-for-free.html</link>
      <pubDate>Sat, 28 Jun 2008 20:50:37 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/How-not-to-do-autosurf-sites-or-Receive-visitors-for-free.html</guid>
      <description>&lt;p&gt;Есть такая система обмена показами - asurf.net.ru. Идея заключается в том, что после того, как ты просмотришь (под чутким руководством их скриптов) N нужных сайтов, твой адрес заносится в этот список и те, кто будут добавлять свой сайт после вас будут вынуждены посмотреть ваш сайт. В итоге вы получите N просмотров. В целом система оказалась удачной, стала пользоваться популярностью и даже было запущено для аналогичных сервиса на других доменах. Особо замечательным свойством этой системы оказалось то, что она не требует ни регистрации, ни ввода какой бы то ни было капчи&amp;hellip; Как вы думаете, какая мысль меня тут же посетила? Правильно, автоматизировать это дело и на халяву рубить посетителей. Ну а если еще и учесть, что на наиболее активно прокручиваемые в системе сайты вешаются сквозняки, в том числе со страничеко с PR5, то идея становится вообще крайне заманчивой. :) Ладно, автоматизировать, так автоматизировать. За пару минут я выяснил, что навигация осуществляется с помощью мета-тега в верхнем фрейме. В итоге выстроилась такая схема вызовов адресов:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;0) http://asurf.net.ru/next.php?h=N&amp;amp;url=http://nevkontakte.org.ru
1) http://asurf.net.ru/nextN.php
...
N) http://asurf.net.ru/nextN.php
N+1) http://asurf.net.ru/save.php
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;N - это количество хитов, которое мы хотим получить. Система поддерживает значения N только 3, 5, 9, 15, 23. Как человек ленивый, я подумал, что пусть даже скриптом, но столько скачиваний делать как-то совсем не здорово. Не долго думая, я попробовал вместо 23 вызовов делать всего 3 и это, как ни странно, сработало! Чуть-чуть поэксперементировав я пришел к выводу, что системе пофигу, сколько раз я загружаю страницу &lt;a href="http://asurf.net.ru/nextN.php"&gt;http://asurf.net.ru/nextN.php&lt;/a&gt;. При чем настолько пофигу, что если я вызову &lt;a href="http://asurf.net.ru/save.php"&gt;http://asurf.net.ru/save.php&lt;/a&gt; сразу после &lt;a href="http://asurf.net.ru/next.php?h=N&amp;amp;url=http://nevkontakte.org.ru"&gt;http://asurf.net.ru/next.php?h=N&amp;amp;url=http://nevkontakte.org.ru&lt;/a&gt;, то система все равно будет считать, что я честно посмотрел всю ту чушь, что полагается! B) Теперь дело осталось за малым. За пол-часа я наваял первую версию скрипта, который будет автоматом делать все необходимое.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="o"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="nx"&gt;php&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * AClicker 1.1
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * Asurf.net.ru auto surfing script by Alek$
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * http://nevkontakte.org.ru
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt;/**
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; * Запрещается модифицировать данный скрипт без разрешения автора.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="sd"&gt; */&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Usage [hits] [site] [promos]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Define log entries types
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ST_INFO&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Information&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ST_WARN&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Warning&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;define&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;ST_ERROR&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Error&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Include curl http library
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;require_once&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Init argv[]
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$argv&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;S&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$_REQUEST&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;q&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;array_unshift&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Obtain number of requires hits
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$hits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;in_array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="nv"&gt;$hits&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$hits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$hits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Invalid hit number! Assuming 3...&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ST_WARN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Obtain which site promote
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$site&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s1"&gt;&amp;#39;http://testsite&amp;#39;&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rand&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;30000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s1"&gt;&amp;#39;http://nevkontakte.org.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]]))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$site&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$site&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Invalid site id! Assuming &lt;/span&gt;&lt;span class="si"&gt;$site&lt;/span&gt;&lt;span class="s2"&gt; ...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ST_WARN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;// Obtain which promoter use
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;&lt;span class="nv"&gt;$promos&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s1"&gt;&amp;#39;all&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s1"&gt;&amp;#39;asurf.net.ru&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s1"&gt;&amp;#39;rpanel.in&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="s1"&gt;&amp;#39;surf.rpanel.info&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;isset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$promos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]]))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$promo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$promos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$promo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$promos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Invalid promoter id! Assuming &lt;/span&gt;&lt;span class="si"&gt;$promo&lt;/span&gt;&lt;span class="s2"&gt; ...&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ST_WARN&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$promo&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;all&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Starting multipromo request queue for &lt;/span&gt;&lt;span class="si"&gt;$hits&lt;/span&gt;&lt;span class="s2"&gt; hits to &lt;/span&gt;&lt;span class="si"&gt;$site&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;for&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="nx"&gt;sizeof&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$promos&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$promo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$promo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$promos&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Starting request for &lt;/span&gt;&lt;span class="si"&gt;$hits&lt;/span&gt;&lt;span class="s2"&gt; hits to &lt;/span&gt;&lt;span class="si"&gt;$site&lt;/span&gt;&lt;span class="s2"&gt; at &lt;/span&gt;&lt;span class="si"&gt;$promo&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$curl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Curl_HTTP_Client&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;//pretend to be IE6 on windows
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="nv"&gt;$useragent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;set_user_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$useragent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$cookies_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./cookies.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cookies_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;store_cookies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cookies_file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;//if you want to send some post data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="c1"&gt;//form post data array like this one
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="nv"&gt;$post_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="s1"&gt;&amp;#39;h&amp;#39;&lt;/span&gt;		&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$hits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="s1"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="c1"&gt;//and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;		&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;send_post_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://&lt;/span&gt;&lt;span class="si"&gt;$promo&lt;/span&gt;&lt;span class="s2"&gt;/next.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;##&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;fetch_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://&lt;/span&gt;&lt;span class="si"&gt;$promo&lt;/span&gt;&lt;span class="s2"&gt;/save.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;##&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Succeed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;				&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Error at step 2! Responce: &lt;/span&gt;&lt;span class="si"&gt;$html_data&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ST_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Error at step 1! Responce: &lt;/span&gt;&lt;span class="si"&gt;$html_data&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ST_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Starting request for &lt;/span&gt;&lt;span class="si"&gt;$hits&lt;/span&gt;&lt;span class="s2"&gt; hits to &lt;/span&gt;&lt;span class="si"&gt;$site&lt;/span&gt;&lt;span class="s2"&gt; at &lt;/span&gt;&lt;span class="si"&gt;$promo&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$curl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;Curl_HTTP_Client&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//pretend to be IE6 on windows
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$useragent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;set_user_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$useragent&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$cookies_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;./cookies.txt&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nx"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cookies_file&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;w&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;store_cookies&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$cookies_file&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//if you want to send some post data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="c1"&gt;//form post data array like this one
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$post_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="s1"&gt;&amp;#39;h&amp;#39;&lt;/span&gt;		&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$hits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="s1"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;	&lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nv"&gt;$site&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="c1"&gt;//and send request to http://www.foo.com/login.php. Result page is stored in $html_data string
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;	&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;send_post_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://&lt;/span&gt;&lt;span class="si"&gt;$promo&lt;/span&gt;&lt;span class="s2"&gt;/next.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$post_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;##&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$curl&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="na"&gt;fetch_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;http://&lt;/span&gt;&lt;span class="si"&gt;$promo&lt;/span&gt;&lt;span class="s2"&gt;/save.php&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;preg_match&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;##&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;Succeed&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;			&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Error at step 2! Responce: &lt;/span&gt;&lt;span class="si"&gt;$html_data&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ST_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;else&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$html_data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;str_replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$html_data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;Error at step 1! Responce: &lt;/span&gt;&lt;span class="si"&gt;$html_data&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;ST_ERROR&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nx"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;log_action&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$log&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ST_INFO&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nv"&gt;$aid&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;static&lt;/span&gt; &lt;span class="nv"&gt;$string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;array&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$log&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;implode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;$string&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$fp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;fopen&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;y-m-d&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;.txt&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;a&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;fwrite&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;$out&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nx"&gt;fclose&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$fp&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;return&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;empty&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$aid&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="nv"&gt;$aid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nx"&gt;number_format&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;microtime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$date&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;y-m-d H:M&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="nv"&gt;$string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;$aid&lt;/span&gt;&lt;span class="s2"&gt; [&lt;/span&gt;&lt;span class="si"&gt;$date&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;$status&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="si"&gt;$log\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;	&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$display&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;		&lt;span class="k"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="si"&gt;$aid&lt;/span&gt;&lt;span class="s2"&gt; [&lt;/span&gt;&lt;span class="si"&gt;$date&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;$status&lt;/span&gt;&lt;span class="s2"&gt;: &lt;/span&gt;&lt;span class="si"&gt;$log\n&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="cp"&gt;?&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Скрипт можно использовать как из командной строки, так по http. В перво случае формат аргументов такой: &lt;code&gt;clicker.php [hits] [site] [promos]&lt;/code&gt; В случае с вызовом во http это выглядит так: &lt;code&gt;http://www.site.ru/clicker.php?q=[hits]S[site]S[promos]&lt;/code&gt; Теперь о самих параметрах. Все три параметра - числа.&lt;/p&gt;</description>
    </item>
    <item>
      <title>FF3: На старт... Внимание...</title>
      <link>https://nevkontakte.com/2008/FF3-At-the-start-Attention.html</link>
      <pubDate>Tue, 17 Jun 2008 17:25:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/FF3-At-the-start-Attention.html</guid>
      <description>&lt;p&gt;&lt;a href="http://www.spreadfirefox.com/node/2438"&gt;The Official Download Day Time | Spread Firefox&lt;/a&gt;
Сегодня в 10:00 PDT (Pacific Daylight Time) будет обубликован для скачивания релиз FF3.
В Москве в это время будет 21:00, а у меня в Новосибирске - полночь :) Время, конечно, не самое удачное, но что поделаешь :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Chmod на пальцах.</title>
      <link>https://nevkontakte.com/2008/Chmod-on-the-fingers.html</link>
      <pubDate>Sun, 15 Jun 2008 20:01:08 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Chmod-on-the-fingers.html</guid>
      <description>&lt;p&gt;Собственно, тема уже давно обсосана со всех сторон и любой неленивый человек с легкостью найдет всю нужную информацию, но&amp;hellip; ХЗ, почему это &amp;ldquo;но&amp;rdquo; есть, но вопросы о правах доступа возникают с завидной регулярностью. Поэтому я попробую в тысячный раз изобрести велосипед и изложить основы прав доступа к файлам в *NIX системах, а так же некоторые неочевидные тонкости при работе с ними.&lt;/p&gt;
&lt;h3 id="часть-первая-какие-существуют-права-доступа"&gt;Часть первая. Какие существуют права доступа.&lt;/h3&gt;
&lt;p&gt;Существуют три основных разновидности прав доступа: чтение (r), запись (w) и выполнение(x). Первые два, думаю, никаких вопросов не вызывают. А вот последнее для людей, привыкших к Windows станет сюрпризом. Дело в том, что в *NIX и Windows используются разные подходы к различению исполняемых (программ) и не исполняемых файлов (файлов данных). В Windows за это отвечают расширения файлов (exe, com, bat и некоторые другие воспринимаются как исполняемые, а все остальные - нет), а в *NIX - право на выполнение файла. То есть для одного пользователя один и тот же файл может являться выполняемым, а для другого - нет. Это может быть очень полезно, если администратору необходимо запретить простым юзерам пользоваться какой-то программой, но в то же время самому иметь возможность пользоваться ею.&lt;/p&gt;
&lt;p&gt;Каждый файл в *NIX имеет владельца - обычно это пользователь, который его создал, и группу владельцев - ею обычно становится основная группа владельца файла. Соответственно, права доступа к файлу задаются отдельно для владельца, группы и всех остальных пользователей, ни являющихся владельцами файла, ни входящими в группу владельцев.&lt;/p&gt;
&lt;h3 id="часть-вторая-что-значит-0755-или-правила-записи-прав-доступа"&gt;Часть вторая. Что значит 0755 или правила записи прав доступа.&lt;/h3&gt;
&lt;p&gt;Существует две основных формы записи прав доступа к файлам - числовая и символьная. Наибольшее распространение получила числовая форма, как наиболее краткая. Символьная используется тогда, когда важнее наглядность.&lt;/p&gt;
&lt;h4 id="1-числовая-форма-записи"&gt;1) Числовая форма записи.&lt;/h4&gt;
&lt;p&gt;Это четырехзначное восьмеричное число. Первый знак кодирует особые биты доступа, о которых я сейчас говорить не стану, скажу лишь, что в 95% случаев вам достаточно оставить его равным 0, а три последующих - права доступа для владельца, группы и всех остальных соответственно. В такой записи право на чтение кодируется числом 4, запись - 2, исполнение - 1. Результирующее число получается путем сложения чисел разрешенных прав доступа. Например, число 6=4+2 - право на чтение и запись, выполнение запрещено, 5=4+1 - чтение и выполнение, 7=4+2+1 - полный доступ. Таким образом, чтобы дать владельцу право делать с файлом все, что угодно, а всем прочим - только читать и исполнять, ставят права доступа 0755 (владелец: 7=4+2+1, группа: 5=4+1, остальные: 5=4+1). Это типичные права доступа на исполняемые файлы обычных программ и скриптов. Для файлов данных чаще используют 0644, 0640 или 0600. В первом случае владелец сможет читать и писать в файл, остальные только читать; во втором - писать сможет только владелец, читать - только владелец и группа, все остальные доступа иметь не будут; третий случай самый крайний - владелец сможет читать и писать в файл, а все остальные доступа к нему иметь не будут.&lt;/p&gt;
&lt;h4 id="2-символьная-форма-записи"&gt;2) Символьная форма записи.&lt;/h4&gt;
&lt;p&gt;В этом случае права доступа представляются как 9 символов r, w, x или дефис. Идут они в следующем порядке: rwxrwxrwx. Первые три отвечают за права доступа владельца, следующие - группы и последние - всех остальных. Чтобы показать, что кто-то из них не имеет доступа к той или иной опции, ее заменяют на символ дефиса. Таким образом запись 0755, запрещающая изменять файл всем, кроме владельца, в символьном представлении будет выглядеть так: rwxr-xr-x.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Лучшие бесплатные хостинги</title>
      <link>https://nevkontakte.com/2008/Best-free-hosting.html</link>
      <pubDate>Sat, 14 Jun 2008 22:36:09 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Best-free-hosting.html</guid>
      <description>&lt;p&gt;Я не буду претендовать на 100% объективность, а лишь перечислю бесплатные хостинги, которые я считаю лучшими на данный момент.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://eomy.net"&gt;EOMY&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Пожалуй, лучший среди русских хостингов. Быстрые сервера, отзывчивый администратор, развитая инфраструктура. Достоинства: нет рекламы (единственное требование - разместить небольшую кнопочку, которую, к слову, вы можете нарисовать сами под свой дизайн, со ссылкой на eomy и небольшую надпись &amp;ldquo;Бесплатный хостинг от EOMY.NET&amp;rdquo; и то, и другое вы можете разместить, как пожелаете, лишь бы их было видно), PHP5, до 10 БД MySQL, 300 МБ диска, до 10 паркованных доменов, cPanel, cron - все не перечислишь&amp;hellip;&lt;/p&gt;
&lt;p&gt;Из недостатков - не одобряются исходящие соединения и категорически запрещены всякие скрипты-демоны, но это, в принципе, понятно, требуется приглашение. Тут надо заметить отдельно, что любой стоящий проект код получит. Если вам пока не удалось доказать, что ваш сайт достоин этого, можно некоторое время перекантоваться на &lt;a href="http://vagonchik.com/"&gt;http://vagonchik.com/&lt;/a&gt; , который является более доступной версией eomy и отличается лишь наличием рекламы, но этого вполен достаточно, чтобы дать начальный старт, а потом перебраться на eomy.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://intobservatory.ru"&gt;Internet Observatory&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Неплохой русский бесплатных хостинг, предоставляет PHP+Mysql+200MB, для среднестатистического сайта этого более чем достаточно. По запросу могут дать дополнительное место/базу/поддомен или еще,ч то надо. При регистрации так же есть ценз, осуществляемый модераторами, выбранными из числа пользователей хостинга. Проекты, получившие после проверки модераторами оценку хотябы 4 из 5 получают хостинг и бесплатный домен в зоне RU. Недостатки: как уже говорил, есть отбор заявок на хостинг, малофункциональная самописная панель управления, не всегда быстрая реакция техподдержки, высокая загруженность серверов. Еще одна проблема - выкупить домен практически нереально, правда случаев, чтобы его отобрали просто так, как это бывало на других аналогичных хостингах, еще ни разу не было. Требуют размещение небольшого блока текстовой рекламы на главной.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.000webhost.com/51726.html"&gt;000webhost.com&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Крупный зарубежный бесплатный хостинг. Во многом аналогичен eomy, основные отличия: разрешены исходящие соединения, нет какого-либо ценза при регистрации, рекламу не вешают никакую. Панель управления предоставляют свою, но очень похожую на cPanel. Еще одна замечательная особенность этого хостинга - под одним главным аккаунтом можно создавать сколько угодно независимых сайтов. Очень радует скорость реакции техподдержки - одна из самых оперативных, по сравнению с конкурентами. Из недостатков: cron может запускать самое частое - раз в сутки, для более частого запуска необходимо апгрейдить аккаунт до платного, не работают функции для работы с командной строкой.&lt;/p&gt;</description>
    </item>
    <item>
      <title>17 июня - Firefox Download Day</title>
      <link>https://nevkontakte.com/2008/June-17-Firefox-Download-Day.html</link>
      <pubDate>Sat, 14 Jun 2008 17:40:05 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/June-17-Firefox-Download-Day.html</guid>
      <description>&lt;p&gt;Как я писал несколько дней назад, одно из тех событий, которые я жду больше всего - это выход третьей версии FireFox. До сих пор точная дата релиза не была известна, но сегодня мне наконец пришло такое уведомление:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Don’t forget to be part of Firefox’s Download Day!&lt;/p&gt;
&lt;p&gt;Mark your calendar, wrap a ribbon around your finger or write a little sticky yellow note. Download Day will start on June 17, 2008.&lt;/p&gt;
&lt;p&gt;If you prefer to no longer receive emails from Mozilla concerning Download Day, you may unsubscribe &lt;a href="http://spreadfirefox.com/en-US/worldrecord/remove?code=XXXX"&gt;here&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The sender of this email is Mozilla Corporation, 1981 Landings Drive, Bldg.. K, Mountain View, CA 94043-0801.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Так что все ждем вторника :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Yandex стал поддерживать файлы sitemap</title>
      <link>https://nevkontakte.com/2008/Yandex-has-to-support-Sitemaps.html</link>
      <pubDate>Fri, 06 Jun 2008 04:10:02 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Yandex-has-to-support-Sitemaps.html</guid>
      <description>&lt;p&gt;Думаю, для любого веб-мастера не секрет, что Google может индексировать ваш сайт руководствуясь не только тем, что он видит на страницах, но и файлами Google Sitemap.
Сегодня я обнаружил, что у Яндекса тоже появилась такая возможность.
Сделать это можно на webmaster.yandex.ru, выбрав вкладку &amp;ldquo;Файлы Sitemap&amp;rdquo;. Яндекс поддерживает форматы, описанные на сайте sitemaps.org по адресу &lt;a href="http://www.sitemaps.org/ru/protocol.php"&gt;http://www.sitemaps.org/ru/protocol.php&lt;/a&gt;
Краткий от самого Яндекса FAQ по картам сайтов можно почитать здесь: &lt;a href="http://help.yandex.ru/webmaster/?id=1007070"&gt;http://help.yandex.ru/webmaster/?id=1007070&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Удачной индексации!&lt;/p&gt;</description>
    </item>
    <item>
      <title>Обновление движка завершено</title>
      <link>https://nevkontakte.com/2008/Update-engine-completed.html</link>
      <pubDate>Thu, 05 Jun 2008 22:21:04 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Update-engine-completed.html</guid>
      <description>&lt;p&gt;Уфф&amp;hellip; Наконец-то последние баги были вылизаны, а новый движок был залит на хостинг.
На всякий случай проверил скрины нового дизайна на browsershots.org и, как ни странно, никаких косяков не заметил. Правда, в IE 5.5 есть небольшой косячок, но он малозаметен и все равно вряд ли обладатель такого архаизма заглянет на мой сайт :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Переезд на новый движок и прочие вкусности</title>
      <link>https://nevkontakte.com/2008/Moving-to-a-new-engine-and-other-Goodies.html</link>
      <pubDate>Tue, 03 Jun 2008 10:26:06 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Moving-to-a-new-engine-and-other-Goodies.html</guid>
      <description>&lt;p&gt;Напряженный труд последних трех дней наконец-то подошел к концу.
Честно говоря, я расчитывал, что переезд на новый движок пройдет несколько легче и безболезненнее, чем это произошло на самом деле, но результат, на мой взгляд, того заслуживает.&lt;/p&gt;
&lt;p&gt;Новой платформой для блога стал Drupal 5.7, благодаря чему удалось реализовать массу приятных вещей. Собственно, выбор изначально был невелик: Wordpress или Drupal (5.7 или 6.2). В результате долгих терзаний я принял решение в пользу Drupal, поскольку тот намного легче поддается расширению и надстройке и, в добавок, значительно менее требователен к ресурсам.&lt;/p&gt;
&lt;p&gt;Конечно, мой хостинг вполне позволяет поставить и Wordpress, но в купе с плохим кодом это заставило меня отказаться от WP, несмотря на его популярность.&lt;/p&gt;
&lt;p&gt;Выбор ветки Drupal не составил большого труда: во-первых, под пятерку существует гораздо больше модулей, во-вторых, она считается самой стабильной версией.&lt;/p&gt;
&lt;p&gt;Затем последовала утомительная конвертация данных и настройка модулей и скина. Но таков уж Drupal сам по себе и тем он отличается от любого другого движка - над ним надо потрудиться, но зато в итоге из него можно собрать, как из конструктора, все, что угодно - от блога до социальной сети.&lt;/p&gt;
&lt;p&gt;Теперь о тех вкусностях, которые присутствуют в новом движке.&lt;/p&gt;
&lt;p&gt;Первая и самая приятная для меня - теперь без глюков работает блоговый клиент. Этот пост я набираю уже в ScribeFire :)&lt;/p&gt;
&lt;p&gt;Вторая - теперь сайт отдает в rss все, что можно, включая посты и комментарии.&lt;/p&gt;
&lt;p&gt;И третья - теперь если вы имеете аккаунт на другом Drupal сайте, поддерживающем распределенную авторизацию, вы можете авторизоваться в моем блоге не прибегая к регистрации, пользуясь своим тамошним аккаунтом. И наоборот, любой зарегистрированный в моем блоге человек может авторизоваться на других Drupal сайтах, используя тутошний аккаунт.То есть, если у вас есть аккаунт MyName на Drupal.org, то здесь вы для авторизации должны указать логин &lt;a href="mailto:myname@drupal.org"&gt;myname@drupal.org&lt;/a&gt; и ваш пароль от аккаунта на Drupal.org.
Была еще идея сделать поддержку OpenID, но она начала конфликтовать с капчей и задумку пришлось отложить до лучших времен&amp;hellip;&lt;/p&gt;
&lt;p&gt;Ну вот вроде бы и все, что хотел сказать :)&lt;/p&gt;
&lt;p&gt;NB: прикрутить поддержку смайлов надо бы&amp;hellip;&lt;/p&gt;</description>
    </item>
    <item>
      <title>About me and my blog</title>
      <link>https://nevkontakte.com/pages/about.html</link>
      <pubDate>Sun, 01 Jun 2008 23:42:22 +0000</pubDate>
      <guid>https://nevkontakte.com/pages/about.html</guid>
      <description>&lt;p&gt;Hi! Thanks for visiting my place!&lt;/p&gt;
&lt;p&gt;My name is Alex, and I&amp;rsquo;m also known under nicknames Alek$ and nevkontakte. My
professional interests are in the domain of software engineering, distributed
systems and system reliability. Outside of work I&amp;rsquo;m toying with and learning
about may other things: security and privacy, gaming, aviation and flight
simming, technology in general, music and all sorts of other random things. In
past, I was a very active member of
&lt;a href="http://phpbbguru.net"&gt;Russian phpBB community&lt;/a&gt;, and these days I float around
various open source communities that poke my interest.&lt;/p&gt;
&lt;p&gt;You might find my CV at &lt;a href="https://www.linkedin.com/in/nevkontakte/"&gt;Linked-in&lt;/a&gt;
(En) or &lt;a href="https://moikrug.ru/nevkontakte"&gt;MoiKrug&lt;/a&gt; (Ru). The best ways to contact
me are email (&lt;img src="https://nevkontakte.com/files/email.png" alt="email"&gt;) or Twitter
(&lt;a href="https://x.com/nevkontakte"&gt;@nevkontakte&lt;/a&gt;).&lt;/p&gt;
&lt;h2 id="what-is-this-place"&gt;What is this place?&lt;/h2&gt;
&lt;p&gt;This blog is a reflection of my moving interests — both professional and
hobbies, whenever I feel like writing something long form. The short form is, of
course, on Twitter &amp;#x1f604; That means there&amp;rsquo;s no single theme to my posts, but I
hope you&amp;rsquo;ll find something of interest anyway.&lt;/p&gt;
&lt;p&gt;I&amp;rsquo;d like to note that posts reflect mine and only mine opinions &lt;em&gt;at the time of
writing&lt;/em&gt;. Like any person I grow and change (hopefully for the better), so the
present me may not agree with the judgements of the former me. I started this
blog back in 2008 when I was still a high school student (which is also the
reason why all of the older posts are in Russian), and a lot has happened since
then… It is my history, though, so I prefer keeping it around nevertheless.&lt;/p&gt;
&lt;h2 id="why-are-there-no-comments"&gt;Why are there no comments?&lt;/h2&gt;
&lt;p&gt;Well… The honest answer is I&amp;rsquo;m too lazy to set them up properly and I&amp;rsquo;d rather
not do a half-ass job. This blog is statically generated by
&lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; and I&amp;rsquo;d have to either self-host a comment system
(which sort of defeats the purpose of a static blog) or use a commercial
offering like Disqus. I used to do the latter, but grew uncomfortable with the
bloat and amount of trackers it brought along, so I got rid of it.&lt;/p&gt;
&lt;p&gt;That is not to say I don&amp;rsquo;t welcome a conversation! If you found a post helpful,
or found a mistake, or disagree with something I&amp;rsquo;d love to hear about it! Shoot
me an email or tag me on Twitter and I&amp;rsquo;ll respond back to you ASAP &amp;#x1f4e3;&lt;/p&gt;</description>
    </item>
    <item>
      <title>DMOZ изнутри или я - редактор.</title>
      <link>https://nevkontakte.com/2008/DMOZ-inside-or-I-editor.html</link>
      <pubDate>Sat, 31 May 2008 04:43:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/DMOZ-inside-or-I-editor.html</guid>
      <description>&lt;p&gt;На днях подавал заявку на то, чтобы стать там редактором, сегодня пришел ответ, да при том положительный :)
В результате я получил на редактирование скромный русскоязычный раздел по форумам, как раз по моей специальности. Пол дня вчитывался в многочисленные правила и рекомендации, в результате я теперь более-менее представляю, как оно функционирует.
Глядишь, через месяцок-другой освоюсь, попривыкну и расширю круг своих редакторских полномочий B)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Forum Matrix - сравниваем движки</title>
      <link>https://nevkontakte.com/2008/Forum-Matrix-compare-engines.html</link>
      <pubDate>Thu, 29 May 2008 12:02:13 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Forum-Matrix-compare-engines.html</guid>
      <description>&lt;p&gt;Ползая по сети случайно вышел на преинтересный сайт: ForumMatrix.org, который позволяет сравнивать форумные движки по разным параметрам. Кроме того, они предоставляют простенький визард, позволяющий подобрать себе движок по потребностям.
Потыкавшись некоторое время я выяснил, что наиболее функциональными являются MyBB, phpBB и SMF. При этом, к сожалению, мой любимый phpBB по их данным выигрывает лишь по количеству поддерживаемых баз данных. Правда, SMF я все же не рассматриваю для себя как альтернативу по причине крайне грязного кода и общей корявости. Как с этим у myBB я не знаю, но по скринам он больше похож на phpBB2&amp;hellip;
Еще одна поправка к данным таблиц - у phpBB весь недостающий функционал реализуется модами, созданными сообществом, так что хорошо обработанный phpBB3 по-прежнему можно считать лидером :)
Вот ссылка на таблицу сравнения: &lt;a href="http://www.forummatrix.org/compare/MyBB+phpBB+SMF"&gt;http://www.forummatrix.org/compare/MyBB+phpBB+SMF&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Чего я жду сейчас.</title>
      <link>https://nevkontakte.com/2008/What-I-expect-now.html</link>
      <pubDate>Thu, 29 May 2008 08:14:38 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/What-I-expect-now.html</guid>
      <description>&lt;p&gt;Собственно, жду я сейчас трех вещей:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Окончания сессии, ибо учиться уже задолбало, отдыхать хочу. Благо. погода вроде наладилась.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://en.opensuse.org/openSUSE_11.0"&gt;OpenSUSE 11.0&lt;/a&gt;. Давно уже пора обновить систему, а в 11 обещают много нового и интересного. А то уже совсем стремно на старье сидеть.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.spreadfirefox.com/node&amp;amp;id=225251&amp;amp;t=298"&gt;FireFox3&lt;/a&gt;. Судя по всему, новое поколение любимого FF будет несколько менее жадным до ресурсов. что очень актуально для меня :)&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>У природы нет плохой погоды...</title>
      <link>https://nevkontakte.com/2008/Nature-has-no-bad-weather.html</link>
      <pubDate>Tue, 29 Apr 2008 22:47:48 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Nature-has-no-bad-weather.html</guid>
      <description>&lt;p&gt;Мда, это только в Новосибирске такое может быть: на дворе 30 апреля, 9:37 утра по местному времени, а с неба валит снег как в январе. Единственное отличие - температкра 0 по Цельсию и лужи на асфальте&amp;hellip;
И такие кренделя последние три дня каждый день :( При чем, было же пару дней реально тепло - 25 градусов, солнце, легкий ветерок, дак нет, кончилось короткое сибирское лето. Определенно, нам грозит не глобальное потепление, а ледниковый период.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Добавлено позже.&lt;/em&gt;
На фотке - вид из окна моей общаги, который можно было наблюдать сегодня около полудня :)
Снег перестал валить только после захода солнца, в результате чего мне сегодня пришлось таскаться по делам, хлюпая по лужам и прячась от ветра&amp;hellip; Будем надеяться, завтра погода смилостивится :)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://nevkontakte.com/files/dsc00558.jpg"&gt;&lt;img src="https://nevkontakte.com/files/imagecache/Thumbinal/dsc00558.jpg" alt="dsc00558.jpg"&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Используем SVN в управлении сайтом. Часть первая: теоретические соображения.</title>
      <link>https://nevkontakte.com/2008/Use-SVN-website-governance-Part-one-theoretical-considerations.html</link>
      <pubDate>Sat, 19 Apr 2008 08:44:03 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Use-SVN-website-governance-Part-one-theoretical-considerations.html</guid>
      <description>&lt;p&gt;В принципе, эта идея не нова, но почему-то мало применяется веб-мастерами. С другой стороны, использование SVN при управлении сайтом дает массу преимуществ.&lt;/p&gt;
&lt;p&gt;Для тех, кто еще ни разу не сталкивался с этим чудесным инструментом, кратко раскажу что такое SVN и для чего он нужен.
SVN отностися к семейству систем управления версиями, то бишь таких программ, ктотрые позволяют при разработке больших проектов отслеживать все изменения кода, создавать разные ветки развития программы, давать возможность нескольким разработчикам работать над одной и той же программой одновременно не мешая друг другу и еще множество всяких вещей.&lt;/p&gt;
&lt;p&gt;Какие же применения этому инструменту могут найти веб-мастера? Да самые разные.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Первое: поддержка большого количества сайтов на одном движке.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Допустим, вы - крупный веб-мастер и на вашем обслуживании находятся с полтора десятков сайтов ваших клиентов. Чтобы не морочиться всякий раз, вы перевели всех своих клиентов на один и тот же движок (фирменная CMS, например ;) ) и теперь вам необходимо регулярно обновлять сайты клиентов. Фиксятся баги в движке, выпускаются патчи и каждый нужно установить на пятнадцать сайтов. Вееленькое занятие, что и говорить.
Решение проблемы с помощью SVN напрашивается само собой: создается репозиторий, записываются в него файлы движка, создаются копии репозитория на сайтах клиентов и одна локальная копия на вашем компьютере. Теперь вы можете один раз внести изменения обновления в вашу локальную копию, записать из в репозиторий и с помощью нехитрой команды &amp;lsquo;svn update&amp;rsquo;, выполненной на серверах клиента, легко реплицировать их на все 15 сайтов, избежав ручного труда.&lt;/p&gt;
&lt;p&gt;Этот же принцип можно использовать и для одного сайта для легкой синхронизации локальной копии, на которой вы производите отладку модулей, исправления движка и тд и рабочей копией на хостинге.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Второе: защита от взломов, легкий откат и резервное копирование.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Поместив файлы вашего сайта на хостинге под контроль версий, вы в случае взлома легко сможете обнаружить все имеющиеся левые файлы и изменения файлов движка, содержащие бекдоры.
Для этот достаточно выполнить команду svn status и посмотреть список добавившихся/измененных файлов.
Команда &amp;lsquo;svn diff [FILE]&amp;rsquo; покажет вам изменения, сделанные в том или ином файле или, если не указывать [FILE] для всех файлов вцелом. Все бекдоры при этом, естественно, будут засвечены B)&lt;/p&gt;
&lt;p&gt;Если злыдни-хакеры поудаляли кучу важных файлов, то можно легко откатить их бесчинства командой &amp;lsquo;svn revert&amp;rsquo; (это если не были удалены целые дериктории) или &amp;lsquo;svn switch&amp;rsquo; (для более тяжелых случаев). Самым железобетонным способом, пригодным даже в случае, когда удалены вообще все файлы, может послужить полное удаление остатков мусора и &amp;lsquo;svn checkout REPOSITORY_URL&amp;rsquo;&lt;/p&gt;
&lt;p&gt;И, наконец, чтобы не сильно страдать при откатах из SVN, можно организовать автоматическое резервное копирование помещенного под SVN сайта при помощи команды &amp;lsquo;svn checkin&amp;rsquo;. Путем написания несложного скрипта, можно так же организовать и автоматическое резервное копирование базы данных.
Прелесть таких бекапов по сравнению с обычными в том, что вы можете в любой момент извлечь бекап любой давности.&lt;/p&gt;
&lt;p&gt;Во второй части я расскажу о некоторых способах практической реализации мыслей, изложенных в данной статье :idea:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Есть ли жизнь после удаления партиции?...</title>
      <link>https://nevkontakte.com/2008/Is-there-life-after-deleting-all-the-partitions.html</link>
      <pubDate>Sun, 06 Apr 2008 07:40:32 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Is-there-life-after-deleting-all-the-partitions.html</guid>
      <description>&lt;p&gt;На днях обнаружил забавный факт: очередной раз переустанавливая систему на своем компе снес начисто партиции с линухом, в том числе и загрузочную, и при очередной перезагрузке не успел на биос тыкнуть, чтобы грузился с cdrom. А поскольку mbr я не перезаписывал, начал грузиться GRUB, стоявший у меня до этого в качестве загрузчика. Дак мало того, что он благополучно загрузился, порадовал меня красивой менюшкой (и это при том, что партиция, на которой был установлен grub и, в частности, лежала фоновая картинка для него, успешно отобразившаяся, была удалена 88|) и, подождав, как положено, восемь секунд, начал грузить Линух! Естественно, тот до конца не загрузился, но пару экранов сообщений, прежде чем начать ругаться, он выдал как обычно. :-/&lt;/p&gt;
&lt;p&gt;Кто-то, конечно, скажет, что, мол, файлы-то после удаления партиции физически не затираются, вот оно и грузилось&amp;hellip; Это, конечно, так, но ведь загрузчику надо как-то добраться до этих файлов?! При том, что файловая система-то убита. Забавный случай, вобщем.&lt;/p&gt;</description>
    </item>
    <item>
      <title>1ps.ru - впечатления о сервисе.</title>
      <link>https://nevkontakte.com/2008/1ps-ru-impressions-about-the-service.html</link>
      <pubDate>Sun, 30 Mar 2008 06:17:42 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/1ps-ru-impressions-about-the-service.html</guid>
      <description>&lt;p&gt;Думаю, что не открою ни для кого Америки, если скажу, что один из начальных этапов раскрутки сайта - это &amp;ldquo;прогон по каталогам&amp;rdquo;, иными словами, массовая регистрация нового сайта в каталогах. Делается это в основном для повышения весомости сайта в глазах поисковиков и, в меньшей степени, привлечения дополнительных посетителей.
Очевидно, что вручную зарегистрировать сайт хотя бы в паре сотен каталогов - очень большой и нудный труд. Для автоматизации этого труда создано множество программ (на мой взгляд, одна из лучших - AllSubmitter) и открыто сервисов. &lt;a href="http://go.1ps.ru/pr/p.php?218508"&gt;http://1ps.ru&lt;/a&gt; отностися к числу последних и именно о нем и пойдет речь.&lt;/p&gt;
&lt;p&gt;Этот сервис предоставляет набор услуг по прогону сайта по каталогам, отличающихся разной степенью вашего участия. Самый дешевый тариф &amp;ldquo;&lt;a href="http://go.1ps.ru/pr/p.php?218508&amp;amp;http://1ps.ru/cost/profy/"&gt;Профи&lt;/a&gt;&amp;rdquo; всего за 60 рублей предоставит вам годичный доступ к интерфейсу сервиса. Вам необходимо будет самостоятельно заполнить анкету вашего сайта данными, которые будут отправлены в каталоги, и зарегистрировать ваш сайт в них. При этом специалисты сервиса заботливо сопроводили каждое поле анкеты комментариями о том, как правильно его заполнить, и даже человек далекий от SEO может легко разобраться.&lt;/p&gt;
&lt;p&gt;И так, я зарегистрировался на 1ps.ru и оплатил тариф &amp;ldquo;Профи&amp;rdquo; для этого сайта. За пол часа заполнил все необходимые поля и приступил к следующему шагу - выбору каталогов для регистрации.
Вот тут-то, имхо, товарищи из 1ps слегка схалтурили - интуитивно понятным интерфейс назвать нельзя. Методом тыка я пришел к следующему алгоритму:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Выбираем отображение по 3500 каталогов на страницу и задаем, насколько тИЦнутые и ПиАрнутые каталоги нам нужны. Жмем enter и терпеливо дожидаемся загрузки страницы.&lt;/li&gt;
&lt;li&gt;В поле &amp;ldquo;ПОИСК рубрик по ключевым словам:&amp;rdquo; вводим ключевые слова, которые должны быть в названиях интересующих нас рубрик каталогов. Жмем &amp;ldquo;найти&amp;rdquo; и терпеливо ждем. Если браузер предложит нам прервать исполнение сценариев на странице под предлогом, что они зависли - не ведемся и отказываемся от подобных предложений.&lt;/li&gt;
&lt;li&gt;Наконец, браузер нам радостно сообщил, что поиск завершен. После этого мы проглядываем список каталогов и подправляем категории на более подходящие, если есть варианты и выбираем вручную для тех каталогов, в которых автоматика ничего не нашла.&lt;/li&gt;
&lt;li&gt;Жмем завершить. Все, теперь можно переходить к самой регистрации.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;На этом шаге проблем с пониманием возникнуть не должно. Знай себе, дави кнопку &amp;ldquo;Отправить информацию в каталог&amp;rdquo; и наблюдай результаты. Единственный минус - не всегда кнопка &amp;ldquo;Отправить во все каталоги&amp;rdquo; срабатывает для всех каталогов. В чем проблема мне разбираться было лень, но факт имеет место.&lt;/p&gt;
&lt;p&gt;Вот, собственно, и все. Общее впечатление - штука мощная, но слегка не доведенная до ума.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Ап яндекса - 29.03.2008 !</title>
      <link>https://nevkontakte.com/2008/AP-Yandex-29-03-2008.html</link>
      <pubDate>Sun, 30 Mar 2008 05:38:05 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/AP-Yandex-29-03-2008.html</guid>
      <description>&lt;p&gt;Поздравляю всех веб-мастеров с очередным обновлением выдачи Яндекса и желаю вашим сайтам хороших позиций :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>OpenVZ - первые впечатления.</title>
      <link>https://nevkontakte.com/2008/OpenVZ-first-impressions.html</link>
      <pubDate>Wed, 26 Mar 2008 11:49:57 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/OpenVZ-first-impressions.html</guid>
      <description>&lt;p&gt;Вот, наконец у меня в руках оказалась полностью рабочая виртуальная машина со свеженьким CentOS 5.1 на борту.
Не долго думая, я приступил к осуществлению своего злобного плана - установке openVZ на него.&lt;/p&gt;
&lt;p&gt;Надо сказать, что эта попытка уже вторя по счету - неделю назад, впечатлившись их LiveCD, я уже пытался запинать это чудо на моей рабочей машинке, но ядро упорно не хотело ставиться, ссылаясь на неудовлетворенные зависимости, собирать из сорцов мне было лень, и посему я решил ставить openVZ на наиболее родную ему систему - CentOS. Еще несколько дней ушло выкачивание и установку системы, настройки сети для Qemu и прочую рутину. В итоге, сегодня после обеда я взялся за исполнение задуманного и удача сопутствовала мне :)&lt;/p&gt;
&lt;p&gt;Благодаря подробному &lt;a href="http://wiki.openvz.org/Quick_installation"&gt;руководству по установке и начальной настройке&lt;/a&gt; это не вызвало особых проблем.
Ядро загрузилось с первой попытки, сервис vz возвестил о своем успешном запуске, а созданная на скорую руку VPS отозвалась на пинг :) Ляпота B)&lt;/p&gt;
&lt;p&gt;Теперь в планах соорудить пару шаблончиков для VPS с базовым набором LAMP, а там - попробую набросать простейшую контрольную панель для VPS хостинга :roll:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Виртуализация и хостинг: мой поиск в мире технологий</title>
      <link>https://nevkontakte.com/2008/Virtualization-and-hosting-my-search-in-the-world-of-technology.html</link>
      <pubDate>Sun, 23 Mar 2008 12:57:00 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Virtualization-and-hosting-my-search-in-the-world-of-technology.html</guid>
      <description>&lt;p&gt;Последнее время в сферу моих интересов вошла такая многообещающая область, как разного рода виртуализация. В частности, последние пару недель я упорно ковыряюсь в двух направлениях: технологии VDS и VPS. В отдаленных планах маячит создание минимального набора скриптов для управления и автоматизации работы с VPS и VDS и возможно даже попробую смоделировать хостинговую площадку. Правда, пока все упирается в очень ограниченные ресурсы моей рабочей лошадки, но, думаю, для базовых экспериментов имеющихся возможностей должно хватить, а там, может, и апгрейд железа назреет :)&lt;/p&gt;
&lt;p&gt;По ходу своих исследований выяснил для себя точную разницу между VDS и VPS. Как ни странно, эти два термина зачастую смешивают воедино, хотя они изрядно отличаются. VPS предполагает создание некоторой виртуальной среды на базе ядра хост-системы с выделенными ресурсами, файловой системой и root-доступом к системе. При этом, как правило, доступ к ядру системы сильно ограничен. VDS же представляет собою полностью эмулируемый, вплоть до железа, выделенный сервер, внутри которого вы обладаете полной свободой действий.&lt;/p&gt;
&lt;p&gt;На данный момент для сферы VDS мне сильнее всех приглянулся &lt;a href="http://qemu.org"&gt;QEMU&lt;/a&gt; с ускоряющим модулем kQEMU; возможно, в некоторых отношениях он уступает XEN, но зато проще в настройке и использовании.&lt;/p&gt;
&lt;p&gt;А для VPS самое интересное решение из бесплатно распространяемых я нашел в лице &lt;a href="http://openvz.org"&gt;openVZ&lt;/a&gt;, open-source клона небезызвестного &lt;a href="http://www.parallels.com/en/products/virtuozzo/"&gt;Virtuozzo&lt;/a&gt;. Пощупать его пока удалось только в виде LiveCD, но впечатления остались сугубо положительные. Через час должна завершиться закачка дистрибутива CentOS, с которым openVZ дружит лучше всего и после установки его на виртуальную машину начнется очередной период веселья :)&lt;/p&gt;
&lt;p&gt;А теперь, чтобы не быть голословным поделюсь интересными ссылочками, на которые я наткнулся:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;a href="http://jack.kiev.ua/docs/qemu-doc-ru.html"&gt;http://jack.kiev.ua/docs/qemu-doc-ru.html&lt;/a&gt; - Слегка устаревший, но все еще очень полезный перевод официальной документации QEMU&lt;/li&gt;
&lt;li&gt;&lt;a href="http://mydebianblog.blogspot.com/search/label/%D1%8D%D0%BC%D1%83%D0%BB%D1%8F%D1%86%D0%B8%D1%8F"&gt;Записки Дебианщика&lt;/a&gt; - Здесь можно найти довольно много интересной информации, в частности, и про QEMU&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ru.gentoo-wiki.com/%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%92%D0%9C_qemu_%D0%B2_%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%83%D1%8E_%D1%81%D0%B5%D1%82%D1%8C"&gt;Подключение ВМ qemu в локальную сеть&lt;/a&gt; - Статья из Gentoo Wiki про то, как подключить виртуальную машину к локальной сети. Актуальна для большинства дистрибутивов.&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dedic.crimea.ua"&gt;http://dedic.crimea.ua&lt;/a&gt; - Много интересного о хостинговой индустрии.&lt;/li&gt;
&lt;/ol&gt;</description>
    </item>
    <item>
      <title>LAMPP - запуск от обычного пользователя.</title>
      <link>https://nevkontakte.com/2008/LAMPP-is-run-by-a-normal-user.html</link>
      <pubDate>Tue, 04 Mar 2008 03:46:48 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/LAMPP-is-run-by-a-normal-user.html</guid>
      <description>&lt;p&gt;Сейчас существует множество сборок apache+php+mysql для упрощения работы веб-разработчиков, которые позволяют легко и быстро настроить у себя на компьютере все, что нужно для веб-программирования.
В рунете наиболее популярным пакетом является Денвер, третье поколение которого не так давно стало доступно публике. Однако, самый популярный - не значит &amp;ldquo;единственный&amp;rdquo;. Из всех существующих, наибольшую конкуренцию Денверу может составить пакет XAMPP от проекта ApacheFriends. Впрочем, за рубежом он уже давно завоевал большое сообщество пользователей и единственное, что мешает ему потеснить Денвер - отсутствие русской локализации, которое отпугивает многих новичков.&lt;/p&gt;
&lt;p&gt;Сегодня мы поговорим о версии XAMPP для Linux, известного так же как LAMPP.
Те, кто пользовались им, знают, что для запуска сервера необходимы права root, но вводить всякий раз пароль - дело не веселое. Поэтому я сегодня расскажу о способе, позволяющему избавить себя от этой нудной необходимости.&lt;/p&gt;
&lt;p&gt;Немного теории.&lt;/p&gt;
&lt;p&gt;В большинстве файловых систем, используемых ОС семейства *NIX (и Linux в том числе), Есть такое свойство файла - SUID-бит, установка которого в 1 обеспечивает запуск исполняемого файла с правами владельца.
Чтобы установить такой бит для файла file_name, нужно от имени root выполнить команду
&lt;code&gt;chmod u+s file_name&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Перейдем к практике.
Для того, чтобы управляющий скрипт (/opt/lampp/lampp) согласился работать и от имени простого пользователя, необходимо перед кждой из этих строк добавить символ решетки:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nb"&gt;test&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;id -u&amp;#34;&lt;/span&gt; -ne &lt;span class="m"&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;then&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$de&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;XAMPP muss als root aufgerufen werden!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nv"&gt;$de&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;You need to start XAMPP as root!&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nb"&gt;exit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;fi&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Теперь приступим к самому главному.
Первым делом, научим запускаться от простого пользователя apache :)
Для этого выполним от имени root следующие действия:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod -R &lt;span class="m"&gt;0775&lt;/span&gt; /opt/lampp/logs
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chown -R root:users /opt/lampp/logs &lt;span class="c1"&gt;# вместо users здась нужно подставить имя группы, в которую входит ваш пользователь. Для openSUSE это и будет users, для Mandriva, как правило, такое же как имя пользвателя.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chown root:root /opt/lampp/bin/httpd
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod u+s /opt/lampp/bin/httpd
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Отлично, теперь от имени простого пользователя набираем: /opt/lampp/lampp startapache и если при это не возникает ошибок, то можно приступать к настройке mysql.&lt;/p&gt;
&lt;p&gt;Для этогонам нужно будет проделать следующие действия:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Добавить в файл /opt/lampp/etc/my.cnf в секцию [mysqld] строку
&lt;code&gt;user=aleks&lt;/code&gt;
где вместо aleks вы должны подставить имя своего пользователя.&lt;/li&gt;
&lt;li&gt;Выполнить от имени root команды
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chmod -R &lt;span class="m"&gt;0775&lt;/span&gt; /opt/lampp/var/mysql
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;chown -R root:users /opt/lampp/var/mysql &lt;span class="c1"&gt;# вместо users опять подставляем имя группы вашего пользователя.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Все, теперь mysql должен без проблем запускаться от простого пользователя B)&lt;/p&gt;
&lt;p&gt;ProFTPd и проблемы, связанные с ним.
Тут-то нас и подстерегает жестокий облом. :( ProFTPd ни за что не желает запускаться из-под простого пользователя, несмотря на все мои ухищрения с suid-битами и владельцами файлов. Выяснить, что же именно в нем не работает у меня не было особого желания, да и необходимости - для веб-разработки он практически не нужен. Однако, можно слегка облегчить себе жизнь на тот лучай, если на м все же понадобится его запустить.
Для этого нужно добавить &lt;code&gt;sudo&lt;/code&gt; в файл /opt/lampp/lampp в начало строчек
&lt;code&gt;/opt/lampp/sbin/proftpd &amp;gt; /opt/lampp/var/proftpd/start.err 2&amp;gt;&amp;amp;1&lt;/code&gt;
и
&lt;code&gt;kill cat /opt/lampp/var/proftpd.pid&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Пароль суперпользователя нам вводить все равно придется, но зато скрипт сам запросит его у нас, избавляя от необходимости набирать лишние команды. :)&lt;/p&gt;</description>
    </item>
    <item>
      <title>RemoveAd - облагораживаем Народ.Ру</title>
      <link>https://nevkontakte.com/2008/RemoveAd-ennoble-Narod-ru.html</link>
      <pubDate>Thu, 28 Feb 2008 09:30:30 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/RemoveAd-ennoble-Narod-ru.html</guid>
      <description>&lt;p&gt;&lt;strong&gt;RemoveAd - интро&lt;/strong&gt;
Идея проекта проста - нахождение и публикация решений по удалению рекламы, навешиваемой на многих бесплатных хостингах. Выполняется проект в рамках разминки для мозгов :)&lt;/p&gt;
&lt;p&gt;Теперь о важном.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Все хаки, убирающие рекламу, противоречат правилам бесплатных хостингов и могут привести к удалению аккаунтов, замеченных на паленом. Используйте их на свой страх и риск.&lt;/li&gt;
&lt;li&gt;Единственный случай, в котором такое решение может быть разумным - использование страницы с фреймами. Естественно, что никому не нравится, когда у него не сайте висят два баннера вместо двух - тогда рационально прибегнуть к хаку.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;RemoveAd на Народе&lt;/strong&gt;
В первой статье я обращусь к одному из самых популярных, несмотря на все свои недостатки, хостингов - narod.ru. Почти все веб-мастера прошли этап размещение своего первого сайтика на Народе, а некоторые пользуются им и по сей день.&lt;/p&gt;
&lt;p&gt;В качестве платы они навешивают в правый верхний угол баннер, который некоторым кажется достаточно раздражающим. Чтож, избавимся от него.&lt;/p&gt;
&lt;p&gt;Для этого нам понадобится вставить в любое место страницы вот такой код:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-html" data-lang="html"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;removead&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="c1"&gt;//alert(document.images.length);
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;&lt;/span&gt;    &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;bn&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;style&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;display&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;none&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;    &lt;span class="nx"&gt;clearTimeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;st&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;script&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;А в теге нужно добавить обработчик onload, чтобы эта функция вызывалась и убирала баннер:
&lt;code&gt;onload=&amp;quot;removead()&amp;quot;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;И наконец вот тут можно посмотреть на действующий пример:
&lt;a href="http://armovead.narod.ru/"&gt;http://armovead.narod.ru/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Не в контакте или почему был назван так этот блог.</title>
      <link>https://nevkontakte.com/2008/Not-in-contact-or-why-it-was-called-so-this-blog.html</link>
      <pubDate>Sat, 09 Feb 2008 16:22:27 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/Not-in-contact-or-why-it-was-called-so-this-blog.html</guid>
      <description>&lt;p&gt;В этой жизни я не доверяю двум вещам: гопам и тому, о чем все фанатично заявляют, что это круто. Догадались уже, о чем я? Вот-вот. Может ли кто-нибудь похвастаться, что у него среди друзей никто не зависает на &amp;ldquo;В контакте&amp;rdquo; и &amp;ldquo;Однокласниках&amp;rdquo;?&lt;/p&gt;
&lt;p&gt;Со мною этот бред начался примерно месяц назад. Жил я себе, жил, писал программы, учился. И вдруг в один прекрасный день к нам в комнату (мы там жили вдвоем с моим одногрупником) пришел наш сопоточник и поинтересовался, не зареганы ли мы на вконтакте. В ответ на отрицательное мотание головами он начал промывать мозги, как это круто и что нам надо срочно бежать и туда регаться. Там, мол, уже пол-потока сидит и несколько преподов. Я отнесся к этому со скепсисом, ибо помимо восторженных отзывов, я слышал и много нелицеприятных мнений о социальных сетях в целом и вконтакте в частности, а вот мой сотоварищ, хотя и знал не меньше моего, повелся и тем же вечером там зарегался. И все. Теперь на всех лекциях он сидел, уткнувшись в смартфон, и налаживал &amp;ldquo;контакты&amp;rdquo; с бывшими знакомыми и просто левыми людьми.&lt;/p&gt;
&lt;p&gt;Это был довольно болезненный удар по моему мировоззрению, ибо я думал, что большинство моих друзей люди разумные и не фанатики. А на практике оказалось, что чуть ли не половина из них сидит в той или иной социальной сети.&lt;/p&gt;
&lt;p&gt;Я стал непроизвольно прислушиваться к разговорам вокруг меня и в трех случаях из десяти речь шла о &amp;ldquo;в контакте&amp;rdquo;!..&lt;/p&gt;
&lt;p&gt;Воистину, Ктулху проснулся и зохавывает наши моски :( Вот только, вопреки расхожему мнению, Ктулху это не чешуйчатое существо с головой, как осьминог, а несколько мегабайт скриптов социальной сети. :crazy:&lt;/p&gt;
&lt;p&gt;Но это все лирика и иллюстрация к тому, что я скажу третьим пунтом в списке причин для недоверия социальным сетям.&lt;/p&gt;
&lt;p&gt;Вот этот список:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Идея полной деанонимизации. У любого человека, более-менее активно ведущего свои дела в сети, пусть даже вполне законные, со временем накапливается изрядное количество завистников и недоброжелателей, которые, если им представится удобный случай, могут запросто подложить вам свинью. Так же, думаю никто не станет со мною спорить, что владея информацией, ты владеешь силой; в наш век тотальной информатизации это особенно остро. Спрашивается, зачем давать злопыхателям информацию и власть, публикуя о себе лишнюю информацию? А идея социальных сетей подразумевает указание реальных данных о себе, начиная от имени и заканчивая местом учебы и работы. Естественно, это все не отностися к секретаршам и домохозяйкам, но мы сейчас не о них говорим.&lt;/li&gt;
&lt;li&gt;Злопыхатели - это еще пол беды. А вот представьте себе, к какому шикарному досье имеют доступ владельцы этих социальных сетей. Большой брат хочет все знать? |-|&lt;/li&gt;
&lt;li&gt;Я сам видел, как люди с пеной у рта доказывают, что социальные сети - это хорошо. Так же мне приходилось видеть, как наркоманы доказывают, что драг - это круто и вообще, мол попробуй - тебе понравится. Что, жизнь короче? Ну и по х**, зато яркая. Между прочим, до ужаса похожие картины&amp;hellip; Не знаю как вас, а меня такой фанатизм и нехорошее сходство настораживает.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Ктулху проснулся, или просто глупая мода, которая через пару месяцев отпадет? Не знаю. Но надеюсь, что это всего лишь дурацкая мода.&lt;/p&gt;</description>
    </item>
    <item>
      <title>b2evolution изнутри или портирование скина.</title>
      <link>https://nevkontakte.com/2008/b2evolution-inside-or-porting-skin.html</link>
      <pubDate>Fri, 01 Feb 2008 02:42:18 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/b2evolution-inside-or-porting-skin.html</guid>
      <description>&lt;p&gt;Все началось с того, что, выбрав b2evolution в качестве блогового движка этого сайта, я приступил к поиску какой-нибудь оригинальной шкуры для нее. Надо сказать что, по непонятным мне причинам, b2evo пользуется среди вебмастеров заметно меньшей популярностью, чем ее сестра Wordpress (оба эти движка являются потомками прекратившего свое существование b2), хотя как минимум не уступает ей по возможностям.&lt;/p&gt;
&lt;p&gt;Как следствие, хороших шкур для нее довольно мало. Тем не менее, мне удалось найти в репозитории целых две шкуры, которые после доработки могли стать тем, что мне надо. Не долго думая, я скачал их, залил в нужную папку и установил из админки. Тут меня ждало первое разочарование: блог ни в какую не хотел работать, заявляя, что шкура не найдена :( Что за бред? Я же только что ее установил и она была видна :? Захожу в админку - там она есть. Несколько минут медитации навли меня на мысль покопаться в файлах сккина - вдруг чего интересного найду? Там действительно оказался неприметный файл skininfo.html, в котором было написано, что скин предназначен для версии 1.9.х, у меня же стоит 2.4. Черт.&lt;/p&gt;
&lt;p&gt;Парочка интуитивно придуманных решений ни к чему не привела - с тех пор API блога так изменился, что почти половина вызовов функций в шаблонах вела себя черт знает как.&lt;/p&gt;
&lt;p&gt;Стало ясно, что без вдумчивого чтения документации мне не обойтись. Пришлось лезть на оффсайт и ворошить тамошнюю вики на предмет доков по шаблонам. К моему удовольствию, там нашлась статья по обновлению скинов версий 1.х на 2.х, в которой кое-что пояснялось. Однако очень быстро выяснилось, что этой статьи недостаточно, а кое-что из нее в моем шаблоне просто отсутствовало, и как тут быть не совсем ясно. Еще двадцать минут читания документации и в голове сформировался вывод: шаблоны документированы хреново и придется разбираться самому.&lt;/p&gt;
&lt;p&gt;На помощь мне пришел старый добрай способ &amp;ldquo;посмотри, как это сделано у других и сделай так же&amp;rdquo;. В результате пяти часов сравнения стиля Boogle (именно его я и начал портировать) со встроенным стилем evopress, изучения сорцов блога в надежде понять назначение и алгоритм работы всевозможных функций, я получил то, что хотел: дизайн, напоминающий гуглевский и еще несколько камней в огород разработчиков. Собственно, результат работы вы можете видеть в данный момент :)&lt;/p&gt;
&lt;p&gt;Что я сделал:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Сменил имена файлов шаблона на те, которые требовались для работы в новых версиях.&lt;/li&gt;
&lt;li&gt;Нашел и подставил новые функции вместо тех, которые использовались в старых версиях движка.&lt;/li&gt;
&lt;li&gt;Позаимствовал код отображения постов и боковой панели из шкуры evopress, заменив им старый код и адаптировав его для моего шаблона путем довольно-таки нудного ковыряния в css. Собственно, это и заняло большую часть времени.&lt;/li&gt;
&lt;li&gt;Выкинул старый код, напрямую обращавшийся к плагинам, заменив его контейнерами для виджетов.&lt;/li&gt;
&lt;li&gt;Мелкие косметические изменения в шаблоне.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Теперь о упомянутых камнях.
Камень номер раз: несмотря на то, что на оффсайте движок заявлен как freeware, в нем имеется adware код, который выводит спонсорскую ссылку внизу страницы в строке с копирайтами. Надо сказать, что патчик, решающий проблему, (по вполне очивидным причинам я его публиковать не стану B) ) занимает всего три строчки, и его написание заняло меньше 10 минут, но неприятный осадок остался.
Камень номер два: недостаточная документированность движка. К сожалению, этим грешат многие движки, но известны и обратные случаи. От части этот камень компенсируется достаточно простым кодом, но все равно обидно.
Последним камнем станет чрезвычайно сложные шаблоны: в них активно используются php функции движка, непонятно как работающие и недокументированные. Я придерживаюсь мнения, что в шаблонах кода должен бвть минимум, а все должно быть реализовано при помощи базовых конструкций шаблонизатора. Хорошим примером может служить система шаблонов в phpBB3: полная абстрагированность от php кода ядра и в то же время все необходимые управляющие конструкции. Еще один хороший пример - всем известный smarty, но, ИМХО, он все же слишком перегружен, слишком уж много в нем программирования.
К слову, самая плохая система шаблонов из мне известных используется в SMF - там весь HTML код хранится в виде строковых переменных php, что сильно напрягает при редактировании.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Сайт запущен!</title>
      <link>https://nevkontakte.com/2008/The-site-is-launched.html</link>
      <pubDate>Tue, 29 Jan 2008 23:44:54 +0000</pubDate>
      <guid>https://nevkontakte.com/2008/The-site-is-launched.html</guid>
      <description>&lt;p&gt;Сайт готов&amp;hellip; Остались лишь мелочи: чуть-чуть подогнать дизайн, настроить SEO и все. Что бы теперь еще такое с ним сотворить?..
Готов выслушать все мнения по этому поводу и прислушаться к ним :)&lt;/p&gt;
&lt;p&gt;А пока пойду донастраивать движок. приглянулся мне один шаблон - дак нет, он под старую версию и несовместим с последней, которую использую я :( Придется разбираться и портировать его вручную.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>