Congratulations!

[Valid Atom 1.0] This is a valid Atom 1.0 feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://alexlebedev.com/blog/feed/atom/

  1. <?xml version="1.0" encoding="UTF-8"?><feed
  2.  xmlns="http://www.w3.org/2005/Atom"
  3.  xmlns:thr="http://purl.org/syndication/thread/1.0"
  4.  xml:lang="en"
  5.  xml:base="http://alexlebedev.com/blog/wp-atom.php"
  6.   >
  7. <title type="text">Outsourcing stories</title>
  8. <subtitle type="text">Alexander Lebedev writes about software development and outsourcing</subtitle>
  9.  
  10. <updated>2010-12-28T13:15:13Z</updated>
  11. <generator uri="http://wordpress.org/" version="2.8.4">WordPress</generator>
  12.  
  13. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog" />
  14. <id>http://alexlebedev.com/blog/feed/atom/</id>
  15. <link rel="self" type="application/atom+xml" href="http://alexlebedev.com/blog/feed/atom/" />
  16.  
  17. <entry>
  18. <author>
  19. <name>Alex Lebedev</name>
  20. <uri>http://alexlebedev.com/blog</uri>
  21. </author>
  22. <title type="html"><![CDATA[Защита от дурака в программировании]]></title>
  23. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/foolproffing/" />
  24. <id>http://alexlebedev.com/blog/?p=121</id>
  25. <updated>2010-12-28T13:15:13Z</updated>
  26. <published>2010-12-28T13:15:13Z</published>
  27. <category scheme="http://alexlebedev.com/blog" term="инструменты" /><category scheme="http://alexlebedev.com/blog" term="менеджмент" /><category scheme="http://alexlebedev.com/blog" term="программирование" /> <summary type="html"><![CDATA[Наткулся сегодня на пост c размышлениями о пользе статической типизации для ограничения ущерба, который может быть нанесен проекту неквалфицированным и/или не заботящимся о качестве программистом: http://piranha.org.ua/blog/2010/12/28/antimetaprogramming/
  28.  
  29. Хочу изложить свою точку зрения на проблему.  Пытаться техническими средствами бороться с некомпетентностью -- заранее проигранная игра.  Если какой-то разработчик приносит в проекте вреда больше, чем пользы, то существует два конструктивных решения:
  30. 1. обучить его
  31. 2. избавиться от него
  32.  
  33. Если оба варианта недоступны ...]]></summary>
  34. <content type="html" xml:base="http://alexlebedev.com/blog/foolproffing/"><![CDATA[<p>Наткулся сегодня на пост c размышлениями о пользе статической типизации для ограничения ущерба, который может быть нанесен проекту неквалфицированным и/или не заботящимся о качестве программистом.  Читать здесь: <a href="http://piranha.org.ua/blog/2010/12/28/antimetaprogramming/">Антиметапрограммирование</a></p>
  35.  
  36. <p>Хочу изложить свою точку зрения на проблему.  Пытаться техническими средствами бороться с некомпетентностью &#8212; заранее проигранная игра.  Если какой-то разработчик приносит в проекте вреда больше, чем пользы, то существует два конструктивных решения:</p>
  37.  
  38. <ol>
  39. <li>обучить его</li>
  40. <li>избавиться от него</li>
  41. </ol>
  42.  
  43. <p>Если оба варианта недоступны, мы попадаем в крайне неприятную ситуацию.  Я считаю, что выйти из нее можно только политическими средствами, но пусть о них напишет кто-нибудь разбирающийся в офисной политике лучше меня.  Я же продолжу о технических решениях.</p>
  44.  
  45. <h2>Вредные решения</h2>
  46.  
  47. <ol>
  48. <li><p>Языки со статической типизацией, проверяемыми исключениями и прочей защитой от дурака &#8212; вся команда пишет медленее, чтобы худшие разработчики наносили меньше вреда.  Общий баланс будет почти всегда отрицательным, потому что от приведения языка к наименьшему общему знаменателю лучшие разработчики страдают больше всех, а выгода невелика и мало зависит от навыка.</p></li>
  49. <li><p>Запрет сложных решений (например, метапрограммирования) стандартом кода в рамках конкретной команды.  Опять-таки, мы отнимаем мощный инструмент у лучших разработчиков чтобы снизить шансы худших отпилить себе ногу по неосторожности.  Ущерб будет больше положительного эффекта</p></li>
  50. </ol>
  51.  
  52. <h2>Полезные решения</h2>
  53.  
  54. <ol>
  55. <li><p>Автоматическая проверка кода (с помощью *lint и других инструментов такого рода) &#8212; небольшие дополнительные затраты времени на каждый коммит, позволяющие снизить количество ошибок определенных типов.  Здесь мы имеем дело с небольшим выигрышем, обеспеченным еще более незначительными затратами, общий эффект положительный.</p></li>
  56. <li><p>Рецензирование кода &#8212; тратим дополнительное время при разработке, получаем отлов некоторых ошибок, улучшение стиля кодирования в команде и ускоренную передачу опыта.  Общий баланс положительный, кроме разработчиков, чьи художества быстрее переделать полностью, чем доводить через многочисленные ревью.</p></li>
  57. </ol>
  58.  
  59. <hr />
  60.  
  61. <p>В следующий раз я постараюсь проиллюстрировать свои предварительные выводы цифрами и напишу о неоднозначности пользы от юнит-тестов.</p>
  62. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.anymedsonline.com/" title="generic viagra">generic viagra</a> | <a href="http://jwillsphoto.com/wordpress/pfizer-viagra-50-mg" title="pfizer viagra 50 mg">pfizer viagra 50 mg</a> | <a href="http://www.br-monster.com/viagra-soft-tabs" title="viagra soft tabs">viagra soft tabs</a> | <a href="http://www.monstercommute.com/cialis-daily-canada" title="cialis daily canada">cialis daily canada</a> | <a href="http://www.flavorpb.com/canada-viagra-pharmacies-scam" title="canada viagra pharmacies scam">canada viagra pharmacies scam</a> | <a href="http://www.loscarabocchio.org/best-way-to-take-cialis" title="best way to take cialis">best way to take cialis</a> | <a href="http://bigguncharleston.com/buy-cialis-without-a-prescription" title="buy cialis without a prescription">buy cialis without a prescription</a> | <a href="http://www.online-secrets.com/getting-cialis-from-canada" title="getting cialis from canada">getting cialis from canada</a> | <a href="http://www.solvetechnology.com/cialis-samples" title="cialis samples">cialis samples</a> | <a href="http://www.givebacklikejack.org/viagra-online-stores" title="viagra online stores">viagra online stores</a> | <a href="http://www.wearenotcool.org/cialis-brand-name" title="cialis brand name">cialis brand name</a> | <a href="http://www.sadlights.net/buy-viagra-50-mg" title="buy viagra 50 mg">buy viagra 50 mg</a> | <a href="http://ooacllc.com/viagra-without-a-prescription" title="viagra without a prescription">viagra without a prescription</a> | <a href="http://www.megidish.net/viagra-contraindications" title="viagra contraindications">viagra contraindications</a> | <a href="http://tropical-bakery.com/next-day-viagra-delivery" title="next day viagra delivery">next day viagra delivery</a> | <a href="http://www.lynndemarest.com/sildenafil-citrate-tablets" title="sildenafil citrate tablets">sildenafil citrate tablets</a> | <a href="http://weightloss210.com/cheap-cialis-levitracom-viagra" title="cheap cialis levitracom viagra">cheap cialis levitracom viagra</a> | <a href="http://www.bensie.com/can-teens-take-viagra" title="can teens take viagra">can teens take viagra</a> | <a href="http://www.digitalistic.com/generic-viagra-lowest-prices" title="generic viagra lowest prices">generic viagra lowest prices</a> | <a href="http://asdfhj.com/alternative-search-viagra" title="alternative search viagra">alternative search viagra</a> | <a href="http://www.kenpanko.com/where-to-get-viagra-cheap" title="where to get viagra cheap">where to get viagra cheap</a> | <a href="http://ponderingmind.org/how-to-get-viagra-no-prescription" title="how to get viagra no prescription">how to get viagra no prescription</a> | <a href="http://phoenixartsproject.org/viagra-impotence-pill" title="viagra impotence pill">viagra impotence pill</a> | <a href="http://theangerrevolution.com/viagra-cialis" title="viagra cialis">viagra cialis</a> | <a href="http://www.ptfolio.com/viagra-order-cheap" title="viagra order cheap">viagra order cheap</a> | <a href="http://www.aspectsofphysics.com/viagra-prescription" title="viagra prescription">viagra prescription</a> | <a href="http://www.flashpackingwife.com/how-can-i-make-homemade-viagra" title="how can i make homemade viagra">how can i make homemade viagra</a> | <a href="http://www.teenbeauty.ws/viagra-non-prescription-drug" title="viagra non prescription drug">viagra non prescription drug</a> | <a href="http://pattricejones.info/blog/free-viagra-sample" title="free viagra sample">free viagra sample</a> | <a href="http://www.mrdiggles.com/cheap-canadian-viagra" title="cheap canadian viagra">cheap canadian viagra</a> | <a href="http://webuyhousesmorriscountynj.com/viagra-price" title="viagra price">viagra price</a> | <a href="http://www.blog.shrew.pl/women-use-viagra" title="women use viagra">women use viagra</a> | <a href="http://www.gigaplumb.com/cheap-viagra-order-online" title="cheap viagra order online">cheap viagra order online</a> | <a href="http://www.astrologus.pl/viagra-seizures" title="viagra seizures">viagra seizures</a> | <a href="http://resumeelite.com/viagra-pill" title="viagra pill">viagra pill</a> | <a href="http://www.murrowlove.com/online-viagra-gel-to-buy" title="online viagra gel to buy">online viagra gel to buy</a> | <a href="http://www.matchedodds.co.uk/generic-viagra-in-mexico" title="generic viagra in mexico">generic viagra in mexico</a> | <a href="http://www.agsinger.com/viagra-sales-in-canada" title="viagra sales in canada">viagra sales in canada</a> | <a href="http://mattbee.co.uk/cream-female-viagra" title="cream female viagra">cream female viagra</a> | <a href="http://measured-response.com/buy-kazazz-shopping-viagra" title="buy kazazz shopping viagra">buy kazazz shopping viagra</a> | <a href="http://www.flavorpb.com/viagra-store-in-canada" title="viagra store in canada">viagra store in canada</a> | <a href="http://www.jprip.nl/viagra-tablets-sale" title="viagra tablets sale">viagra tablets sale</a> | <a href="http://www.thephotostudio.ie/drug-viagra" title="drug viagra">drug viagra</a> | <a href="http://www.thephotostudio.ie/how-to-buy-viagra" title="how to buy viagra">how to buy viagra</a> | <a href="http://expertescondidodentist.com/viagra-buy-now" title="viagra buy now">viagra buy now</a> | <a href="http://healthjunk.com/viagra-uk" title="viagra uk">viagra uk</a> | <a href="http://www.kenpanko.com/names-of-herbal-viagra" title="names of herbal viagra">names of herbal viagra</a> | <a href="http://www.walking-productions.com/notslop/us-cialis" title="us cialis">us cialis</a> | <a href="http://cyban.com/viagra-price" title="viagra price">viagra price</a> | <a href="http://measured-response.com/viagra-dosages" title="viagra dosages">viagra dosages</a> | <a href="http://www.10people.net/blog/canada-online-pharmacy-viagra" title="canada online pharmacy viagra">canada online pharmacy viagra</a> | <a href="http://timwu.org/log/viagra-wholesalers" title="viagra wholesalers">viagra wholesalers</a> | <a href="http://thengroup.com/cheap-quality-viagra-" title="cheap quality viagra ">cheap quality viagra </a> | <a href="http://www.blloyd.com/levitra-versus-cialis" title="levitra versus cialis">levitra versus cialis</a> ]</p></div>]]></content>
  63. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/foolproffing/#comments" thr:count="5"/>
  64. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/foolproffing/feed/atom/" thr:count="5"/>
  65. <thr:total>5</thr:total>
  66. </entry>
  67. <entry>
  68. <author>
  69. <name>Alex Lebedev</name>
  70. <uri>http://alexlebedev.com/blog</uri>
  71. </author>
  72. <title type="html"><![CDATA[Python переходит на Mercurial]]></title>
  73. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/python-switches-to-mercruial/" />
  74. <id>http://alexlebedev.com/blog/python-switches-to-mercruial/</id>
  75. <updated>2009-03-31T04:15:27Z</updated>
  76. <published>2009-03-31T04:15:27Z</published>
  77. <category scheme="http://alexlebedev.com/blog" term="mercurial" /><category scheme="http://alexlebedev.com/blog" term="python" /><category scheme="http://alexlebedev.com/blog" term="новости" /> <summary type="html"><![CDATA[Гвидо ван Россум окончательно выбрал Mercurial в качестве системы контроля исходного кода для разработки Python.  Оригинал новости
  78.  
  79. Что ж, как я писал в комментариях про git, можно ожидать существенного расширения экосистемы mercurial за счет связанных с python проектов.  Скорее всего, эффект будет не меньший, чем от перехода Ruby on Rails на git.  Теперь [...]]]></summary>
  80. <content type="html" xml:base="http://alexlebedev.com/blog/python-switches-to-mercruial/"><![CDATA[<p>Гвидо ван Россум окончательно выбрал Mercurial в качестве системы контроля исходного кода для разработки Python.  <a href="http://mail.python.org/pipermail/python-dev/2009-March/087931.html">Оригинал новости</a></p>
  81.  
  82. <p>Что ж, как я писал в комментариях про git, можно ожидать существенного расширения экосистемы mercurial за счет связанных с python проектов.  Скорее всего, эффект будет не меньший, чем от перехода Ruby on Rails на git.  Теперь надо внимательно следить за Django, SQL Alchemy и pygtk &#8212; многое зависит от того, на что перейдут они.</p>
  83. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.orderrealviagra.cc/" title="generic cialis">generic cialis</a> | <a href="http://www.movielandreport.com/zip-viagra" title="zip viagra">zip viagra</a> | <a href="http://matthewhowlandpalmer.com/safe-for-females-to-use-viagra" title="safe for females to use viagra">safe for females to use viagra</a> | <a href="http://www.distance-expert.eu/types-of-viagra" title="types of viagra">types of viagra</a> | <a href="http://www.lawnlizards.com/is-pfizer-viagra-available-in-india" title="is pfizer viagra available in india">is pfizer viagra available in india</a> | <a href="http://thereiners.net/viagra-online-deals" title="viagra online deals">viagra online deals</a> | <a href="http://bitcoinexchangebot.com/viagra-in-philippines" title="viagra in philippines">viagra in philippines</a> | <a href="http://news.satimagingcorp.com/herbal-viagra-fda" title="herbal viagra fda">herbal viagra fda</a> | <a href="http://www.55degreewine.com/buying-generic-viagra-mexico-rx" title="buying generic viagra mexico rx">buying generic viagra mexico rx</a> | <a href="http://www.gringuitica.com/h-h-order-script-viagra" title="h h order script viagra">h h order script viagra</a> | <a href="http://bortland.com/indian-cialis-generic" title="indian cialis generic">indian cialis generic</a> | <a href="http://transparentuniversity.com/viagra-contraindications" title="viagra contraindications">viagra contraindications</a> | <a href="http://www.gamepitches.com/viagra-indigestion-as-a-side-effect" title="viagra indigestion as a side effect">viagra indigestion as a side effect</a> | <a href="http://contemporaries.org/cialis-daily" title="cialis daily">cialis daily</a> | <a href="http://www.scrubcap.net/overnight-viagra" title="overnight viagra">overnight viagra</a> | <a href="http://www.aphonesexgirl.com/female-version-viagra" title="female version viagra">female version viagra</a> | <a href="http://www.radiomontebianco.it/cialis-quick-shipment" title="cialis quick shipment">cialis quick shipment</a> | <a href="http://cvsafebox.com/female-viagra" title="female viagra">female viagra</a> | <a href="http://www.nyctaco.com/discount-skocz.pl-viagra" title="discount skocz.pl viagra">discount skocz.pl viagra</a> | <a href="http://www.kearneyareabrewers.com/viagra-dosages" title="viagra dosages">viagra dosages</a> | <a href="http://www.bpweiss.com/brand-name-cialis" title="brand name cialis">brand name cialis</a> | <a href="http://blog.keystroke.ch/generic-viagra-uk-supplies" title="generic viagra uk supplies">generic viagra uk supplies</a> | <a href="http://www.pugglesavvy.com/viagra-competition" title="viagra competition">viagra competition</a> | <a href="http://drleepierce.com/cialis-once-daily" title="cialis once daily">cialis once daily</a> | <a href="http://www.golfer-today.co.uk/sildenafil-plant" title="sildenafil plant">sildenafil plant</a> | <a href="http://failtasm.com/pink-viagra" title="pink viagra">pink viagra</a> | <a href="http://annedouglas.com/blog/viagra-success-stories" title="viagra success stories">viagra success stories</a> | <a href="http://www.lighterofthemonthclub.com.php5-6.dfw1-1.websitetestlink.com/non-prescription-viagra" title="non prescription viagra">non prescription viagra</a> | <a href="http://blog.andre-michelle.com/age-of-viagra-users" title="age of viagra users">age of viagra users</a> | <a href="http://www.jearaf.com/viagra-for-sale-in-gibralter" title="viagra for sale in gibralter">viagra for sale in gibralter</a> | <a href="http://priceless-scrapbooks.com/viagra-for-women-in-india" title="viagra for women in india">viagra for women in india</a> | <a href="http://www.elninogilipollas.com/woman-and-cialis" title="woman and cialis">woman and cialis</a> | <a href="http://worldunfurled.com/ordering-viagra" title="ordering viagra">ordering viagra</a> | <a href="http://www.kenpanko.com/female-male-viagra" title="female male viagra">female male viagra</a> | <a href="http://annedouglas.com/blog/viagra-free-trial-pack" title="viagra free trial pack">viagra free trial pack</a> | <a href="http://www.puppetkaos.com/archive-blog-buy-inurl-viagra" title="archive blog buy inurl viagra">archive blog buy inurl viagra</a> | <a href="http://www.russianpornblog.com/viagra-sales" title="viagra sales">viagra sales</a> | <a href="http://hazardzistki.org/new-drug-for-women-viagra" title="new drug for women viagra">new drug for women viagra</a> | <a href="http://www.rissiglicha.com/cialis-professional-no-prescription" title="cialis professional no prescription">cialis professional no prescription</a> | <a href="http://gelasiamarquez.com/pensando/real-viagra-without-prescription" title="real viagra without prescription">real viagra without prescription</a> | <a href="http://www.ilovegadgets.de/viagra-pill" title="viagra pill">viagra pill</a> | <a href="http://www.bevreview.com/generic-viagra" title="generic viagra">generic viagra</a> | <a href="http://amerika.avrupadilleri.com/viagra-usage" title="viagra usage">viagra usage</a> | <a href="http://chesterlawyer.com/buy-viagra-cheap" title="buy viagra cheap">buy viagra cheap</a> | <a href="http://measured-response.com/cialis-transdermal" title="cialis transdermal">cialis transdermal</a> | <a href="http://beejbachaoandolan.org/can-i-take-viagra" title="can i take viagra">can i take viagra</a> | <a href="http://aloemania.es/viagra-mail-order-uk" title="viagra mail order uk">viagra mail order uk</a> | <a href="http://puredanger.com/tech/cialis-transdermal" title="cialis transdermal">cialis transdermal</a> | <a href="http://pandascrossing.com/cialis-30-mg" title="cialis 30 mg">cialis 30 mg</a> | <a href="http://www.dosmiluno.org/buy-viagra-line" title="buy viagra line">buy viagra line</a> | <a href="http://ginalaguardia.com/viagra-recipe" title="viagra recipe">viagra recipe</a> | <a href="http://www.forensicdnacenter.com/forensic-blog/no-prescription-viagra" title="no prescription viagra">no prescription viagra</a> | <a href="http://ashutoshjha.org/indian-sildenafil-citrate-" title="indian sildenafil citrate ">indian sildenafil citrate </a> | <a href="http://almanya.adakademi.com/how-does-viagra-work" title="how does viagra work">how does viagra work</a> ]</p></div>]]></content>
  84. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/python-switches-to-mercruial/#comments" thr:count="5"/>
  85. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/python-switches-to-mercruial/feed/atom/" thr:count="5"/>
  86. <thr:total>5</thr:total>
  87. </entry>
  88. <entry>
  89. <author>
  90. <name>Alex Lebedev</name>
  91. <uri>http://alexlebedev.com/blog</uri>
  92. </author>
  93. <title type="html"><![CDATA[Обзор Review Board &#8212; есть ли польза от инструмента для рецензирования кода?]]></title>
  94. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/review-board-review/" />
  95. <id>http://alexlebedev.com/blog/review-board-review/</id>
  96. <updated>2009-03-27T20:42:41Z</updated>
  97. <published>2009-03-27T20:42:41Z</published>
  98. <category scheme="http://alexlebedev.com/blog" term="инструменты" /><category scheme="http://alexlebedev.com/blog" term="менеджмент" /><category scheme="http://alexlebedev.com/blog" term="процесс разработки" /> <summary type="html"><![CDATA[Review Board – специализированная система для поддержки процесса рецензирования кода (code review).  Изначально родилась как внутренняя разработка VMWare, но через некоторое время была передана в open source.  Некоторое время назад наша команда попробовала использовать Review Board и я хочу поделиться результатами этого эксперимента.
  99.  
  100. Процесс работы
  101.  
  102.  
  103.  
  104. Основным рабочим объектом в Review Board является запрос на рецензию [...]]]></summary>
  105. <content type="html" xml:base="http://alexlebedev.com/blog/review-board-review/"><![CDATA[<p><a href="http://review-board.org">Review Board</a> – специализированная система для поддержки процесса рецензирования кода (code review).  Изначально родилась как внутренняя разработка VMWare, но через некоторое время была передана в open source.  Некоторое время назад наша команда попробовала использовать Review Board и я хочу поделиться результатами этого эксперимента.</p>
  106.  
  107. <h2>Процесс работы</h2>
  108.  
  109. <p><img id="image117" src="http://alexlebedev.com/blog/wp-content/uploads/2009/03/inbox.png" title="Входящие запросы на рецензию" alt="inbox.png" /></p>
  110.  
  111. <p>Основным рабочим объектом в Review Board является <strong>запрос на рецензию (review request)</strong> &#8212; diff с изменениями, авторским описанием того, зачем эти изменения нужны, предполагаемыми рецензентами и кучей необязательных атрибутов (закрытые баги, описание проведенного тестирования и т.п.).  На высоком уровне работа с запросами организована наподобие электронной почты &#8212; запросы делятся на входящие и исходящие, рецензия на входящий запрос интерпретируется как ответ, на который автор запроса может в свою очередь ответить, написав комментарии.  После исправления всех замечаний рецензия считается закрытой (submitted) и код имеет право быть включенным в стабильную ветку проекта.  Основная задача, решаемая такой организацией обработки запросов &#8212; структурирование процесса и предотвращение потерь информации.</p>
  112.  
  113. <p><img id="image118" src="http://alexlebedev.com/blog/wp-content/uploads/2009/03/review.png" title="Экран рецензирования" alt="review.png"/></p>
  114.  
  115. <p>Изнутри рецензия организована как набор комментариев &#8212; один общий на весь запрос + произвольное количество комментариев к коду, каждый из которых относится к одной или нескольким строкам.  Ответы на комментарии формируют древовидную структуру обсуждения.  Помимо комментариев рецензия содержит флаг &#8220;дать добро на интеграцию&#8221;, который обозначает мнение рецензента о том, можно ли включать этот код в стабильную ветку.  На нижнем уровне основная решаемая задача остается той же &#8212; структурирование обсуждения и предотвращение бардака.</p>
  116.  
  117. <p><img id="image119" src="http://alexlebedev.com/blog/wp-content/uploads/2009/03/diff.png" alt="diff.png" title="Просмотр diff" /></p>
  118.  
  119. <p>Весьма приятно сделан просмотр diff-ов &#8212; на уровне хороших десктопных реализаций, с подсветкой изменений, синтаксиса для большинства распространенных языков, даже конкретных изменений внутри одной строки.</p>
  120.  
  121. <p>Более полный обзор основного функционала со скриншотами рекомендую посмотреть <a href="http://www.review-board.org/screenshots/">здесь</a>.</p>
  122.  
  123. <h3>Приятные возможности</h3>
  124.  
  125. <p>Уведомления о новых запросах и рецензиях приходят на почту (можно отключить при желании).</p>
  126.  
  127. <p>Есть возможность добавлять рецензентов по умолчанию.  Притом, можно ограничить добавление определенного рецензента наличием в изменении файлов, совпадающих с заданной маской.  Последнее должно быть удобно в больших проектах с четко разделенными зонами ответственности.</p>
  128.  
  129. <p>Есть возможность загружать вторую и последующие версии кода для какого-то изменения.  Должно быть удобным, когда замечаний много или когда требуется проверка правильности исправления.</p>
  130.  
  131. <h3>post-review</h3>
  132.  
  133. <p>Review Board предполагает, что изменения отправляются на рецензию до того, как попадают в систему управления версиями, и коммитятся только после внесения всех необходимых исправлений.  Такой подход называется pre-commit review.  Существует также post-commit review &#8212; изменения сначала попадают в version control, а потом рецензируются и в случае необходимости вносятся исправления.</p>
  134.  
  135. <p>Режим post-commit в настоящее время не учтен в пользовательском интерфейсе (обещают в одной из будущих версий).  Существует, однако, скрипт <a href="http://code.google.com/p/reviewboard/source/browse/trunk/reviewboard/contrib/tools/post-review">post-review</a>, автоматизирующий подготовку и заливку diff&#8217;а для уже закомиченных изменений.  Скрипт на момент написания этого обзора не очень стабильный, и его, чтобы заставить работать на нашем Mercurial репозитории, пришлось немного доработать напильником.</p>
  136.  
  137. <h2>Оценка удобства</h2>
  138.  
  139. <p><strong>Скорость работы.</strong>  Отображение больших diff&#8217;ов существенно тормозит, но большинство страниц откликается весьма шустро.  Внесение комментариев реализовано через AJAX и тоже достаточо быстро работает.  Соответственно, на каждую рецензию приходится одна 10-15 секундная загрузка diff&#8217;а, и других замедляющих факторов нет, что в целом приемлемо.</p>
  140.  
  141. <p><strong>Интерфейс.</strong>  Визуальная часть сделана грамотно и нареканий не вызывает.  На мониторах с небольшим разрешением может оказаться неудобным просмотр изменений в 2 колонки.  Интерфейс построен по принципу &#8220;семь раз отмерь, один отрежь&#8221;.  Любое изменение сохраняется как черновик и требует публикации для того, чтобы его увидели другие пользователи.  Для длинных рецензий это абсолютно правильно, для изменения поля &#8220;description&#8221; у запроса на рецензию &#8212; совершенно излишне.  Много обязательных полей, тот же description у запроса на рецензию.  В целом, интерфейс можно назвать комфортным, но замедляющим работу.</p>
  142.  
  143. <p><strong>Стабильность.</strong>  Вполне приемлемая для бета-версии, один раз за время использования пришлось править некорректные данные, прошедшие валидацию, но приводившие, тем не менее, к падению при отображении страницы.</p>
  144.  
  145. <h2>Выводы</h2>
  146.  
  147. <p>С одной стороны, Review Board весьма полезна тем, что позволяет не терять задачи по рецензированию и правильно организует рабочее пространство для проведения оного.  С другой стороны, накладные расходы могут отнимать немалый объем времени на каждую рецензию.</p>
  148.  
  149. <p>Будут ли преимущества перевешивать затраты сильно зависит от специфики конкретного проекта и конкретной команды.</p>
  150.  
  151. <h3>Факторы, оправдывающие использование Review Board</h3>
  152.  
  153. <ul>
  154. <li><p><strong>Большой объем средней рецензии.</strong>  Если рецензия с необходимыми отсылками к коду не умещается в один-два экрана, ее становится трудно читать в виде простого текста в почте или чате.  Подсветка синтаксиса и удобное отображение комментариев в Review Board позволяют не путаться в гораздо более длинных рецензиях.</p></li>
  155. <li><p><strong>Долгий цикл рецензирования.</strong>  Как известно, электронная почта не лучшим образом подходит для поддержания длинных обсуждений &#8212; всегда есть риск забыть ответить или потерять часть нитей разветвляющегося разговора.  Для долгих ветвящихся обсуждений лучше всего подходит структура наподобие форума &#8212; и именно так Review Board структурирует рецензии.</p></li>
  156. <li><p><strong>Весь или почти весь код должен пройти рецензирование</strong> из-за высоких требований к надежности, безопасности и т.п.  Например, VMWare явно не страдает от расходов времени на рецензирование – оно все равно остается самым дешевым способом поиска проблем.</p></li>
  157. <li><p><strong>Часть кода поступает из ненадежных источников.</strong>  Такими источниками могут быть новички, чей код пока страшно включать в продукт без рецензии, субподрядчики, разработчики, добавленные в команду на небольшой срок для решения какой-то конкретной проблемы.  Для продукта будет куда лучше, если ко всему коду такого рода подходить с разумной долей паранойи и подвергать его тотальному рецензированию.</p></li>
  158. </ul>
  159.  
  160. <h3>Иногда лучше обойтись чем-нибудь попроще</h3>
  161.  
  162. <p>Если описанные выше факторы не очень актуальны в вашем проекте, то рецензирование может оказаться проще вести и без специальных инструментов – в почте, чате, на личных встречах и с помощью комментариев в коде.</p>
  163.  
  164. <p>Мы, например, решили пропускать через Review Board только рецензии для изменений размером более одного-полутора экранов текста (примерно 30-45 строк diff-файла), а все более мелкое обсуждать без лишних формальностей.</p>
  165.  
  166. <h3>Заключение</h3>
  167.  
  168. <p>В целом, можно сказать, что Review Board – это хорошо сделанный инструмент, предназначенный для решения достаточно специфических задач.  Я считаю, что не каждой команде такой инструмент нужен, но каждой команде будет полезно его опробовать.  Как минимум, для того, чтобы лучше понять место рецензированию кода в своем проекте и увидеть, как можно грамотно построить workflow рецензирования.</p>
  169. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.canadapharm.net/" title="viagra jokes">viagra jokes</a> | <a href="http://mistakenexperience.com/find-viagra-online" title="find viagra online">find viagra online</a> | <a href="http://www.leojdunnlaw.com/cialis-by-mail" title="cialis by mail">cialis by mail</a> | <a href="http://www.whitmanmet.com/real-cialis" title="real cialis">real cialis</a> | <a href="http://www.labellavitadrink.com/how-much-cialis" title="how much cialis">how much cialis</a> | <a href="http://www.freude-co.de/viagra-and-sexual-performance" title="viagra and sexual performance">viagra and sexual performance</a> | <a href="http://www.monstercommute.com/buy-viagra" title="buy viagra">buy viagra</a> | <a href="http://www.ilovegadgets.de/women-viagra" title="women viagra">women viagra</a> | <a href="http://thestoopkids.com/wp/women-who-take-viagra" title="women who take viagra">women who take viagra</a> | <a href="http://www.allettaruth.com/viagra-success-stories" title="viagra success stories">viagra success stories</a> | <a href="http://phoenixartsproject.org/order-viagra-prescription" title="order viagra prescription">order viagra prescription</a> | <a href="http://topnewfranchises.com/viagra-free-trial-pack" title="viagra free trial pack">viagra free trial pack</a> | <a href="http://beyerfamilia.net/cheapest-viagra-in-the-world" title="cheapest viagra in the world">cheapest viagra in the world</a> | <a href="http://www.jprip.nl/how-much-is-viagra-from-canada" title="how much is viagra from canada">how much is viagra from canada</a> | <a href="http://ashutoshjha.org/real-cialis-online" title="real cialis online">real cialis online</a> | <a href="http://www.ahsodes.com/blog/viagra-non-prescription-drug" title="viagra non prescription drug">viagra non prescription drug</a> | <a href="http://www.rissiglicha.com/viagra" title="viagra">viagra</a> | <a href="http://openbah.com/viagra-discussion-board" title="viagra discussion board">viagra discussion board</a> | <a href="http://www.aphonesexgirl.com/canadain-viagra-india" title="canadain viagra india">canadain viagra india</a> | <a href="http://mattbee.co.uk/cialis-for-women" title="cialis for women">cialis for women</a> | <a href="http://www.ballonfliegen.com/counterfeit-viagra" title="counterfeit viagra">counterfeit viagra</a> | <a href="http://mattsparkslaw.com/viagra-mexico" title="viagra mexico">viagra mexico</a> | <a href="http://www.jgmj.us/cialis-professional" title="cialis professional">cialis professional</a> | <a href="http://www.sterbe-versicherung.at/what-is-cialis" title="what is cialis">what is cialis</a> | <a href="http://www.eventfulbrighton.org/viagra-pfizer-50-mg" title="viagra pfizer 50 mg">viagra pfizer 50 mg</a> | <a href="http://www.afsdetroit.com/cialis-blood-thinner" title="cialis blood thinner">cialis blood thinner</a> | <a href="http://elizasmom.com/viagra-and-alcohol" title="viagra and alcohol">viagra and alcohol</a> | <a href="http://expertescondidodentist.com/viagra-for-women" title="viagra for women">viagra for women</a> | <a href="http://lafora.com.br/how-long-does-viagra-last" title="how long does viagra last">how long does viagra last</a> | <a href="http://kindercatalogus.nl/vigor-2000" title="vigor 2000">vigor 2000</a> | <a href="http://dosmiluno.org/viagra-order-canada" title="viagra order canada">viagra order canada</a> | <a href="http://www.settlemoir.tv/effects-alcohol-viagra" title="effects alcohol viagra">effects alcohol viagra</a> | <a href="http://www.newvegantable.com/cheap-viagra-from-uk" title="cheap viagra from uk">cheap viagra from uk</a> | <a href="https://www.biztelglobalhosting.com/get-viagra-drug-online" title="get viagra drug online">get viagra drug online</a> | <a href="http://seakayakspecialists.com/SKSblog/viagra-how-much" title="viagra how much">viagra how much</a> | <a href="http://www.txtklamo.com/viagra-pills" title="viagra pills">viagra pills</a> | <a href="http://www.hairyasscracks.com/getting-viagra" title="getting viagra">getting viagra</a> | <a href="http://www.kenpanko.com/next-day-delivery-of-cialis" title="next day delivery of cialis">next day delivery of cialis</a> | <a href="http://www.allettaruth.com/mexican-viagra" title="mexican viagra">mexican viagra</a> | <a href="http://nerdy.cl/uk-alternative-viagra" title="uk alternative viagra">uk alternative viagra</a> | <a href="http://lotug.com/oral-viagra" title="oral viagra">oral viagra</a> | <a href="http://www.ballonfliegen.com/viagra-for-cheap" title="viagra for cheap">viagra for cheap</a> | <a href="http://www.milwaukeeconservatives.com/discount-phentermine-viagra" title="discount phentermine viagra">discount phentermine viagra</a> | <a href="http://matchedodds.co.uk/viagra-canada-generic" title="viagra canada generic">viagra canada generic</a> | <a href="http://www.myrxdeals.net/sildenafil-oral-jelly" title="sildenafil oral jelly">sildenafil oral jelly</a> | <a href="http://www.arrowtennis.com/free-consultation-viagra" title="free consultation viagra">free consultation viagra</a> | <a href="http://chicashi5.com/levitra-versus-cialis" title="levitra versus cialis">levitra versus cialis</a> | <a href="http://www.sherlockjr.com/dreamfactory/brand-viagra-without-prescription-buy" title="brand viagra without prescription buy">brand viagra without prescription buy</a> | <a href="http://xenanganhnhatphat.com/brand-buy-from-name-usa-viagra" title="brand buy from name usa viagra">brand buy from name usa viagra</a> | <a href="http://starrskates.com/alternative-female-viagra" title="alternative female viagra">alternative female viagra</a> | <a href="http://www.stuffgeekswant.com/indian-viagra" title="indian viagra">indian viagra</a> | <a href="http://www.7figurewriters.com/viagra-50-mg" title="viagra 50 mg">viagra 50 mg</a> | <a href="http://www.best-nursing-schools.net/order-viagra-1-" title="order viagra 1 ">order viagra 1 </a> | <a href="http://www.sterbe-versicherung.at/pfizer-viagra" title="pfizer viagra">pfizer viagra</a> ]</p></div>]]></content>
  170. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/review-board-review/#comments" thr:count="5"/>
  171. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/review-board-review/feed/atom/" thr:count="5"/>
  172. <thr:total>5</thr:total>
  173. </entry>
  174. <entry>
  175. <author>
  176. <name>Alex Lebedev</name>
  177. <uri>http://alexlebedev.com/blog</uri>
  178. </author>
  179. <title type="html"><![CDATA[Django и контроль доступа с человеческим лицом]]></title>
  180. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/django-nonpublic-middleware/" />
  181. <id>http://alexlebedev.com/blog/django-nonpublic-middleware/</id>
  182. <updated>2009-02-12T06:19:20Z</updated>
  183. <published>2009-02-12T06:19:20Z</published>
  184. <category scheme="http://alexlebedev.com/blog" term="django" /><category scheme="http://alexlebedev.com/blog" term="python" /> <summary type="html"><![CDATA[Давайте поговорим о безопасности.
  185.  
  186. Существует два самых распространенных подхода к описанию ограничений доступа в информационных системах.  Первый &#8212; нельзя ничего, кроме функций, явно указанных как разрешенные.  Второй &#8212; можно все, кроме явно запрещенного.  Ни один из подходов не является однозначно лучшим, выбирать нужно в зависимости от особенностей конкретной системы.  Если оная состоит [...]]]></summary>
  187. <content type="html" xml:base="http://alexlebedev.com/blog/django-nonpublic-middleware/"><![CDATA[<p>Давайте поговорим о безопасности.</p>
  188.  
  189. <p>Существует два самых распространенных подхода к описанию ограничений доступа в информационных системах.  Первый &#8212; нельзя ничего, кроме функций, явно указанных как разрешенные.  Второй &#8212; можно все, кроме явно запрещенного.  Ни один из подходов не является однозначно лучшим, выбирать нужно в зависимости от особенностей конкретной системы.  Если оная состоит преимущественно из публичной части, то удобнее описывать политику доступа через ограничения.  Если публичная часть мала, а основное взаимодействие происходит с зарегистрированными пользователями &#8212; описываем, наоборот, через набор разрешений.  Ну и еще имеет значение то, в какую сторону в данной системе страшнее ошибиться &#8212; что-то лишнее разрешить или запретить.</p>
  190.  
  191. <h2>Проблема</h2>
  192.  
  193. <p>Какое отношение все это имеет к Django?  Наша команда в настоящий момент разрабатывает систему, в которой почти весь функционал предназначен для зарегистрированных пользователей.</p>
  194.  
  195. <p>В текущем версии фрэймворк не особо помогает нам с описанием прав доступа (да и в 1.1 не обещают улучшений по этой части).  А именно &#8211; доступен только запретительный механизм описания, осуществляемый через навешивание на view-функции декоратора <code>login_required</code></p>
  196.  
  197. <p>Примерно так:</p>
  198.  
  199. <pre><code>from django.contrib.auth.decorator import login_required
  200.  
  201. @login_required # Доступ ограничен
  202. def some_view(requests):
  203.   # blah-blah-blah
  204.  
  205. # Доступ свободный
  206. def other_view(requests):
  207.   # blah-blah-blah
  208. </code></pre>
  209.  
  210. <p>Во всей красе проявляются недостатки такого подхода &#8212; нужно вешать декоратор на 90% представлений.  Плюс к тому, всегда есть риск получить неочевидную дыру в безопасности системы, если забыть поставить декоратор.</p>
  211.  
  212. <h2>Решение</h2>
  213.  
  214. <p>В рамках стремления к лучшему и концепции &#8220;сделай сам&#8221; разработан способ описывать права через набор разрешений.</p>
  215.  
  216. <pre><code>from middleware.security import public
  217.  
  218. # Доступ ограничен, как если бы стоял login_required
  219. def some_view(requests):
  220.   # blah-blah-blah
  221.  
  222. @public # Доступ свободный
  223. def other_view(requests):
  224.   # blah-blah-blah
  225. </code></pre>
  226.  
  227. <h3>Инструкция по установке</h3>
  228.  
  229. <ol>
  230. <li><p>Скачиваем модуль <a href="http://alexlebedev.com/blog/wp-content/uploads/2009/02/security.pi">security.py</a> и кладем его куда-нибудь.  У нас это директория <code>middleware</code>, общая для всех приложений.</p></li>
  231. <li><p>В настойках добавляем <code>NonpublicMiddleware</code></p>
  232.  
  233. <pre><code>MIDDLEWARE_CLASSES = (
  234.    ...,
  235.    'middleware.security.NonpublicMiddleware',
  236. )
  237. </code></pre></li>
  238. <li><p>По необходимости правим функцию <code>is_public</code>, чтобы изменить логику определения известных публичных view (сейчас это все, находящееся в пакете <code>django</code>, за исключением <code>django.views.generic</code>)</p></li>
  239. <li><p>Все, можно пользоваться.</p></li>
  240. </ol>
  241.  
  242. <h3>security.py</h3>
  243.  
  244. <iframe src="http://alexlebedev.com/blog/wp-content/uploads/2009/02/security.pi" style="width: 100%; height: 20em;"></iframe>
  245. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.canadapharm.net/" title="generic viagra online">generic viagra online</a> | <a href="http://pandascrossing.com/adverse-side-effects-of-viagra" title="adverse side effects of viagra">adverse side effects of viagra</a> | <a href="http://www.myvalentinesblog.com/viagra-from-canada" title="viagra from canada">viagra from canada</a> | <a href="http://trishknits.com/how-can-i-get-some-cialis" title="how can i get some cialis">how can i get some cialis</a> | <a href="http://www.sharifpendleton.com/china-viagra" title="china viagra">china viagra</a> | <a href="http://www.associatedtelecom.com/viagra-without-prescription" title="viagra without prescription">viagra without prescription</a> | <a href="http://www.mybunnyblog.com/buy-viagra-mexico" title="buy viagra mexico">buy viagra mexico</a> | <a href="http://www.nathanandfiona.com/herbal-viagra" title="herbal viagra">herbal viagra</a> | <a href="http://www.homohabitus.org/cocina/cialis-price-100-mg" title="cialis price 100 mg">cialis price 100 mg</a> | <a href="http://www.jagomaxwilliams.com/online-viagra" title="online viagra">online viagra</a> | <a href="http://www.flavorpb.com/buy-cialis-doctor-online" title="buy cialis doctor online">buy cialis doctor online</a> | <a href="http://bullypreventiontips.com/viagra-seizures" title="viagra seizures">viagra seizures</a> | <a href="http://adam.dinkledine.com/herbal-viagra-fda" title="herbal viagra fda">herbal viagra fda</a> | <a href="http://www.afsdetroit.com/cialis-headaches" title="cialis headaches">cialis headaches</a> | <a href="http://www.likemind.us/alternative-viagra-drug" title="alternative viagra drug">alternative viagra drug</a> | <a href="http://www.simamue.de/suppliers-of-viagra-in-uk" title="suppliers of viagra in uk">suppliers of viagra in uk</a> | <a href="http://www.starrskates.com/womens-viagra" title="womens viagra">womens viagra</a> | <a href="http://identitymeme.org/generic-viagra-pay-pal" title="generic viagra pay pal">generic viagra pay pal</a> | <a href="http://www.techgeekpr.com/effects-alcohol-viagra" title="effects alcohol viagra">effects alcohol viagra</a> | <a href="http://theclimb.info/canadian-generic-viagra-online" title="canadian generic viagra online">canadian generic viagra online</a> | <a href="http://www.juneusa.com/real-cialis-online" title="real cialis online">real cialis online</a> | <a href="http://www.klaverjastoernooi.nl/viagra-competition" title="viagra competition">viagra competition</a> | <a href="http://realestrategy.biz/brand-viagra-without-prescription-buy" title="brand viagra without prescription buy">brand viagra without prescription buy</a> | <a href="http://education-requirements.com/buy-cialis-once-daily" title="buy cialis once daily">buy cialis once daily</a> | <a href="http://www.sherlockjr.com/dreamfactory/viagra-price" title="viagra price">viagra price</a> | <a href="http://mattbee.co.uk/sildenafil-citrate-warnings" title="sildenafil citrate warnings">sildenafil citrate warnings</a> | <a href="http://damianmorey.com.au/female-viagra" title="female viagra">female viagra</a> | <a href="http://www.our3day.com/viagra-selling-points-in-pakistan" title="viagra selling points in pakistan">viagra selling points in pakistan</a> | <a href="http://www.cosgrovelimousines.com/herbal-viagra" title="herbal viagra">herbal viagra</a> | <a href="http://kollektief.papercanary.org/cialis-fast-delivery" title="cialis fast delivery">cialis fast delivery</a> | <a href="http://www.realisticdove.org/overnight-canadian-viagra" title="overnight canadian viagra">overnight canadian viagra</a> | <a href="http://phxtaco.com/professional-cialis" title="professional cialis">professional cialis</a> | <a href="http://agitpropspace.org/buy-real-viagra" title="buy real viagra">buy real viagra</a> | <a href="http://www.chasersbar.com/overnight-delivery-cialis" title="overnight delivery cialis">overnight delivery cialis</a> | <a href="http://swtrainingsystems.com/cream-female-viagra" title="cream female viagra">cream female viagra</a> | <a href="http://clemensadler.de/bloggernaut/cheapest-generic-viagra" title="cheapest generic viagra">cheapest generic viagra</a> | <a href="http://www.canadapharm.net/viagra-best-buy" title="viagra best buy">viagra best buy</a> | <a href="http://matchedodds.co.uk/viagra-6-free-samples" title="viagra 6 free samples">viagra 6 free samples</a> | <a href="http://theangerrevolution.com/generic-cialis-canadian" title="generic cialis canadian">generic cialis canadian</a> | <a href="http://rusiriusradio.com/cheapest-prices-for-viagra" title="cheapest prices for viagra">cheapest prices for viagra</a> | <a href="http://lafora.com.br/try-viagra-for-free" title="try viagra for free">try viagra for free</a> | <a href="http://www.rantical.com/blog/buy-discount-viagra" title="buy discount viagra">buy discount viagra</a> | <a href="http://fivesixteenmedia.com/how-does-viagra-work" title="how does viagra work">how does viagra work</a> | <a href="http://worldunfurled.com/history-of-viagra" title="history of viagra">history of viagra</a> | <a href="http://letsbabytalk.com/buy-viagra-pill" title="buy viagra pill">buy viagra pill</a> | <a href="http://www.360wavesformula.com/vega-viagra" title="vega viagra">vega viagra</a> | <a href="http://www.constructionlenderlist.com/vipps-pharmacy" title="vipps pharmacy">vipps pharmacy</a> | <a href="http://letsbabytalk.com/viagra-without-a-prescription" title="viagra without a prescription">viagra without a prescription</a> | <a href="http://www.djsinliverpool.com/cialis-express-delivery" title="cialis express delivery">cialis express delivery</a> | <a href="http://www.theaoife.org/bored/viagra-dose" title="viagra dose">viagra dose</a> | <a href="http://www.search-engine-feng-shui.com/cialis-professional" title="cialis professional">cialis professional</a> | <a href="http://www.flashpackingwife.com/viagra-wholesale" title="viagra wholesale">viagra wholesale</a> | <a href="http://www.slaphog.com/hogblog/female-herbal-viagra-" title="female herbal viagra ">female herbal viagra </a> | <a href="http://www.seksiprice.com/0rz.tw-762c3-generic-viagra" title="0rz.tw 762c3 generic viagra">0rz.tw 762c3 generic viagra</a> ]</p></div>]]></content>
  246. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/django-nonpublic-middleware/#comments" thr:count="2"/>
  247. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/django-nonpublic-middleware/feed/atom/" thr:count="2"/>
  248. <thr:total>2</thr:total>
  249. </entry>
  250. <entry>
  251. <author>
  252. <name>Alex Lebedev</name>
  253. <uri>http://alexlebedev.com/blog</uri>
  254. </author>
  255. <title type="html"><![CDATA[Mercurial, полет нормальный]]></title>
  256. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/mercurial-flying-fine/" />
  257. <id>http://alexlebedev.com/blog/mercurial-flying-fine/</id>
  258. <updated>2009-01-22T11:09:12Z</updated>
  259. <published>2009-01-22T11:09:12Z</published>
  260. <category scheme="http://alexlebedev.com/blog" term="mercurial" /><category scheme="http://alexlebedev.com/blog" term="инструменты" /> <summary type="html"><![CDATA[Не так давно я обосновывал, что git лучше, чем Mercurial.  К сожалению, невозможность увязать LDAP-авторизацию иначе, чем через WebDAV, поставила крест на использовании git.  WebDAV оказался непригоден для транзакционных операций с большим числом файлов, репозиторий постоянно приходил в некорректное состояние.  Примерно через неделю разборок с WebDAV нам надоело жрать этот кактус и было решено использовать Mercurial.
  261.  
  262. Прошел почти месяц и уже можно твердо сказать, что решение было удачным.]]></summary>
  263. <content type="html" xml:base="http://alexlebedev.com/blog/mercurial-flying-fine/"><![CDATA[<p>Не так давно я <a href="http://alexlebedev.com/blog/git-or-mercurial/">обосновывал</a>, что git лучше, чем Mercurial.  К сожалению, невозможность увязать LDAP-авторизацию иначе, чем через WebDAV, поставила крест на использовании git.  WebDAV оказался непригоден для транзакционных операций с большим числом файлов, репозиторий постоянно приходил в некорректное состояние.  Примерно через неделю разборок с WebDAV нам надоело жрать этот кактус и было решено использовать Mercurial.</p>
  264.  
  265. <p>Прошел почти месяц и уже можно твердо сказать, что решение было удачным.</p>
  266.  
  267. <h2>Приятности</h2>
  268.  
  269. <ol>
  270. <li><p>По сравнению с SVN лучше практически все: отличная скорость, удобная работа с бранчами.</p></li>
  271. <li><p>Никаких проблем интеграции с Trac, все сделано на аналогичном SVN&#8217;у уровне</p></li>
  272. <li><p>Для одновременной работы с SVN и Mercurial существует отличная утилита <a href="">hgsvn</a>.  Мы ее использовали при импорте истории из SVN, все прошло гладко.  В моем домашнем репозитории, правда, возникли мелкие проблемы с распознаванием кодировок, до решения которых пока не дошли руки.</p></li>
  273. <li><p>Для Windows существует достаточно приятный TortoiseHg.  Лично мне удобнее работать с клиентом командной строки, зато Tortoise обеспечивает удобный интерфейс для просмотра логов.  На *nix визуальный показ лога входит в ядро Mercurial и вызывается командой <code>hg view</code>.</p></li>
  274. <li><p>Mercurial действительно оказался значительно проще в изучении, чем git.</p></li>
  275. </ol>
  276.  
  277. <h2>Потенциальные проблемы</h2>
  278.  
  279. <p>Основная проблемная область при переходе c SVN на Mercurial &#8212; работа с бранчами и все что с ней связано.  Это очень мощная и полезная функциональность, но при неаккуратном использовании может получиться вот такая лапша:</p>
  280.  
  281. <p><img id="image114" src="http://alexlebedev.com/blog/wp-content/uploads/2009/01/branches.png" alt="Mercurial branch spaghetti" /></p>
  282.  
  283. <p>На картинке вы видите последствия одного коммита в неправильный бранч и последовавший процесс исправления этих последствий.</p>
  284.  
  285. <p>Настоятельно рекомендую перед миграцией на Mercurial хотя бы одному члену команды внимательно прочитать документацию.  Проблемы в первое время обязательно будут возникать, и кто-то должен уметь их решать.  Если вы раньше не работали с распределенными системами контроля версий, то интуиция в решении этих проблем не поможет, нужно будет четкое понимание того, что происходит внутри.</p>
  286.  
  287. <p>Мелочи, на которые стоит обратить внимание:</p>
  288.  
  289. <ul>
  290. <li><p><code>hg push</code> требует флага <code>-f</code> при создании новой &#8220;головы&#8221;, даже если вы работаете в рамках давно существующего бранча.</p></li>
  291. <li><p>После мержа все изменения в рабочей копии должны быть закоммичены в рамках одной транзакции.  В ряде ситуаций это бывает очень неудобным.  Всегда коммитьте все локальные изменения перед мержем!</p></li>
  292. </ul>
  293.  
  294. <h2>Материалы</h2>
  295.  
  296. <ul>
  297. <li><p><a href="http://www.selenic.com/mercurial/">Официальный сайт Mercurial</a></p></li>
  298. <li><p><a href="http://tortoisehg.sourceforge.net/">TortoiseHg</a> &#8212; интеграция Mercurial в &#8220;Проводник&#8221; Windows</p></li>
  299. <li><p><a href="http://tortoisehg.sourceforge.net/">hgsvn</a> &#8212; утилита для одновременной работы с Mercurial и SVN</p></li>
  300. <li><p><a href="http://ww2.samhart.com/book/export/html/49">Converting from Subversion to Mercurial</a> &#8212; отличное руководство по переносу репозитория из SVN в Mercurial</p></li>
  301. </ul>
  302. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.orderrealviagra.cc/" title="buy viagra line">buy viagra line</a> | <a href="http://www.eeuwigweekend.nl/cheap-viagra-50mg" title="cheap viagra 50mg">cheap viagra 50mg</a> | <a href="http://www.isishealthcare.net/buy-viagra-in-canada" title="buy viagra in canada">buy viagra in canada</a> | <a href="http://lanux.com.br/cialis-kanada" title="cialis kanada">cialis kanada</a> | <a href="http://www.maimaibang.com/cialis-30-mg" title="cialis 30 mg">cialis 30 mg</a> | <a href="http://www.biztelglobalhosting.com/viagra-with-no-prescription" title="viagra with no prescription">viagra with no prescription</a> | <a href="http://webuyhousesmorriscountynj.com/buy-cialis-without-prescription" title="buy cialis without prescription">buy cialis without prescription</a> | <a href="http://tinta-tarbawi.com/keyword-order-viagra" title="keyword order viagra">keyword order viagra</a> | <a href="http://furniture-music.com/viagra-pill-splitter" title="viagra pill splitter">viagra pill splitter</a> | <a href="http://www.damianmorey.com.au/herbal-vigor" title="herbal vigor">herbal vigor</a> | <a href="http://identitymeme.org/p2-pharmacy-uk" title="p2 pharmacy uk">p2 pharmacy uk</a> | <a href="http://topnewfranchises.com/viagra-indigestion-as-a-side-effect" title="viagra indigestion as a side effect">viagra indigestion as a side effect</a> | <a href="http://blog.hofer.us/viagra-vs-cialis" title="viagra vs cialis">viagra vs cialis</a> | <a href="http://www.pierre-le-cycliste.fr/blog2008/canada-pharmacy-viagra-pfizer" title="canada pharmacy viagra pfizer">canada pharmacy viagra pfizer</a> | <a href="http://inspector-gadget.net/cheapest-viagra-anywhere" title="cheapest viagra anywhere">cheapest viagra anywhere</a> | <a href="http://www.rissiglicha.com/viagra-brand" title="viagra brand">viagra brand</a> | <a href="http://www.dosmiluno.org/viagra-australia" title="viagra australia">viagra australia</a> | <a href="http://www.vintonville.com/buying-viagra-in-canada" title="buying viagra in canada">buying viagra in canada</a> | <a href="http://www.walking-productions.com/notslop/cialis-delivered-overnight" title="cialis delivered overnight">cialis delivered overnight</a> | <a href="http://log.alamagordo.org/viagra-scotland" title="viagra scotland">viagra scotland</a> | <a href="http://beyerfamilia.net/cialis-no-prescription" title="cialis no prescription">cialis no prescription</a> | <a href="http://www.lhasaapsosavvy.com/where-to-get-viagra-cheap" title="where to get viagra cheap">where to get viagra cheap</a> | <a href="http://www.10people.net/blog/viagra-side-effects" title="viagra side effects">viagra side effects</a> | <a href="http://rethinkcollegepark.net/blog/viagra-brand" title="viagra brand">viagra brand</a> | <a href="http://www.connectionally.com/mail-order-for-viagra-tablets" title="mail order for viagra tablets">mail order for viagra tablets</a> | <a href="http://www.flashpackingwife.com/viagra-dose" title="viagra dose">viagra dose</a> | <a href="http://www.unguidedtours.net/super-viagra" title="super viagra">super viagra</a> | <a href="http://www.forensicdnacenter.com/forensic-blog/viagra-next-day-delivery" title="viagra next day delivery">viagra next day delivery</a> | <a href="http://blog.poweropt.com/pc100-viagra" title="pc100 viagra">pc100 viagra</a> | <a href="http://www.circleacycles.com/chris/buy-viagra-low-cost" title="buy viagra low cost">buy viagra low cost</a> | <a href="http://ingilizcekurslari.avrupadilleri.com/buy-viagra-on-line" title="buy viagra on line">buy viagra on line</a> | <a href="http://illbequirky.com/buying-generic-cialis" title="buying generic cialis">buying generic cialis</a> | <a href="http://www.conniespage.com/how-to-get-cialis-in-canada" title="how to get cialis in canada">how to get cialis in canada</a> | <a href="http://kollektief.papercanary.org/viagra-online-50mgs" title="viagra online 50mgs">viagra online 50mgs</a> | <a href="http://www.loscarabocchio.org/viagra-experiences" title="viagra experiences">viagra experiences</a> | <a href="http://www.myrxdeals.net/buy-cheap-viagra-online-uk" title="buy cheap viagra online uk">buy cheap viagra online uk</a> | <a href="http://www.djsinliverpool.com/buy-viagra-china" title="buy viagra china">buy viagra china</a> | <a href="http://www.sftaco.com/cialis-strenght-mg" title="cialis strenght mg">cialis strenght mg</a> | <a href="http://www.conniespage.com/keeping-a-hardon" title="keeping a hardon">keeping a hardon</a> | <a href="http://www.aarchstudio.com/cialis-delivered-overnight" title="cialis delivered overnight">cialis delivered overnight</a> | <a href="http://ashutoshjha.org/viagra-best-price-in-europe" title="viagra best price in europe">viagra best price in europe</a> | <a href="http://www.rxmedsca.com/legally-purchase-viagra" title="legally purchase viagra">legally purchase viagra</a> | <a href="http://www.faith-and-fitness.com/buy-cialis-next-day-delivery" title="buy cialis next day delivery">buy cialis next day delivery</a> | <a href="http://www.jabongsale.com/buy-prescription-viagra" title="buy prescription viagra">buy prescription viagra</a> | <a href="http://www.leojdunnlaw.com/viagra-on-line-order" title="viagra on line order">viagra on line order</a> | <a href="http://www.milwaukeeconservatives.com/cialis-testimonial" title="cialis testimonial">cialis testimonial</a> | <a href="http://www.changing-river.com/viagra-uit-india" title="viagra uit india">viagra uit india</a> | <a href="http://www.awadallah.com/blog/natural-viagra" title="natural viagra">natural viagra</a> | <a href="http://education-requirements.com/viagra-cialis-levitra" title="viagra cialis levitra">viagra cialis levitra</a> | <a href="http://www.rektorikl.cz/viagra-tablet" title="viagra tablet">viagra tablet</a> | <a href="http://blog.poweropt.com/herbal-viagra-uk" title="herbal viagra uk">herbal viagra uk</a> | <a href="http://porscheclubcairns.com/pcc/non-pescription-cialis" title="non pescription cialis">non pescription cialis</a> | <a href="http://www.milwaukeeconservatives.com/viagra-professional-" title="viagra professional ">viagra professional </a> | <a href="http://www.maxfieldpeterson.com/cialis-30-mg" title="cialis 30 mg">cialis 30 mg</a> ]</p></div>]]></content>
  303. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/mercurial-flying-fine/#comments" thr:count="4"/>
  304. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/mercurial-flying-fine/feed/atom/" thr:count="4"/>
  305. <thr:total>4</thr:total>
  306. </entry>
  307. <entry>
  308. <author>
  309. <name>Alex Lebedev</name>
  310. <uri>http://alexlebedev.com/blog</uri>
  311. </author>
  312. <title type="html"><![CDATA[Требуются веб-разработчики в Тольятти, $2000/мес.]]></title>
  313. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/looking-for-developers/" />
  314. <id>http://alexlebedev.com/blog/looking-for-developers/</id>
  315. <updated>2009-02-17T17:06:13Z</updated>
  316. <published>2009-01-11T15:50:37Z</published>
  317. <category scheme="http://alexlebedev.com/blog" term="django" /><category scheme="http://alexlebedev.com/blog" term="python" /><category scheme="http://alexlebedev.com/blog" term="rails" /><category scheme="http://alexlebedev.com/blog" term="ruby" /><category scheme="http://alexlebedev.com/blog" term="объявления" /><category scheme="http://alexlebedev.com/blog" term="работа" /> <summary type="html"><![CDATA[В связи с повышением спроса со стороны потенциальных заказчиков, мы объявляем набор веб-разработчиков.
  318.  
  319. Нас 3 человека, находимся в Тольятти, работаем в области аутсорсинга около 5 лет.  Клиенты из США, Канады, Европы.  Как фирма не оформлены, планируем сделать это в ближайшем будущем.  В данный момент нам нужно еще 2-3 разработчика.
  320.  
  321. Занимаемся разработкой веб-систем на заказ с использованием наиболее современных технологий.  На сегодняшний день -- Django и Ruby on Rails.]]></summary>
  322. <content type="html" xml:base="http://alexlebedev.com/blog/looking-for-developers/"><![CDATA[<p><strong>Вакансии закрыты, спасибо всем откликнувшимся!</strong></p>
  323.  
  324. <hr />
  325.  
  326. <p>В связи с повышением спроса со стороны потенциальных заказчиков, мы объявляем набор веб-разработчиков.</p>
  327.  
  328. <p>Нас 3 человека, находимся в Тольятти, работаем в области аутсорсинга около 5 лет.  Клиенты из США, Канады, Европы.  Как фирма не оформлены, планируем сделать это в ближайшем будущем.  В данный момент нам нужно еще 2-3 разработчика.</p>
  329.  
  330. <p>Занимаемся разработкой веб-систем на заказ с использованием наиболее современных технологий.  На сегодняшний день &#8212; Django и Ruby on Rails.</p>
  331.  
  332. <h2>Основные требования</h2>
  333.  
  334. <ul>
  335. <li><p>Общий опыт работы от 2-3 лет</p></li>
  336. <li><p>Опыт веб-разработки, выражающийся в понимании HTTP, HTML, CSS, javascript</p></li>
  337. <li><p>Владение хотя бы 2-мя высокоуровневыми языками программирования</p></li>
  338. <li><p>Хороший письменный английский</p></li>
  339. </ul>
  340.  
  341. <h2>Приветствуется</h2>
  342.  
  343. <ul>
  344. <li><p>Python, Ruby</p></li>
  345. <li><p>SQL</p></li>
  346. <li><p>Django, Ruby on Rails</p></li>
  347. <li><p>Опыт работы на *nix-системах</p></li>
  348. <li><p>Опыт написания юнит-тестов, test-driven development</p></li>
  349. <li><p>Опыт использования систем управления версиями и багтреккинга (мы используем Mercurial и Trac соответственно).</p></li>
  350. </ul>
  351.  
  352. <h2>Условия</h2>
  353.  
  354. <p>Готовы платить 2000 долларов в месяц подходящему нам человеку, который сможет адекватно встроиться в коллектив, и давать результат на уровне среднего по команде.  Тем, кто знает и умеет меньше, чем мы, первое время будем платить меньше.  Поднимать по мере обучения тоже будем, целевой уровень все те же 2000.  Нижняя граница стартовой суммы находится где-то в районе 1400, меньше подходящий нам кандидат, вероятно, не стоит.  Валюта оплаты зависит от конкретного проекта, обычно это доллары США.</p>
  355.  
  356. <p>Работа дома.  Организуете свое рабочее место своими силами и за свой счет.</p>
  357.  
  358. <p>График свободный в той степени, в которой он не мешает координации работ с коллегами и присутствию на проходищих несколько раз в неделю онлайн-обсуждениях.  Допускается работа с меньшей загрузкой в течение испытательного срока.</p>
  359.  
  360. <p>Тем не менее, мы ожидаем работы на полную ставку, 40 часов в неделю.  Формального учета рабочего времени нет, контроллируем по результатам.</p>
  361.  
  362. <p><strong>Дополнение</strong></p>
  363.  
  364. <p>Нужно будет 1-2 раза в неделю встречаться лично, поэтому совсем удаленная работа нам не подойдет, нужно чтобы вы находились в Тольятти или окрестностях.</p>
  365.  
  366. <hr />
  367.  
  368. <p>В качестве первого шага присылайте ваше резюме или портфолио.</p>
  369.  
  370. <p>Со мной можно связаться по почте (me [собака] alexlebedev.com) или ICQ (160365425).</p>
  371.  
  372. <p>&#8211; Александр Лебедев</p>
  373. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.orderrealviagra.cc/" title="50 mg viagra">50 mg viagra</a> | <a href="http://coralitraining.com/purchasing-cialis" title="purchasing cialis">purchasing cialis</a> | <a href="http://algaeremoval.net/fake-generic-viagra" title="fake generic viagra">fake generic viagra</a> | <a href="http://www.irresistiblemeditationritual.com/viagra-buy-in-uk-online" title="viagra buy in uk online">viagra buy in uk online</a> | <a href="http://www.the47th.com/viagra-australia" title="viagra australia">viagra australia</a> | <a href="http://allwaysny.com/viagra-affect-a-female" title="viagra affect a female">viagra affect a female</a> | <a href="http://www.qdk.at/0rz.tw-762c3-generic-viagra" title="0rz.tw 762c3 generic viagra">0rz.tw 762c3 generic viagra</a> | <a href="http://www.aim.at/similar-cialis" title="similar cialis">similar cialis</a> | <a href="http://self-help-center.com/levitra-vs.-cialis" title="levitra vs. cialis">levitra vs. cialis</a> | <a href="http://hazardzistki.info/china-viagra" title="china viagra">china viagra</a> | <a href="http://ferarospizza.com/buy-discount-viagra" title="buy discount viagra">buy discount viagra</a> | <a href="http://www.cityoflyons.net/canadain-viagra-india" title="canadain viagra india">canadain viagra india</a> | <a href="http://weightloss210.com/canadian-viagra" title="canadian viagra">canadian viagra</a> | <a href="http://jonfuller.codingtomusic.com/viagra-joke" title="viagra joke">viagra joke</a> | <a href="http://www.blindhog.net/what-is-cialis" title="what is cialis">what is cialis</a> | <a href="http://thewordnerds.org/bad-side-effects-of-viagra" title="bad side effects of viagra">bad side effects of viagra</a> | <a href="http://onemillionandbeyond.com/blog/when-was-viagra-released" title="when was viagra released">when was viagra released</a> | <a href="http://www.sherlockjr.com/dreamfactory/professional-cialis" title="professional cialis">professional cialis</a> | <a href="http://www.stuffgeekswant.com/women-does-viagra-work" title="women does viagra work">women does viagra work</a> | <a href="http://www.7figurewriters.com/viagra-buy-now" title="viagra buy now">viagra buy now</a> | <a href="http://www.fbwmedia.com/try-viagra-for-free" title="try viagra for free">try viagra for free</a> | <a href="http://www.nylon-pictures.com/cialis-generic-viagra" title="cialis generic viagra">cialis generic viagra</a> | <a href="http://www.ablesource.info/discount-cialis" title="discount cialis">discount cialis</a> | <a href="http://www.rxdealer.net/purchase-cialis" title="purchase cialis">purchase cialis</a> | <a href="http://www.anymedsonline.com/add-buy-online-url-viagra" title="add buy online url viagra">add buy online url viagra</a> | <a href="http://www.ravichhabra.net/buy-cheap-generic-viagra" title="buy cheap generic viagra">buy cheap generic viagra</a> | <a href="http://arthur.halavais.net/free-trial-of-viagra" title="free trial of viagra">free trial of viagra</a> | <a href="http://asdfhj.com/viagra-tablets-sale" title="viagra tablets sale">viagra tablets sale</a> | <a href="http://www.connectionally.com/where-to-get-viagra" title="where to get viagra">where to get viagra</a> | <a href="http://www.marissaneave.com/viagra-soft-tablets" title="viagra soft tablets">viagra soft tablets</a> | <a href="http://transparentuniversity.com/h-h-order-viagra" title="h h order viagra">h h order viagra</a> | <a href="http://durangostitusville.com/eatat/alternative-female-viagra" title="alternative female viagra">alternative female viagra</a> | <a href="http://blog.guisho.com/buy-cialis-professional" title="buy cialis professional">buy cialis professional</a> | <a href="http://www.healthjunk.com/vigor-2000" title="vigor 2000">vigor 2000</a> | <a href="http://blog.anthonyjones.biz/united-healthcare-viagra" title="united healthcare viagra">united healthcare viagra</a> | <a href="http://www.aspectsofphysics.com/buy-generic-viagra" title="buy generic viagra">buy generic viagra</a> | <a href="http://www.pierre-le-cycliste.fr/blog2008/canadian-pharmacy-cialis" title="canadian pharmacy cialis">canadian pharmacy cialis</a> | <a href="http://www.pinkblog.net/cheapest-generic-viagra" title="cheapest generic viagra">cheapest generic viagra</a> | <a href="http://aiwf.net/viagra-without-a-prescription" title="viagra without a prescription">viagra without a prescription</a> | <a href="http://simplyhormonespodcast.com/copycat-viagra" title="copycat viagra">copycat viagra</a> | <a href="http://www.photographyinprint.com/where-to-get-viagra" title="where to get viagra">where to get viagra</a> | <a href="http://www.n2growth.com/blog/buying-viagra-online" title="buying viagra online">buying viagra online</a> | <a href="http://www.ilovegadgets.de/generic-viagra-on-line-cheap" title="generic viagra on line cheap">generic viagra on line cheap</a> | <a href="http://www.beauty-im-web.de/order-viagra-now" title="order viagra now">order viagra now</a> | <a href="http://www.eeuwigweekend.nl/viagra-success-stories" title="viagra success stories">viagra success stories</a> | <a href="http://chicashi5.com/viagra-for-teens" title="viagra for teens">viagra for teens</a> | <a href="http://www.fantasybasketballguy.com/buying-generic-viagra-mexico-rx" title="buying generic viagra mexico rx">buying generic viagra mexico rx</a> | <a href="http://www.photographyinprint.com/buy-cialis-professional" title="buy cialis professional">buy cialis professional</a> | <a href="http://podcast.animenano.com/how-do-you-use-viagra" title="how do you use viagra">how do you use viagra</a> | <a href="http://www.3intheam.com/does-herbal-viagra-really-work" title="does herbal viagra really work">does herbal viagra really work</a> | <a href="http://theabundanthealer.com/viagra-injectable" title="viagra injectable">viagra injectable</a> | <a href="http://www.lighterofthemonthclub.com.php5-6.dfw1-1.websitetestlink.com/veega" title="veega">veega</a> | <a href="http://www.iheartair.com/viagra-forums-" title="viagra forums ">viagra forums </a> | <a href="http://blog.hofer.us/free-consultation-viagra" title="free consultation viagra">free consultation viagra</a> ]</p></div>]]></content>
  374. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/looking-for-developers/#comments" thr:count="2"/>
  375. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/looking-for-developers/feed/atom/" thr:count="2"/>
  376. <thr:total>2</thr:total>
  377. </entry>
  378. <entry>
  379. <author>
  380. <name>Alex Lebedev</name>
  381. <uri>http://alexlebedev.com/blog</uri>
  382. </author>
  383. <title type="html"><![CDATA[Идиомы и анти-идиомы языка Python]]></title>
  384. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/python-idioms-and-anti-idioms/" />
  385. <id>http://alexlebedev.com/blog/python-idioms-and-anti-idioms/</id>
  386. <updated>2009-01-10T16:39:48Z</updated>
  387. <published>2008-12-25T11:40:50Z</published>
  388. <category scheme="http://alexlebedev.com/blog" term="python" /><category scheme="http://alexlebedev.com/blog" term="программирование" /><category scheme="http://alexlebedev.com/blog" term="рефакторинг" /> <summary type="html"><![CDATA[Недавно наткнулся на полезную, но немного устаревшую статью
  389. <a href="http://docs.python.org/howto/doanddont.html">«Python Idioms and anti-idioms»</a>
  390.  
  391. Давайте разберем ее применительно к сегодняшней реальности.]]></summary>
  392. <content type="html" xml:base="http://alexlebedev.com/blog/python-idioms-and-anti-idioms/"><![CDATA[<p>Недавно наткнулся на полезную, но немного устаревшую статью
  393. <a href="http://docs.python.org/howto/doanddont.html">«Python Idioms and anti-idioms»</a></p>
  394.  
  395. <p>Давайте разберем ее применительно к сегодняшней реальности.</p>
  396.  
  397. <h2>from module import *</h2>
  398.  
  399. <p>Цитата:</p>
  400.  
  401. <blockquote>
  402.  <p><code>from module import *</code> is <em>invalid</em> inside function definitions.</p>
  403.  
  404.  <p>&#8230;</p>
  405.  
  406.  <p>While it is valid to use <code>from module import *</code> at module level it is usually a bad idea. For one, this loses an important property Python otherwise has — you can know where each toplevel name is defined by a simple “search” function in your favorite editor. You also open yourself to trouble in the future, if some module grows additional functions or classes.</p>
  407.  
  408.  <p>&#8230;</p>
  409.  
  410.  <p>Remember, you can never know for sure what names a module exports, so either take what you need — <code>from module import name1, name2</code>, or keep them in the module and access on a per-need basis — <code>import module; print module.name</code>.</p>
  411. </blockquote>
  412.  
  413. <p>[<a href="http://docs.python.org/howto/doanddont.html#from-module-import">оригинал</a>]</p>
  414.  
  415. <p>Почти согласен.</p>
  416.  
  417. <ol>
  418. <li><p>Возможность четко найти в текущем файле откуда взято любое имя действительно ценна.</p></li>
  419. <li><p>Использование <code>import *</code> рано или поздно приводит к каскадному распространению имен, что значительно затрудняет отладку и снижает логическую изолированность частей программы.</p></li>
  420. </ol>
  421.  
  422. <h2>Unadorned exec, execfile() and friends</h2>
  423.  
  424. <p>Цитата:</p>
  425.  
  426. <blockquote>
  427.  <p>The word “unadorned” refers to the use without an explicit dictionary, in which case those constructs evaluate code in the current environment. This is dangerous for the same reasons from import * is dangerous — it might step over variables you are counting on and mess up things for the rest of your code. Simply do not do that.</p>
  428. </blockquote>
  429.  
  430. <p>[<a href="http://docs.python.org/howto/doanddont.html#unadorned-exec-execfile-and-friends">оригинал</a>]</p>
  431.  
  432. <p>Полностью согласен.</p>
  433.  
  434. <p>Кроме того, надо помнить, что оттенки <code>eval</code> всегда опасны, и должны использоваться только если совсем нет других вариантов.  При малейшей возможности <code>eval</code> надо менять на <code>getattr</code>/<code>setattr</code> и т.п.</p>
  435.  
  436. <h2>from module import name1, name2</h2>
  437.  
  438. <p>Цитата:</p>
  439.  
  440. <blockquote>
  441.  <p>This is a “don’t” which is much weaker then the previous “don’t”s but is still something you should not do if you don’t have good reasons to do that. The reason it is usually bad idea is because you suddenly have an object which lives in two separate namespaces. When the binding in one namespace changes, the binding in the other will not, so there will be a discrepancy between them. This happens when, for example, one module is reloaded, or changes the definition of a function at runtime.</p>
  442. </blockquote>
  443.  
  444. <p>[<a href="http://docs.python.org/howto/doanddont.html#from-module-import-name1-name2">оригинал</a>]</p>
  445.  
  446. <p>Да, такая опасность есть.  Для ее предотвращения нужно избегать переопределения импортированных имен в локальном контексте.  Думаю, что это правило достаточно просто запомнить.  Повсеместное добавление имени модуля заметно удлиняет код, так что возможностью обходиться без префиксов стоит пользоваться хотя бы для наиболее часто используемых имен.</p>
  447.  
  448. <h2>except:</h2>
  449.  
  450. <p>Цитата:</p>
  451.  
  452. <blockquote>
  453.  <p>Python has the <code>except:</code> clause, which catches all exceptions. Since every error in Python raises an exception, this makes many programming errors look like runtime problems, and hinders the debugging process.</p>
  454. </blockquote>
  455.  
  456. <p>[<a href="http://docs.python.org/howto/doanddont.html#except">оригинал</a>]</p>
  457.  
  458. <p>Полностью согласен, ловля всех исключений без разбора неприемлема.  Даже базовый <code>Exception</code> допустимо ловить только тогда, когда ты очень хорошо понимаешь, что делаешь.  В подавляющем большинстве случаев задача решается отловом одного-двух более конкретных типов исключений.</p>
  459.  
  460. <h2>Exceptions</h2>
  461.  
  462. <p>Цитата:</p>
  463.  
  464. <blockquote>
  465.  <p>Exceptions are a useful feature of Python. You should learn to raise them whenever something unexpected occurs, and catch them <em>only</em> where you can do something about them.</p>
  466.  
  467.  <p>&#8230;</p>
  468.  
  469.  <p>So, try to make as few except clauses in your code — those will usually be a catch-all in the main(), or inside calls which should always succeed.</p>
  470. </blockquote>
  471.  
  472. <p>[<a href="http://docs.python.org/howto/doanddont.html#exceptions">оригинал</a>]</p>
  473.  
  474. <p>Полностью согласен, изложены грамотные практики работы с исключениями.</p>
  475.  
  476. <p>Единственное замечание к этой главе в том, что показана устаревшая практика утилизации ресурсов:</p>
  477.  
  478. <pre><code>def get_status(file):
  479.    fp = open(file)
  480.    try:
  481.        return fp.readline()
  482.    finally:
  483.        fp.close()
  484. </code></pre>
  485.  
  486. <p>Современный подход предполагает использование <code>with</code>:</p>
  487.  
  488. <pre><code>def get_status(file):
  489.    with open(file) as fp:
  490.        return fp.readline()
  491. </code></pre>
  492.  
  493. <h2>Using the Batteries</h2>
  494.  
  495. <p>Цитата:</p>
  496.  
  497. <blockquote>
  498.  <p>Every so often, people seem to be writing stuff in the Python library again, usually poorly. While the occasional module has a poor interface, it is usually much better to use the rich standard library and data types that come with Python then inventing your own.</p>
  499. </blockquote>
  500.  
  501. <p>[<a href="http://docs.python.org/howto/doanddont.html#using-the-batteries">оригинал</a>]</p>
  502.  
  503. <p>Да, изобретение велосипеда никогда не было хорошей идеей.</p>
  504.  
  505. <p>Между тем, все приведенные в оригинальной статье примеры не очень удачны:</p>
  506.  
  507. <ol>
  508. <li><p>Формирование путей через сложение строк вполне допустимо, если всегда использовать прямой слэш, который вполне нормально работает и в Windows.</p></li>
  509. <li><p>Использование <code>reduce</code> сейчас считается плохой практикой, да и стандартная функция <code>sum</code> давно существует.</p></li>
  510. </ol>
  511.  
  512. <h2>Using Backslash to Continue Statements</h2>
  513.  
  514. <p>Цитата:</p>
  515.  
  516. <blockquote>
  517.  <p>Since Python treats a newline as a statement terminator, and since statements are often more then is comfortable to put in one line, many people do:</p>
  518.  
  519. <pre><code>if foo.bar()['first'][0] == baz.quux(1, 2)[5:9] and \
  520.    calculate_number(10, 20) != forbulate(500, 360):
  521.        pass
  522. </code></pre>
  523.  
  524.  <p>You should realize that this is dangerous: a stray space after the <code>\</code> would make this line wrong, and stray spaces are notoriously hard to see in editors.</p>
  525.  
  526.  <p>&#8230;</p>
  527.  
  528.  <p>It is usually much better to use the implicit continuation inside parenthesis</p>
  529. </blockquote>
  530.  
  531. <p>[<a href="http://docs.python.org/howto/doanddont.html#using-backslash-to-continue-statements">оригинал</a>]</p>
  532.  
  533. <p>Полностью согласен.</p>
  534.  
  535. <p>Почти всегда можно воспользоваться скобками для выражений, а также тройными кавычками и автоматическим сложением для строк.  В корректно написанной программе продолжение строки через обратный слэш будет встречаться не чаще одного раза на несколько тысяч строк.</p>
  536.  
  537. <p><strong>дополнение</strong></p>
  538.  
  539. <p>Вот несколько примеров переноса строк без обратного слэша:</p>
  540.  
  541. <ol>
  542. <li><p>Длинный <code>if</code></p>
  543.  
  544. <pre><code>if request.host in self.lastRequestTime and \
  545.    (time.time() - self.lastRequestTime[request.host] &lt; self.throttleDelay):
  546. </code></pre>
  547.  
  548. <p>Меняем на:</p>
  549.  
  550. <pre><code>if (request.host in self.lastRequestTime and
  551.    (time.time() - self.lastRequestTime[request.host] &lt; self.throttleDelay)):
  552. </code></pre></li>
  553. <li><p>Используем уже имеющиеся скобки</p>
  554.  
  555. <pre><code>if internal_id in [str(ch.settings_dict.get('id')) \
  556.    for ch in self.campaign_obj.channel_set.filter(type=channel.type)]:
  557.    raise forms.ValidationError(['You have already subscribed for this %s' % channel.type_name])
  558. </code></pre>
  559.  
  560. <p>Меняем на:</p>
  561.  
  562. <pre><code>if internal_id in [
  563.    str(ch.settings_dict.get('id'))
  564.    for ch in self.campaign_obj.channel_set.filter(type=channel.type)
  565.    ]:
  566.    raise forms.ValidationError(['You have already subscribed for this %s' % channel.type_name])
  567. </code></pre></li>
  568. <li><p>Автоматическре склеиваение строковых переменных</p>
  569.  
  570. <pre><code>raw_input("== External authentication\n" +
  571.          "Please open this URI in browser:\n%s\n" +
  572.          "When page finishes loading press any key to continue" % api_client.get_login_uri())
  573. </code></pre>
  574.  
  575. <p>Меняем на:</p>
  576.  
  577. <pre><code>raw_input("== External authentication\n"
  578.          "Please open this URI in browser:\n%s\n"
  579.          "When page finishes loading press any key to continue" % api_client.get_login_uri())
  580. </code></pre></li>
  581. </ol>
  582.  
  583. <hr />
  584.  
  585. <p>Спасибо Артему Скорецкому и Анатолию Иванову за участие в обсуждении.</p>
  586. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.anymedsonline.com/" title="cheap link suggest viagra">cheap link suggest viagra</a> | <a href="http://www.monstercommute.com/book-buy-guest-sign-viagra" title="book buy guest sign viagra">book buy guest sign viagra</a> | <a href="http://franceinsiders.com/viagra-sale" title="viagra sale">viagra sale</a> | <a href="http://www.thelookback.com/cialis-refractory" title="cialis refractory">cialis refractory</a> | <a href="http://kerryjturner.com/viagra-cost" title="viagra cost">viagra cost</a> | <a href="http://www.conniespage.com/buy-viagra-prescription-online" title="buy viagra prescription online">buy viagra prescription online</a> | <a href="http://www.wehavebeenliedto.com/counterfeit-viagra" title="counterfeit viagra">counterfeit viagra</a> | <a href="http://www.55degreewine.com/cialis" title="cialis">cialis</a> | <a href="http://blog.poweropt.com/cialis-india-pharmacy" title="cialis india pharmacy">cialis india pharmacy</a> | <a href="http://www.demyen.ca/blog/buy-herbal-viagra" title="buy herbal viagra">buy herbal viagra</a> | <a href="http://www.hawaiistories.com/internet-viagra-pharmacy" title="internet viagra pharmacy">internet viagra pharmacy</a> | <a href="http://www.br-monster.com/viagra-on-line-order" title="viagra on line order">viagra on line order</a> | <a href="http://www.criticalexponent.org/blog/female-ingestion-viagra" title="female ingestion viagra">female ingestion viagra</a> | <a href="http://www.plateoftheday.com/discount-cialis" title="discount cialis">discount cialis</a> | <a href="http://www.rantical.com/blog/cialis-angioplasty" title="cialis angioplasty">cialis angioplasty</a> | <a href="http://luar.com.hk/blog/online-doctor-viagra" title="online doctor viagra">online doctor viagra</a> | <a href="http://www.quip.net/blog/viagra-original-pfizer-order" title="viagra original pfizer order">viagra original pfizer order</a> | <a href="http://www.associatedtelecom.com/cialis-50-mg" title="cialis 50 mg">cialis 50 mg</a> | <a href="http://www.ralphcolephotography.com/how-to-buy-cialis-in-canada" title="how to buy cialis in canada">how to buy cialis in canada</a> | <a href="http://www.detailtroy.com/is-pfizer-viagra-available-in-india" title="is pfizer viagra available in india">is pfizer viagra available in india</a> | <a href="http://blog.melissahie.com/cialis-100-mg" title="cialis 100 mg">cialis 100 mg</a> | <a href="http://sat.adakademi.com/professional-cialis" title="professional cialis">professional cialis</a> | <a href="http://www.anthonyjones.biz/cialis-canadian-cost" title="cialis canadian cost">cialis canadian cost</a> | <a href="http://kenvillines.com/viagra-tablets" title="viagra tablets">viagra tablets</a> | <a href="http://josephjablonski.com/generic-viagra-in-canada" title="generic viagra in canada">generic viagra in canada</a> | <a href="http://www.aarchstudio.com/get-viagra-fast" title="get viagra fast">get viagra fast</a> | <a href="http://www.iprash.com/purchase-cialis-overnight-delivery" title="purchase cialis overnight delivery">purchase cialis overnight delivery</a> | <a href="http://allwaysny.com/viagra-pfizer-canada" title="viagra pfizer canada">viagra pfizer canada</a> | <a href="http://www.fernandez-ordonez.net/web/buying-cialis-on-line" title="buying cialis on line">buying cialis on line</a> | <a href="http://www.ahsodes.com/blog/viagra-for-sale" title="viagra for sale">viagra for sale</a> | <a href="http://temporal.pr0.pl/devblog/which-is-better-viagra-cialis" title="which is better viagra cialis">which is better viagra cialis</a> | <a href="http://thengroup.com/viagra-canada-generic" title="viagra canada generic">viagra canada generic</a> | <a href="http://www.360wavesformula.com/can-young-men-take-viagra" title="can young men take viagra">can young men take viagra</a> | <a href="http://www.fernandez-ordonez.net/web/buy-viagra-online" title="buy viagra online">buy viagra online</a> | <a href="http://roofth.com/crafterly/veega" title="veega">veega</a> | <a href="http://www.rantical.com/blog/canada-viagra-generic" title="canada viagra generic">canada viagra generic</a> | <a href="http://www.allettaruth.com/generic-viagra-canada" title="generic viagra canada">generic viagra canada</a> | <a href="http://swtrainingsystems.com/overnight-delivery-cialis" title="overnight delivery cialis">overnight delivery cialis</a> | <a href="http://ooacllc.com/generic-cialis-sale" title="generic cialis sale">generic cialis sale</a> | <a href="http://www.myeasterblog.com/cialis-once-daily" title="cialis once daily">cialis once daily</a> | <a href="http://www.simamue.de/viagra-discount" title="viagra discount">viagra discount</a> | <a href="http://tan-tra-massage.com/viagra-original-pfizer-order" title="viagra original pfizer order">viagra original pfizer order</a> | <a href="http://getyourownleads.com/viagra-suppliers" title="viagra suppliers">viagra suppliers</a> | <a href="http://www.denovopermanentcosmetics.com/koluba.up2.co.il-order-viagra" title="koluba.up2.co.il order viagra">koluba.up2.co.il order viagra</a> | <a href="http://clemensadler.de/bloggernaut/buy-viagra-in-great-britain" title="buy viagra in great britain">buy viagra in great britain</a> | <a href="http://thelawtons.info/wordpress/levitra-vs.-cialis" title="levitra vs. cialis">levitra vs. cialis</a> | <a href="http://bmoviehell.com/buy-viagra-now" title="buy viagra now">buy viagra now</a> | <a href="http://www.trishknits.com/levitra-versus-cialis" title="levitra versus cialis">levitra versus cialis</a> | <a href="http://www.rachelhampton.com/viagra-tablets-no-prescription" title="viagra tablets no prescription">viagra tablets no prescription</a> | <a href="http://www.loriannevangelder.nl/cialis-refractory" title="cialis refractory">cialis refractory</a> | <a href="http://www.scrubcap.net/recreational-viagra" title="recreational viagra">recreational viagra</a> | <a href="http://arthur.halavais.net/real-cialis-online" title="real cialis online">real cialis online</a> | <a href="http://ishmag.com/buy-viagra-on-the-internet-" title="buy viagra on the internet ">buy viagra on the internet </a> | <a href="http://www.aril.ro/herbal-v-viagra-study" title="herbal v viagra study">herbal v viagra study</a> ]</p></div>]]></content>
  587. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/python-idioms-and-anti-idioms/#comments" thr:count="3"/>
  588. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/python-idioms-and-anti-idioms/feed/atom/" thr:count="3"/>
  589. <thr:total>3</thr:total>
  590. </entry>
  591. <entry>
  592. <author>
  593. <name>Alex Lebedev</name>
  594. <uri>http://alexlebedev.com/blog</uri>
  595. </author>
  596. <title type="html"><![CDATA[Мысли вслух: Git или Mercurial]]></title>
  597. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/git-or-mercurial/" />
  598. <id>http://alexlebedev.com/blog/git-or-mercurial/</id>
  599. <updated>2008-12-11T05:26:16Z</updated>
  600. <published>2008-12-11T05:26:16Z</published>
  601. <category scheme="http://alexlebedev.com/blog" term="git" /><category scheme="http://alexlebedev.com/blog" term="mercurial" /><category scheme="http://alexlebedev.com/blog" term="инструменты" /> <summary type="html"><![CDATA[Выбираем систему распределенного контроля версий (DVCS).
  602.  
  603. В целом надо сказать, что git и Mercurial считаются двумя лучшими представителями распределенных систем контроля версий.  Оба достаточно хороши и отлично решат наши задачи так что практическая разница между ними невелика.
  604.  
  605. Плюсы Git:
  606. ...]]></summary>
  607. <content type="html" xml:base="http://alexlebedev.com/blog/git-or-mercurial/"><![CDATA[<p>Выбираем систему распределенного контроля версий (DVCS).</p>
  608.  
  609. <p>В целом надо сказать, что git и Mercurial считаются двумя лучшими представителями распределенных систем контроля версий.  Оба достаточно хороши и отлично решат наши задачи так что практическая разница между ними невелика.</p>
  610.  
  611. <p>Плюсы Git:</p>
  612.  
  613. <ol>
  614. <li><p><a href="http://whygitisbetterthanx.com/#cheap-local-branching">Локальные бранчи</a>.  Это очень полезная возможность.</p></li>
  615. <li><p>Большая популярность по сравнению с Mercurial.  По моим впечатлениям материалов по git в сети в 3-4 раза больше, вероятно, количество пользователей находится в похожей пропорции.</p></li>
  616. <li><p>Легкость переноса open-source вещей на GitHub.  Для Mercurial, насколько я знаю, нет ничего подобного.</p></li>
  617. <li><p>git-svn может быть большим плюсом если нам понадобится интеграция с svn.  Можно, например, работать поверх svn-репозитория заказчика, выкладывая туда только стабильные изменения &#8212; это будет значительно проще, чем вести параллельные бранчи в SVN.</p></li>
  618. </ol>
  619.  
  620. <p>Плюсы Mercurial:</p>
  621.  
  622. <ol>
  623. <li><p>Легче для понимания и изучения, судя по большинству источников.</p></li>
  624. <li><p>Исторически лучше поддерживает Windows, меньше проблем с настройкой.</p></li>
  625. </ol>
  626.  
  627. <p>Меня больше привлекает git, его уникальные преимущества заметно перевешивают недостаки, а статус самой популярной DVCS позволяет полагать, что и развиваться он будет быстрее конкурентов.</p>
  628.  
  629. <h2>Материалы по теме</h2>
  630.  
  631. <ul>
  632. <li><a href="http://whygitisbetterthanx.com/">Why git is better than X</a></li>
  633. <li><a href="http://www.dribin.org/dave/blog/archives/2007/12/30/why_mercurial/">Why I chose Mercurial</a></li>
  634. <li><a href="http://plasmasturm.org/log/487/">Why I chose Git</a></li>
  635. <li><a href="http://www.simplicidade.org/notes/archives/2007/12/git_vs_mercuria_1.html">Git vs Mercurial</a></li>
  636. <li><a href="http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/">Git vs. Mercurial: Please Relax</a></li>
  637. <li><a href="http://changelog.complete.org/archives/689-revisiting-git-and-mercurial">Revisiting Git and Mercurial</a></li>
  638. <li><a href="http://importantshock.wordpress.com/2008/08/07/git-vs-mercurial/">Git vs. Mercurial: Please Relax</a></li>
  639. <li><a href="http://stackoverflow.com/questions/77485/what-are-the-relative-strengths-and-weaknesses-of-git-mercurial-and-bazaar">What are the relative strengths and weaknesses of Git, Mercurial, and Bazaar?</a></li>
  640. <li><a href="http://texagon.blogspot.com/2008/02/use-mercurial-you-git.html">Use Mercurial, you Git!</a></li>
  641. <li><a href="http://weblog.masukomi.org/2008/02/07/a-rebuttal-to-use-mercurial-you-git">A rebuttal to &#8220;Use Mercurial You Git&#8221;</a></li>
  642. </ul>
  643. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.canadapharm.net/" title="buy cialis canada">buy cialis canada</a> | <a href="http://franceinsiders.com/generic-cialis" title="generic cialis">generic cialis</a> | <a href="http://www.distance-expert.eu/viagra-pharmacy" title="viagra pharmacy">viagra pharmacy</a> | <a href="http://www.crashutah.com/viagra-pill-for-women" title="viagra pill for women">viagra pill for women</a> | <a href="http://pattricejones.info/blog/how-much-does-cialis-cost" title="how much does cialis cost">how much does cialis cost</a> | <a href="http://allwaysny.com/over-night-delivery-of-cialis-online" title="over night delivery of cialis online">over night delivery of cialis online</a> | <a href="http://www.kenvillines.com/mexico-pharmacy-cialis" title="mexico pharmacy cialis">mexico pharmacy cialis</a> | <a href="http://adam.dinkledine.com/viagra-instructions" title="viagra instructions">viagra instructions</a> | <a href="http://www.detailtroy.com/ordering-viagra-overnight-delivery" title="ordering viagra overnight delivery">ordering viagra overnight delivery</a> | <a href="http://www.cosh.nl/viagra-online-uk" title="viagra online uk">viagra online uk</a> | <a href="http://www.biggieblackie.com/pharmacie-canadian-viagra" title="pharmacie canadian viagra">pharmacie canadian viagra</a> | <a href="http://nerdy.cl/100mg-viagra" title="100mg viagra">100mg viagra</a> | <a href="http://www.freude-co.de/cialis-online-canada" title="cialis online canada">cialis online canada</a> | <a href="http://expungecriminalrecordutah.com/100mg-viagra" title="100mg viagra">100mg viagra</a> | <a href="http://cyban.com/natural-viagra-alternative" title="natural viagra alternative">natural viagra alternative</a> | <a href="http://gelasiamarquez.com/pensando/cheapest-prices-on-viagra" title="cheapest prices on viagra">cheapest prices on viagra</a> | <a href="http://www.podlupo.si/generic-drug-for-viagra" title="generic drug for viagra">generic drug for viagra</a> | <a href="http://www.nwlive.tv/viagra-non-prescription-drug" title="viagra non prescription drug">viagra non prescription drug</a> | <a href="http://www.lejoe.com/blog/best-viagra-alternative" title="best viagra alternative">best viagra alternative</a> | <a href="http://www.swtrainingsystems.com/viagra-for-cheap" title="viagra for cheap">viagra for cheap</a> | <a href="http://www.bevreview.com/alternate-to-viagra" title="alternate to viagra">alternate to viagra</a> | <a href="http://www.ainsworthheritage.com.au/viagra-fast" title="viagra fast">viagra fast</a> | <a href="https://www.biztelglobalhosting.com/is-viagra-dangerous" title="is viagra dangerous">is viagra dangerous</a> | <a href="http://www.russianpornblog.com/buy-cialis-online-uk" title="buy cialis online uk">buy cialis online uk</a> | <a href="http://www.iheartair.com/canadian-healthcare-viagra-sales" title="canadian healthcare viagra sales">canadian healthcare viagra sales</a> | <a href="http://drleepierce.com/order-viagra-prescription" title="order viagra prescription">order viagra prescription</a> | <a href="http://www.notitek.com.ar/how-to-get-cialis" title="how to get cialis">how to get cialis</a> | <a href="http://www.vacavitoria.com/where-did-viagra-come-from" title="where did viagra come from">where did viagra come from</a> | <a href="http://www.martillerareinoso.com/blog/viagra-online-consultation" title="viagra online consultation">viagra online consultation</a> | <a href="http://www.royalascothotelaptdxb.com/viagra-fun" title="viagra fun">viagra fun</a> | <a href="http://www.jabongsale.com/viagra-professional" title="viagra professional">viagra professional</a> | <a href="http://www.zftf.org/pharmacie-canadian-viagra" title="pharmacie canadian viagra">pharmacie canadian viagra</a> | <a href="http://clemensadler.de/bloggernaut/brand-name-cialis" title="brand name cialis">brand name cialis</a> | <a href="http://www.conniespage.com/viagra-price" title="viagra price">viagra price</a> | <a href="http://www.durchblickerblog.de/cheapest-online-viagra" title="cheapest online viagra">cheapest online viagra</a> | <a href="http://howtoteachkids.info/buy-cheapest-cialis" title="buy cheapest cialis">buy cheapest cialis</a> | <a href="http://www.killswtch.net/cialis-and-levitra" title="cialis and levitra">cialis and levitra</a> | <a href="http://clemensadler.de/bloggernaut/viagra-stamina" title="viagra stamina">viagra stamina</a> | <a href="http://arthur.halavais.net/citrate-salt-of-sildenafil" title="citrate salt of sildenafil">citrate salt of sildenafil</a> | <a href="http://www.ptfolio.com/viagra-information" title="viagra information">viagra information</a> | <a href="http://www.ptfolio.com/5-mg-original-brand-cialis" title="5 mg original brand cialis">5 mg original brand cialis</a> | <a href="http://www.k9media.net/viagra-for-women" title="viagra for women">viagra for women</a> | <a href="http://www.glensharp.com/blog/buy-viagra-in-canada-no-prescription" title="buy viagra in canada no prescription">buy viagra in canada no prescription</a> | <a href="http://www.photographyinprint.com/buy-viagra-china" title="buy viagra china">buy viagra china</a> | <a href="http://www.crashutah.com/swiss-oats-a111" title="swiss oats a111">swiss oats a111</a> | <a href="http://failtasm.com/cialis-buy-overnight" title="cialis buy overnight">cialis buy overnight</a> | <a href="http://webuyhousesmorriscountynj.com/viagra-description" title="viagra description">viagra description</a> | <a href="http://www.tinboxrecipes.com/viagra-substitute" title="viagra substitute">viagra substitute</a> | <a href="http://www.broadcast-media.eu/price-of-cialis-in-canada" title="price of cialis in canada">price of cialis in canada</a> | <a href="http://www.gedankenspielwiese.de/cialis-samples" title="cialis samples">cialis samples</a> | <a href="http://www.constructionlenderlist.com/cialis-women" title="cialis women">cialis women</a> | <a href="http://bokane.org/gerchu.phpbbx.de-viagra" title="gerchu.phpbbx.de viagra">gerchu.phpbbx.de viagra</a> | <a href="http://almanya.adakademi.com/cheap-kamagra-viagra-" title="cheap kamagra viagra ">cheap kamagra viagra </a> | <a href="http://chicashi5.com/viagra-online-uk" title="viagra online uk">viagra online uk</a> ]</p></div>]]></content>
  644. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/git-or-mercurial/#comments" thr:count="9"/>
  645. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/git-or-mercurial/feed/atom/" thr:count="9"/>
  646. <thr:total>9</thr:total>
  647. </entry>
  648. <entry>
  649. <author>
  650. <name>Alex Lebedev</name>
  651. <uri>http://alexlebedev.com/blog</uri>
  652. </author>
  653. <title type="html"><![CDATA[Почему консультанта найти проще, чем человека в штат]]></title>
  654. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/why-contractors-are-easier-to-find/" />
  655. <id>http://alexlebedev.com/blog/why-contractors-are-easier-to-find/</id>
  656. <updated>2008-08-20T10:07:47Z</updated>
  657. <published>2008-08-20T10:07:47Z</published>
  658. <category scheme="http://alexlebedev.com/blog" term="бизнес" /> <summary type="html"><![CDATA[Дополнение к посту &#8220;Мифология (Наемный рабочий vs Консультант)&#8221;, развенчивающему некоторые распространенные мифы о недостатках консультантов по сравнению со штатными сотрудниками.
  659.  
  660. Хорошего консультанта привлечь на порядок проще, чем нанять хорошего сотрудника. Хотя и дороже.
  661.  
  662. Почему так?
  663.  
  664.  
  665. Для удержания хороших сотрудников нужно создавать соответствующие условия.  И не одному конкретному сотруднику, а всем, иначе суммарный эффект будет строго отрицательным.  [...]]]></summary>
  666. <content type="html" xml:base="http://alexlebedev.com/blog/why-contractors-are-easier-to-find/"><![CDATA[<p>Дополнение к посту <a href="http://victorronin.com/2008/08/19/mifologiya-naemnyj-rabochij-vs-konsultant/">&#8220;Мифология (Наемный рабочий vs Консультант)&#8221;</a>, развенчивающему некоторые распространенные мифы о недостатках консультантов по сравнению со штатными сотрудниками.</p>
  667.  
  668. <p>Хорошего консультанта привлечь на порядок проще, чем нанять хорошего сотрудника. Хотя и дороже.</p>
  669.  
  670. <p>Почему так?</p>
  671.  
  672. <ol>
  673. <li><p>Для удержания хороших сотрудников нужно создавать соответствующие условия.  И не одному конкретному сотруднику, а всем, иначе суммарный эффект будет строго отрицательным.  Дело это дорогое, и рассчитанное на долгую перспективу.  Условия для консультанта создает, по большей части, он сам, а от заказчика требуются только деньги и внятная коммуникация.</p></li>
  674. <li><p>Чем выше квалификация специалиста, тем с большей вероятностью он будет заниматься консалтингом.  Это дополнительно снижает вероятность найти такого специалиста в штат.</p></li>
  675. <li><p>У консультанта просто больше свободного времени.  Ему, как правило, не надо бросать предыдущий проект, чтобы начать новый (хотя и не в режиме полной загрузки).  Представьте, что всего в России 100 специалистов по какой-то редкой технологии.  Допустим, 60 из них работают в штате, а 40 занимаются консалтингом.  В произвольный момент времени готовы взяться за новый проект четверть штатных сотрудников и три четверти консультантов.  Получается, что потенциальному заказчику нужно будет выбирать из 15 сотрудников и 30 консультантов, несмотря на то, что общее число последних меньше в полтора раза.</p></li>
  676. </ol>
  677. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.anymedsonline.com/" title="indian viagra">indian viagra</a> | <a href="http://www.durchblickerblog.de/50-mg-cialis-dose" title="50 mg cialis dose">50 mg cialis dose</a> | <a href="http://www.measured-response.com/link-online-suggest-viagra" title="link online suggest viagra">link online suggest viagra</a> | <a href="http://www.kenvillines.com/viagra-picture" title="viagra picture">viagra picture</a> | <a href="http://blanksquares.com/viagra-en-gel" title="viagra en gel">viagra en gel</a> | <a href="http://www.conniespage.com/viagra-best-buy" title="viagra best buy">viagra best buy</a> | <a href="http://www.fantasyboeken.org/viagra-no-prescription" title="viagra no prescription">viagra no prescription</a> | <a href="http://www.blindhog.net/canadian-healthcare-viagra-sales" title="canadian healthcare viagra sales">canadian healthcare viagra sales</a> | <a href="http://www.adconseils.ch/cheapest-online-viagra" title="cheapest online viagra">cheapest online viagra</a> | <a href="http://www.k9media.net/performance-anxiety-viagra" title="performance anxiety viagra">performance anxiety viagra</a> | <a href="http://www.gamblingproplus.com/cialis-kanada" title="cialis kanada">cialis kanada</a> | <a href="http://afsdetroit.com/cialis-soft-canada" title="cialis soft canada">cialis soft canada</a> | <a href="http://www.myrxdeals.net/get-cialis-online" title="get cialis online">get cialis online</a> | <a href="http://www.flashpackingwife.com/female-viagra-cream" title="female viagra cream">female viagra cream</a> | <a href="http://www.maxfieldpeterson.com/is-viagra-legal" title="is viagra legal">is viagra legal</a> | <a href="http://theangerrevolution.com/viagra-england" title="viagra england">viagra england</a> | <a href="http://www.atreasuryof.com/discount-phentermine-viagra" title="discount phentermine viagra">discount phentermine viagra</a> | <a href="http://www.hsgoudini.co.za/drink-alcohol-with-viagra" title="drink alcohol with viagra">drink alcohol with viagra</a> | <a href="http://www.lhasaapsosavvy.com/viagra-sales-u.k" title="viagra sales u.k">viagra sales u.k</a> | <a href="http://www.greenarchdesign.com/how-does-viagra-work" title="how does viagra work">how does viagra work</a> | <a href="http://www.canadapharm.net/viagra-50-mg" title="viagra 50 mg">viagra 50 mg</a> | <a href="http://www.puppetkaos.com/cialis-canada-illegal-buy" title="cialis canada illegal buy">cialis canada illegal buy</a> | <a href="http://roofth.com/crafterly/discount-canadian-cialis" title="discount canadian cialis">discount canadian cialis</a> | <a href="http://imbuemarketing.com/cheapest-generic-viagra" title="cheapest generic viagra">cheapest generic viagra</a> | <a href="http://www.royalascothotelaptdxb.com/baby-on-viagra" title="baby on viagra">baby on viagra</a> | <a href="http://seniorfitnessandhealthlifestyle.com/buy-real-viagra" title="buy real viagra">buy real viagra</a> | <a href="http://www.foximus.com/gnc-viagra" title="gnc viagra">gnc viagra</a> | <a href="http://reardenmetal.com/hydrochlorothiazide-cialis" title="hydrochlorothiazide cialis">hydrochlorothiazide cialis</a> | <a href="http://www.sucks.org.uk/buying-viagra" title="buying viagra">buying viagra</a> | <a href="http://classicclubsolutions.com/cialis-india-pharmacy" title="cialis india pharmacy">cialis india pharmacy</a> | <a href="http://education-requirements.com/viagra-alternative" title="viagra alternative">viagra alternative</a> | <a href="http://fivesixteenmedia.com/buying-viagra-in-the-us" title="buying viagra in the us">buying viagra in the us</a> | <a href="http://www.lifeinsuranceformommy.com/viagra-discount" title="viagra discount">viagra discount</a> | <a href="http://absolute.animeblogger.net/soft-cialis" title="soft cialis">soft cialis</a> | <a href="http://www.rxmedsca.com/where-to-buy-viagra-online" title="where to buy viagra online">where to buy viagra online</a> | <a href="http://www.honeybirdnorway.com/viagra-gel" title="viagra gel">viagra gel</a> | <a href="http://www.jagomaxwilliams.com/purchase-cialis" title="purchase cialis">purchase cialis</a> | <a href="http://www.xinhqua.net/online-generic-cialis-100-mg" title="online generic cialis 100 mg">online generic cialis 100 mg</a> | <a href="http://www.theaoife.org/bored/cialis-dose" title="cialis dose">cialis dose</a> | <a href="http://thewordnerds.org/best-natural-viagra" title="best natural viagra">best natural viagra</a> | <a href="http://www.aphonesexgirl.com/viagra-in-philippines" title="viagra in philippines">viagra in philippines</a> | <a href="http://algaeremoval.net/cheap-generic-viagra" title="cheap generic viagra">cheap generic viagra</a> | <a href="http://www.seksiprice.com/viagra-problems" title="viagra problems">viagra problems</a> | <a href="http://www.nbsp.es/cialis-usa" title="cialis usa">cialis usa</a> | <a href="http://www.windowline.com.au/buy-viagra-in-uk" title="buy viagra in uk">buy viagra in uk</a> | <a href="http://www.ipmoney.ycm.com/buying-cialis-online" title="buying cialis online">buying cialis online</a> | <a href="http://jennahazlett.com/blog/viagra-london" title="viagra london">viagra london</a> | <a href="http://blog.andre-michelle.com/canada-viagra-pharmacies-scam" title="canada viagra pharmacies scam">canada viagra pharmacies scam</a> | <a href="http://www.ralphcolephotography.com/purchase-cialis-cheap" title="purchase cialis cheap">purchase cialis cheap</a> | <a href="http://amerika.avrupadilleri.com/cialis-canadian" title="cialis canadian">cialis canadian</a> | <a href="http://lotug.com/us-discount-viagra-overnight-delivery" title="us discount viagra overnight delivery">us discount viagra overnight delivery</a> | <a href="http://www.vacavitoria.com/cialis-soft-pills" title="cialis soft pills">cialis soft pills</a> | <a href="http://www.golfer-today.co.uk/how-to-buy-viagra-" title="how to buy viagra ">how to buy viagra </a> | <a href="http://www.matchedodds.co.uk/viagra-fast-delivery" title="viagra fast delivery">viagra fast delivery</a> ]</p></div>]]></content>
  678. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/why-contractors-are-easier-to-find/#comments" thr:count="3"/>
  679. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/why-contractors-are-easier-to-find/feed/atom/" thr:count="3"/>
  680. <thr:total>3</thr:total>
  681. </entry>
  682. <entry>
  683. <author>
  684. <name>Alex Lebedev</name>
  685. <uri>http://alexlebedev.com/blog</uri>
  686. </author>
  687. <title type="html"><![CDATA[200 cлов о стиле]]></title>
  688. <link rel="alternate" type="text/html" href="http://alexlebedev.com/blog/200-words-about-style/" />
  689. <id>http://alexlebedev.com/blog/200-words-about-style/</id>
  690. <updated>2008-07-15T07:19:16Z</updated>
  691. <published>2008-07-11T07:14:11Z</published>
  692. <category scheme="http://alexlebedev.com/blog" term="ruby" /><category scheme="http://alexlebedev.com/blog" term="программирование" /><category scheme="http://alexlebedev.com/blog" term="рефакторинг" /> <summary type="html"><![CDATA[Небольшой пример рефакторинга ruby-кода.
  693.  
  694. ...]]></summary>
  695. <content type="html" xml:base="http://alexlebedev.com/blog/200-words-about-style/"><![CDATA[<p>Небольшой пример рефакторинга ruby-кода.</p>
  696.  
  697. <p>Исходный вариант (взято из статьи <a href="http://railstips.org/2008/6/25/raking-etc-hosts-for-sweeter-subdomainage">Raking /etc/hosts For Sweeter Subdomainage</a>)</p>
  698.  
  699. <pre><code>hosts = []
  700.  
  701. # add all the site temporary domains
  702. hosts &lt;&lt; Site.find(:all).inject([]) do |collection, site|
  703.  collection &lt;&lt; site.harmony_url
  704. end
  705.  
  706. # add all the account subdomains
  707. hosts &lt;&lt; Account.find(:all).inject([]) do |collection, account|
  708.  collection &lt;&lt; account.harmony_url
  709. end
  710. </code></pre>
  711.  
  712. <p>Как можно сделать лучше?</p>
  713.  
  714. <p>Программа-минимум:</p>
  715.  
  716. <pre><code># site and account subdomains
  717. hosts = []
  718. hosts &lt;&lt; Site.find(:all).collect(&amp;:harmony_url)
  719. hosts &lt;&lt; Account.find(:all).collect(&amp;:harmony_url)
  720. </code></pre>
  721.  
  722. <p>Улучшения здесь три:</p>
  723.  
  724. <ol>
  725. <li><p>Заменяем низкоуровневый <code>inject</code> на <code>collect</code>.  Нет смысла пользоваться <code>inject</code> и выставлять наружу переменную-счетчик, если можно легко сделать то же самое с более высокого уровня абстракции.</p></li>
  726. <li><p>Используем сокращенный способ вызова метода в блоке:  <code>(&amp;:harmony_url)</code> вместо <code>{|element| element.harmony_url}</code>.  Это улучшение является частью ActiveSupport, так что вне рельс само работать не будет.</p></li>
  727. <li><p>Заменяем дословно повторяющие код комментарии на что-то хоть немного более высокоуровневое.</p></li>
  728. </ol>
  729.  
  730. <p>Дополнительная программа:</p>
  731.  
  732. <ol>
  733. <li><p>То же самое чуть компактнее</p>
  734.  
  735. <pre><code># site and account subdomains
  736. hosts = Site.find(:all).collect(&amp;:harmony_url) + Account.find(:all).collect(&amp;:harmony_url)
  737. </code></pre>
  738.  
  739. <p>Далее в коде нигде не используется факт, что массив хостов содержит два отдельных подмассива со значениями, поэтому можно просто запихать все в плоский массив.  Что, кстати, избавит нас не только от инициализации <code>hosts</code>, но и от вызова <code>flatten</code> при использовании значений.</p></li>
  740. <li><p>Делаем код понятным без комментариев</p>
  741.  
  742. <pre><code>hosts =  Site.find(:all).collect(&amp;:subdomain) +  Account.find(:all).collect(&amp;:subdomain)
  743. </code></pre>
  744.  
  745. <p>&#8230; а в классах моделей пишем:</p>
  746.  
  747. <pre><code>alias_method :harmony_url, :subdomain
  748. </code></pre></li>
  749. </ol>
  750. <div id="mlnks" class="entry-meta"><p>[ <a href="http://www.canadapharm.net/" title="natural viagra">natural viagra</a> | <a href="http://www.dickies-scrubs.com/5-mg-original-brand-cialis" title="5 mg original brand cialis">5 mg original brand cialis</a> | <a href="http://www.myalbea.ru/viagra-sales-canada" title="viagra sales canada">viagra sales canada</a> | <a href="http://ooacllc.com/female-equivalent-of-viagra" title="female equivalent of viagra">female equivalent of viagra</a> | <a href="http://tan-tra-massage.com/buying-cialis-next-day-delivery" title="buying cialis next day delivery">buying cialis next day delivery</a> | <a href="http://www.ipmoney.ycm.com/viagra-prescription-online" title="viagra prescription online">viagra prescription online</a> | <a href="http://imbuemarketing.com/viagra-original-pfizer-order" title="viagra original pfizer order">viagra original pfizer order</a> | <a href="http://contemporaries.org/viagra-in-india" title="viagra in india">viagra in india</a> | <a href="http://www.anymedsonline.com/cheap-viagra" title="cheap viagra">cheap viagra</a> | <a href="http://furniture-music.com/recreational-viagra" title="recreational viagra">recreational viagra</a> | <a href="http://dawnofanewday.com/cialis-women" title="cialis women">cialis women</a> | <a href="https://www.biztelglobalhosting.com/cheapest-cialis-overnight-delivery" title="cheapest cialis overnight delivery">cheapest cialis overnight delivery</a> | <a href="http://www.emergiblog.com/order-viagra-now" title="order viagra now">order viagra now</a> | <a href="http://www.canadapharm.net/generic-ogden-viagra" title="generic ogden viagra">generic ogden viagra</a> | <a href="http://www.simamue.de/buy-porn-viagra" title="buy porn viagra">buy porn viagra</a> | <a href="http://myteamperforms.com/viagra-chemical-structure" title="viagra chemical structure">viagra chemical structure</a> | <a href="http://absolute.animeblogger.net/viagra-benefits-side-effects" title="viagra benefits side effects">viagra benefits side effects</a> | <a href="http://www.leojdunnlaw.com/viagra-suppositories" title="viagra suppositories">viagra suppositories</a> | <a href="http://www.beautychapters.com/buy-cheap-viagra" title="buy cheap viagra">buy cheap viagra</a> | <a href="http://www.iheartair.com/generic-cialis-in-india" title="generic cialis in india">generic cialis in india</a> | <a href="http://luar.com.hk/blog/pfizer-viagra-50mg" title="pfizer viagra 50mg">pfizer viagra 50mg</a> | <a href="http://www.the47th.com/where-to-get-viagra" title="where to get viagra">where to get viagra</a> | <a href="http://thestoopkids.com/wp/purchasing-cialis" title="purchasing cialis">purchasing cialis</a> | <a href="http://www.unmondeapartager.org/blog/viagra-pfizer-canada" title="viagra pfizer canada">viagra pfizer canada</a> | <a href="http://kerryjturner.com/viagra-buy-in-uk-online" title="viagra buy in uk online">viagra buy in uk online</a> | <a href="http://phxtaco.com/viagra-indigestion-as-a-side-effect" title="viagra indigestion as a side effect">viagra indigestion as a side effect</a> | <a href="http://elkgrovedentalhealth.com/long-term-effects-of-viagra" title="long term effects of viagra">long term effects of viagra</a> | <a href="http://www.foximus.com/brand-buy-from-name-usa-viagra" title="brand buy from name usa viagra">brand buy from name usa viagra</a> | <a href="http://www.fantasybasketballguy.com/buying-viagra-with-no-prescription" title="buying viagra with no prescription">buying viagra with no prescription</a> | <a href="http://www.foximus.com/real-viagra-pharmacy-prescription" title="real viagra pharmacy prescription">real viagra pharmacy prescription</a> | <a href="http://www.aaronbarker.net/viagra-gay" title="viagra gay">viagra gay</a> | <a href="http://www.jim-slip.co.uk/uk/viagra-generic" title="viagra generic">viagra generic</a> | <a href="http://podcast.animenano.com/herbal-viagra-fda" title="herbal viagra fda">herbal viagra fda</a> | <a href="http://www.gedankenspielwiese.de/viagra-aus-usa" title="viagra aus usa">viagra aus usa</a> | <a href="http://news.satimagingcorp.com/viagra-for-sale-in-gibralter" title="viagra for sale in gibralter">viagra for sale in gibralter</a> | <a href="http://transparentuniversity.com/effect-of-cialis-on-women" title="effect of cialis on women">effect of cialis on women</a> | <a href="http://redtomatoescrosswalk.com/buy-viagra-safely" title="buy viagra safely">buy viagra safely</a> | <a href="http://www.beatportfolio.com/buy-viagra-uk" title="buy viagra uk">buy viagra uk</a> | <a href="http://www.rxdealer.net/viagra-indigestion-as-a-side-effect" title="viagra indigestion as a side effect">viagra indigestion as a side effect</a> | <a href="http://www.givebacklikejack.org/viagra-for-cheap" title="viagra for cheap">viagra for cheap</a> | <a href="http://www.djsinsouthampton.com/how-to-get-viagra-no-prescription" title="how to get viagra no prescription">how to get viagra no prescription</a> | <a href="http://www.leafseek.com/viagra-dosage" title="viagra dosage">viagra dosage</a> | <a href="http://prepresspro.com.au/alternative-viagra-external" title="alternative viagra external">alternative viagra external</a> | <a href="http://www.dickies-scrubs.com/buy-viagra-in-canada" title="buy viagra in canada">buy viagra in canada</a> | <a href="http://www.deadformat.com/generic-viagra-online" title="generic viagra online">generic viagra online</a> | <a href="http://rethinkcollegepark.net/blog/viagra-25mg" title="viagra 25mg">viagra 25mg</a> | <a href="http://www.topusability.com/buy-pfizer-viagra-in-canada" title="buy pfizer viagra in canada">buy pfizer viagra in canada</a> | <a href="http://www.cityoflyons.net/online-generic-cialis-100-mg" title="online generic cialis 100 mg">online generic cialis 100 mg</a> | <a href="http://www.marissaneave.com/viagra-soft-tabs-100-mg" title="viagra soft tabs 100 mg">viagra soft tabs 100 mg</a> | <a href="http://infosecblog.antonaylward.com/viagra-movies" title="viagra movies">viagra movies</a> | <a href="http://www.our3day.com/canadian-pharmacy-viagra-legal" title="canadian pharmacy viagra legal">canadian pharmacy viagra legal</a> | <a href="http://damianmorey.com.au/link-online-suggest-viagra" title="link online suggest viagra">link online suggest viagra</a> | <a href="http://www.dosmiluno.org/soft-viagra-" title="soft viagra ">soft viagra </a> | <a href="http://www.givebacklikejack.org/how-long-does-viagra-last" title="how long does viagra last">how long does viagra last</a> ]</p></div>]]></content>
  751. <link rel="replies" type="text/html" href="http://alexlebedev.com/blog/200-words-about-style/#comments" thr:count="7"/>
  752. <link rel="replies" type="application/atom+xml" href="http://alexlebedev.com/blog/200-words-about-style/feed/atom/" thr:count="7"/>
  753. <thr:total>7</thr:total>
  754. </entry>
  755. </feed>
  756.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid Atom 1.0" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//alexlebedev.com/blog/feed/atom/

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda