<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-470269364869739543</id><updated>2012-01-23T18:24:12.942+04:00</updated><category term='drupal'/><category term='халява'/><category term='geoip'/><category term='drush'/><category term='javascript'/><category term='api'/><category term='Совершенный код'/><category term='заметки КО'/><category term='vkontakte'/><title type='text'>Еще один сайт о любимой собачке</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>14</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-473426169715670424</id><published>2012-01-03T01:35:00.001+04:00</published><updated>2012-01-03T01:35:54.611+04:00</updated><title type='text'>Актуальная информация о погоде с gismeteo.ru</title><content type='html'>На сайте gismeteo.ru можно найти плагин погоды для google chrome. Исходник вполне читаемый, оттуда можно вытащить ссылку на сервис погоды. Похоже, за раз возвращается погода до 5 городов, возвращается актуальная погода и прогноз.&lt;br /&gt;&lt;br /&gt;Прикрутил на сайте, но скорее всего способ нелегальный.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-473426169715670424?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/473426169715670424/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2012/01/gismeteoru.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/473426169715670424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/473426169715670424'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2012/01/gismeteoru.html' title='Актуальная информация о погоде с gismeteo.ru'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-4024452692026479573</id><published>2010-12-02T13:54:00.000+03:00</published><updated>2010-12-02T13:54:00.302+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drush'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>drush_make и патчи</title><content type='html'>Просматривал проект &lt;a href="http://drupal.org/project/buildkit"&gt;buildkit&lt;/a&gt;, увидел интересную фишку drush_make, о которой не знал раньше:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre style="white-space: pre-wrap; word-wrap: break-word;"&gt;projects[drupal][patch][881530] = http://drupal.org/files/issues/881530_vocabulary_field_machine_names.6.patch&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Позволяет в свежую установку drupal-а применить на лету какой-нибудь патч. Вообще это все описано в &lt;a href="http://drupalcode.org/viewvc/drupal/contributions/modules/drush_make/README.txt?view=co&amp;amp;pathrev=DRUPAL-6--2"&gt;README-файле&lt;/a&gt;, надо лишь почаще заглядывать в документацию.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-4024452692026479573?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/4024452692026479573/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/12/drushmake.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4024452692026479573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4024452692026479573'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/12/drushmake.html' title='drush_make и патчи'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-2619334380096246973</id><published>2010-08-29T17:39:00.000+04:00</published><updated>2010-08-29T17:39:45.875+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>select all для checkbox-а в заголовке таблицы</title><content type='html'>&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: #682502;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="color: black; font-family: Arial; font-size: medium;"&gt;&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;Из функции&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: 11px;"&gt;theme_node_admin_nodes:&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: #682502;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;$select_header&amp;nbsp;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: black;"&gt;=&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: #682502;"&gt;$has_posts&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: black;"&gt;? theme(&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;'table_select_header_cell'&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: black;"&gt;) :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;''&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: black;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="color: #008200; font-family: Monaco; font-size: 11px;"&gt;&lt;span style="color: black;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: grey; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;/**&lt;/div&gt;&lt;div style="color: grey; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;* Returns a header cell for tables that have a select all functionality.&lt;/div&gt;&lt;div style="color: grey; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;*/&lt;/div&gt;&lt;div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="color: blue;"&gt;function&amp;nbsp;&lt;/span&gt;theme_table_select_header_cell() {&lt;/div&gt;&lt;div style="color: #008200; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp; drupal_add_js(&lt;/span&gt;'misc/tableselect.js'&lt;span style="color: black;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div style="font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; min-height: 15px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: #008200; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="color: black;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;return array&lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;'class'&amp;nbsp;&lt;span style="color: black;"&gt;=&amp;gt;&lt;/span&gt;'select-all'&lt;span style="color: black;"&gt;);&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: 11px;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Monaco; font-size: 11px;"&gt;Раньше сам городил javascript для этой задачи. Оказывается, в друпале для этого уже все есть.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-2619334380096246973?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/2619334380096246973/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/08/select-all-checkbox.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/2619334380096246973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/2619334380096246973'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/08/select-all-checkbox.html' title='select all для checkbox-а в заголовке таблицы'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-7802627385938612591</id><published>2010-08-11T01:16:00.010+04:00</published><updated>2011-03-13T21:03:32.019+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='vkontakte'/><title type='text'>Мониторинг друзей vkontakte</title><content type='html'>Если кто-то удаляется из друзей вконтакте, не всегда удается вспомнить, кто же это был. Конечно может это и к лучшему, но&amp;nbsp;хотя бы&amp;nbsp;из любопытсва хочется узнать, кто это. На коленке тут накотал скрипт, который сохраняет в localStorage браузера список друзей и позволяет вычислить, кто тот самый "удаленец".&lt;br /&gt;&lt;br /&gt;&lt;a href="http://github.com/vectoroc/vk_friends_watcher"&gt;Вот&lt;/a&gt; сам скрипт, кому интересно. Кому еще интереснее, &lt;a href="http://gist.github.com/518021"&gt;здесь&lt;/a&gt; первая версия, работающая через database storage (у меня работало только в Safary).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_N4n_3o2Y7Pk/TGRh73dwyCI/AAAAAAAAB5g/ayNSQSLkOrA/s1600/%D0%92+%D0%9A%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5+%7C+%D0%92%D0%B8%D0%BA%D1%82%D0%BE%D1%80+%D0%93%D1%80%D0%B8%D0%B3%D0%BE%D1%80%D1%8C%D0%B5%D0%B2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_N4n_3o2Y7Pk/TGRh73dwyCI/AAAAAAAAB5g/ayNSQSLkOrA/s320/%D0%92+%D0%9A%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5+%7C+%D0%92%D0%B8%D0%BA%D1%82%D0%BE%D1%80+%D0%93%D1%80%D0%B8%D0%B3%D0%BE%D1%80%D1%8C%D0%B5%D0%B2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Для простой установки перетащите &lt;s&gt;эту &lt;/s&gt;&lt;a href="javascript:if%28%21window.localStorage%7C%7C%21window.JSON%29%7Bvar%20error%3D%22You%20use%20unsupported%20browser%22%3Balert%28%22You%20use%20unsupported%20browser%22%29%3Bthrow%20error%7D%28function%28%29%7Bvar%20NS%3D%22vk_friends_watcher_%22%3Bvar%20storage%3D%7Bhistory%3AJSON.parse%28localStorage.getItem%28NS%2B%22history%22%29%29%7C%7C%5B%5D%2Cfriends%3AJSON.parse%28localStorage.getItem%28NS%2B%22friends%22%29%29%7C%7C%7B%7D%2Cflush%3Afunction%28%29%7BlocalStorage.setItem%28NS%2B%22history%22%2CJSON.stringify%28this.history%29%29%3BlocalStorage.setItem%28NS%2B%22friends%22%2CJSON.stringify%28this.friends%29%29%7D%7D%3Bfunction%20markDeleted%28friend%29%7Bstorage.friends%5Bfriend.id%5D.deleted%3Dtrue%3Bstorage.history.push%28%7Bevent%3A%22deleted%22%2Cdata%3Afriend.id%2Ctime%3ADate.now%28%29%7D%29%7Dfunction%20markAdded%28friend%29%7Bstorage.history.push%28%7Btype%3A%22added%22%2Cdata%3Afriend.id%2Ctime%3ADate.now%28%29%7D%29%3Bstorage.friends%5Bfriend.id%5D%3Dfriend%7Dfunction%20parseVkJsonFriends%28responseText%29%7Bvar%20result%3D%7B%7D%3Bvar%20data%3Deval%28%22%28%22%2BresponseText%2B%22%29%22%29%3Bfor%28var%20i%3D0%3Bi%3Cdata.friends.length%3Bi%2B%2B%29%7Bresult%5Bdata.friends%5Bi%5D%5B0%5D%5D%3D%7Bid%3Adata.friends%5Bi%5D%5B0%5D%2Cname%3Adata.friends%5Bi%5D%5B1%5D%2Cava%3Adata.friends%5Bi%5D%5B2%5D%7D%7Dreturn%20result%7Dfunction%20_getMessageBox%28%29%7Bif%28%21_getMessageBox._mb%29%7B_getMessageBox._mb%3Dnew%20MessageBox%28%7Btitle%3A%22History%22%7D%29%7Dreturn%20_getMessageBox._mb%7Dfunction%20_substitute%28tpl%2Cparams%29%7Bfor%28var%20key%20in%20params%29%7Btpl%3Dtpl.replace%28%22%23%7B%22%2Bkey%2B%22%7D%22%2Cparams%5Bkey%5D%29%7Dreturn%20tpl%7Dfunction%20showHistory%28%29%7Bvar%20result%3D%5B%5D%2Cmb%3D_getMessageBox%28%29%3Bvar%20rowTpl%3D%5B%22%3Ctable%3E%22%2C%22%3Ctr%3E%22%2C%27%3Ctd%20rowspan%3D%223%22%3E%27%2C%27%3Cimg%20height%3D40%20width%3D40%20src%3D%22%23%7Bava%7D%22%2F%3E%27%2C%22%3C%2Ftd%3E%22%2C%22%3Ctd%3E%22%2C%27%3Ca%20href%3D%22http%3A%2F%2Fvk.com%2Fid%23%7Bid%7D%22%3E%23%7Bname%7D%3C%2Fa%3E%27%2C%22%3C%2Ftd%3E%22%2C%22%3C%2Ftr%3E%22%2C%22%3Ctr%3E%22%2C%27%3Ctd%20style%3D%22color%3A%20gray%22%3E%27%2C%22%23%7Baction%7D%20%23%7Bdate%7D%22%2C%22%3C%2Ftd%3E%22%2C%22%3C%2Ftr%3E%22%2C%22%3Ctr%3E%3Ctd%3E%26nbsp%3B%3C%2Ftd%3E%3C%2Ftr%3E%22%2C%22%3C%2Ftable%3E%22%5D.join%28%22%22%29%3Bresult.push%28%27%3Cdiv%20style%3D%22overflow-y%3A%20scroll%3B%20height%3A%20300px%22%3E%27%29%3Bfor%28var%20i%3Dstorage.history.length-1%3Bi%3E%3D0%3Bi--%29%7Bvar%20event%3Dstorage.history%5Bi%5D%3Bvar%20friend%3Dstorage.friends%5Bevent.data%5D%3Bvar%20params%3Dclone%28friend%29%3Bparams.date%3Dnew%20Date%28event.time%29.toLocaleDateString%28%29%3Bif%28event.type%3D%3D%22added%22%29%7Bparams.action%3D%22%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%22%7Delse%7Bparams.action%3D%22%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%22%7Dresult.push%28_substitute%28rowTpl%2Cparams%29%29%7Dif%28storage.history.length%3D%3D0%29%7Bresult.push%28%27%3Cspan%20style%3D%22color%3A%20gray%22%3E%D0%9D%D0%B5%D1%82%20%D0%BD%D0%B8%D0%BA%D0%B0%D0%BA%D0%B8%D1%85%20%D0%B7%D0%B0%D0%BF%D0%B8%D1%81%D0%B5%D0%B9%3C%2Fspan%3E%27%29%7Dresult.push%28%22%3C%2Fdiv%3E%22%29%3Bmb.addButton%28%7Blabel%3A%22Ok%22%2ConClick%3Afunction%28%29%7Bmb.hide%28%29%7D%7D%29%3Bmb.addButton%28%7Blabel%3A%22%D0%A1lear%22%2ConClick%3Afunction%28%29%7Bstorage.history%3D%5B%5D%3Bstorage.flush%28%29%3Bmb.hide%28%29%7D%7D%29%3Bmb.content%28result.join%28%22%22%29%29%3Bmb.show%28%29%7Dfunction%20showLoader%28%29%7B_getMessageBox%28%29.content%28%27%3Cdiv%20class%3D%22box_loader%22%3E%3C%2Fdiv%3E%27%29.show%28%29%7DshowLoader%28%29%3BAjax.Get%28%7Burl%3A%22friends.php%22%2ConDone%3Afunction%28ajaxObj%2CresponseText%29%7Bvar%20friends_remote%3DparseVkJsonFriends%28responseText%29%3Bfor%28var%20id%20in%20storage.friends%29%7Bif%28%21friends_remote%5Bid%5D%26%26%21storage.friends%5Bid%5D.deleted%29%7BmarkDeleted%28storage.friends%5Bid%5D%29%7D%7Dfor%28var%20id%20in%20friends_remote%29%7Bif%28%21storage.friends%5Bid%5D%7C%7Cstorage.friends%5Bid%5D.deleted%29%7BmarkAdded%28friends_remote%5Bid%5D%29%7D%7DshowHistory%28%29%3Bstorage.flush%28%29%7D%7D%29%7D%29%28%29%3B"&gt;&lt;s&gt;сслыку&lt;/s&gt;&lt;/a&gt;&amp;nbsp;эту &lt;a href="javascript:(function(){var a=document.createElement(&amp;quot;script&amp;quot;);a.src=&amp;quot;https://github.com/vectoroc/vk_friends_watcher/raw/master/vk_friends_watcher.js&amp;quot;;document.body.appendChild(a)})();"&gt;ссылку&lt;/a&gt; в закладки и можете пряма оттуда запускать. Вне вконтакта работать не будет, надо запускать со страниц vkontake.&amp;nbsp;При первом запуске сохранится список текущий друзей, при дальнейших запусках будут отмечаться изменения в списке. Соответственно, если у вас уже пропали друзья, но вы не запускали этот скрипт ранее, вам он &lt;b&gt;не поможет&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;PS. &amp;nbsp;Я знаю, что во вконтакте есть приложения, которые могут вычислить удалившихся друзей. Советую вам пользоваться такими приложениями, через них сложнее угнать ваш аккаунт. И вообще советую с подозрением относиться к ссылкам, начинающимся на "javascript:"...&lt;br /&gt;&lt;br /&gt;UPD (13.03.2010). Букмарклет теперь только подгружает скрипт с github-а.&lt;br /&gt;vkontakte не стоит на месте, некоторые старые скрипты уже недоступны. В связи с этим немного подправил скрипт. Работает он теперь только на странице "Мои друзья".&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-7802627385938612591?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/7802627385938612591/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/08/vkontakte.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/7802627385938612591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/7802627385938612591'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/08/vkontakte.html' title='Мониторинг друзей vkontakte'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_N4n_3o2Y7Pk/TGRh73dwyCI/AAAAAAAAB5g/ayNSQSLkOrA/s72-c/%D0%92+%D0%9A%D0%BE%D0%BD%D1%82%D0%B0%D0%BA%D1%82%D0%B5+%7C+%D0%92%D0%B8%D0%BA%D1%82%D0%BE%D1%80+%D0%93%D1%80%D0%B8%D0%B3%D0%BE%D1%80%D1%8C%D0%B5%D0%B2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-5988462949851737562</id><published>2010-06-04T22:38:00.001+04:00</published><updated>2010-06-04T23:02:58.051+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Совершенный код'/><category scheme='http://www.blogger.com/atom/ns#' term='заметки КО'/><title type='text'>Разумные причины создания классов</title><content type='html'>&lt;b&gt;&lt;i&gt;Моделирование объектов реального мира&amp;nbsp;&lt;span class="Apple-style-span" style="font-style: normal; font-weight: normal;"&gt;Создайте класс для каждого объекта реального мира, моделируемого вашей программой.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Моделирование абстрактных объектов &lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Прекрасный пример - классический обьект &lt;/span&gt;Shape&lt;span class="Apple-style-span" style="font-style: normal;"&gt; (фигура). Нахождение адекватных абстрактных объектов – одна из главных проблем ООП.&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Снижение сложности &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;– самая важная причина создания класса (сокрытие деталей, минимизация объема кода, облегчение сопровождения программы).&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Изоляция сложности &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;При возникновении ошибки ее будет проще найти, если она будет локализована в классе, а не распределена по всему коду. Если вы найдете более эффективный алгоритм, им бдет легче заменить старый алгоритм, изолированный в классе...&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Облегчение повторного использования кода&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Планирование создания семейства программ &lt;/i&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Если вы ожидаете, что программу придется изменять, разумно изолировать области предполагаемых изменений в отдельных классах. После этого вы можете изменять классы, не влияя на остальную часть программы, или вообще заменить их на абсолютно новые классы.&lt;/span&gt;&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-5988462949851737562?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/5988462949851737562/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/06/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/5988462949851737562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/5988462949851737562'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/06/blog-post.html' title='Разумные причины создания классов'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-3845233628150064668</id><published>2010-06-04T22:11:00.001+04:00</published><updated>2010-06-04T23:02:58.058+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Совершенный код'/><category scheme='http://www.blogger.com/atom/ns#' term='заметки КО'/><title type='text'>О наследовании</title><content type='html'>&lt;b&gt;&lt;i&gt;Избегайте многоуровневых иерархий наследования&lt;/i&gt;. &lt;/b&gt;Создание многоуровневых иерархий наследования значительно повышает число ошибок. &amp;nbsp;Многоуровневые иерархии повышают сложность, что диаметрально противоположно цели наследования. Убедитесь, что используете наследование, чтобы избежать дублирования кода и &lt;i&gt;минимизировать сложность&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Предпочитайте полиморфизм, а не крупномасштабную проверку типов&lt;/i&gt;.&lt;/b&gt; Наличие в коде большого числа блоков &lt;i&gt;case&lt;/i&gt; может указывать на то, что программу лучше было бы спроектировать, используя наследование, хотя это верно не всегда.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Пример кода, который, пожалуй, не следует заменять вызовом полиморфного метода (С++)&lt;/i&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;switch ( ui.Command() ) {&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;case Command_OpenFile:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;OpenFile();&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;break;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp;case Command_Exit:&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;...&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: inherit;"&gt;В данном случае можно было бы создать базовый класс и унаследовать от него ряд производных классов, выполняющих каждую команду при помощи полиморфного метода &lt;i&gt;DoCommand() &lt;/i&gt;(как в &amp;nbsp;шаблоне Команда). Но в подобной простой ситуации это неуместно: имя метода было бы слишком туманным и неинформативным в сравнении с &lt;i&gt;case&lt;/i&gt;-блоками.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;i&gt;Делайте все данные закрытыми, а не защищенными&lt;/i&gt;.&lt;/b&gt; Выполняя наследование от классы, вы получаете привилегированный доступ к его защищенным методам и данным. Если производному классу на самом деле нужен доступ к атрибутам базового класса, включите а базовый класс защищенные методы доступа.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Множественное наследование &lt;span class="Apple-style-span" style="font-weight: normal;"&gt;полезно главным образом только при создании&lt;i&gt;&amp;nbsp;&lt;/i&gt;«примесей» (&lt;span class="Apple-style-span" style="font-style: italic;"&gt;mixin)&lt;/span&gt;. &lt;i&gt;Mixin&lt;/i&gt;-ы почти всегда являются абстрактными и не поддерживают создания экземпляров независимо от других обьектов.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;...&lt;br /&gt;Похоже, разработчики Java и Visual Basix понимали ценность миксинов, разрешив множественное наследование интерфейсов, но только единичное наследование классов.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-3845233628150064668?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/3845233628150064668/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/06/blog-post_04.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/3845233628150064668'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/3845233628150064668'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/06/blog-post_04.html' title='О наследовании'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-1823061606706637532</id><published>2010-06-04T22:00:00.000+04:00</published><updated>2010-06-04T22:00:01.377+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Совершенный код'/><category scheme='http://www.blogger.com/atom/ns#' term='заметки КО'/><title type='text'>Принцип достановки Лисков (LSP)</title><content type='html'>«Клиенты должны иметь возможность использования подклассов через интерфейс базового класса, не замечая никаких раздичий» (Hunt and Thomas, 2000)&lt;br /&gt;&lt;br /&gt;Вроде очевидные вещи, но, думаю, многих людей название смутило бы...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-1823061606706637532?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/1823061606706637532/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/06/lsp.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/1823061606706637532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/1823061606706637532'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/06/lsp.html' title='Принцип достановки Лисков (LSP)'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-4991275688348301747</id><published>2010-05-31T09:44:00.002+04:00</published><updated>2010-05-31T09:52:47.912+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Совершенный код'/><category scheme='http://www.blogger.com/atom/ns#' term='заметки КО'/><title type='text'></title><content type='html'>Пока вы не оцените производитльность системы и не найдете узкие места, лучшим способом подготовки к повышению производительности на уровне кода является модульное проектирование. Позже, определив в коде «горячие точки», вы оптимизируете отдельные классы и методы, не затрагивая остальную часть системы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-4991275688348301747?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/4991275688348301747/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post_4095.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4991275688348301747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4991275688348301747'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post_4095.html' title=''/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-4591188880897654816</id><published>2010-05-30T19:41:00.001+04:00</published><updated>2010-05-31T09:52:15.652+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Совершенный код'/><category scheme='http://www.blogger.com/atom/ns#' term='заметки КО'/><title type='text'>Сокрытие информации</title><content type='html'>&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;Размышление о том, что скрыть, способствует принятию удачных решений на всех уровнях проектирования. Оно подталкивает к применению именованных констант вместо чисел на уровне конструирования, помогает выбирать удачные имена методов классов и их параметров и указывает на грамотные варианты декомпозиции и реализации взаимодействия классов и подсистем на уровне системы.&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;&lt;span class="Apple-style-span"&gt;Почаще задавайте себе вопрос “Что мне скрыть?”, и вы удивитсь, сколько проблем проектирования расстает на ваших глазах.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;В юбилейном 20-летнем издании книги «Мифически человеко-месяц» Фред Брукс пришел к выводу, что критика сокрытия информации была одной из ошибок, допущенных им в первом издании книги. «Парнас был прав в отношении сокрытия информации, а я ошибался», - признался он (Brooks, 1995).&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Grande'; font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-size: 11px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-4591188880897654816?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/4591188880897654816/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post_6348.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4591188880897654816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4591188880897654816'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post_6348.html' title='Сокрытие информации'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-4622484234712830435</id><published>2010-05-30T19:13:00.000+04:00</published><updated>2010-05-31T09:48:11.691+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Совершенный код'/><category scheme='http://www.blogger.com/atom/ns#' term='заметки КО'/><title type='text'></title><content type='html'>Программа не должна содержать циклических отношений, при которых класс А использует класс В, класс В использует класс С, а класс С - класс А.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-4622484234712830435?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/4622484234712830435/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post_30.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4622484234712830435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/4622484234712830435'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post_30.html' title=''/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-3797299729452435733</id><published>2010-05-27T16:31:00.001+04:00</published><updated>2010-05-31T09:53:35.301+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Совершенный код'/><category scheme='http://www.blogger.com/atom/ns#' term='заметки КО'/><title type='text'>Желательные характеристики проекта</title><content type='html'>&lt;ul&gt;&lt;li&gt;Минимальная сложность&lt;/li&gt;&lt;li&gt;Простота сопровождения&lt;/li&gt;&lt;li&gt;Слабое сопряжение&lt;/li&gt;&lt;li&gt;Расширяемость&lt;/li&gt;&lt;li&gt;Возможность повторного использования&lt;/li&gt;&lt;li&gt;Высокий коэффициент объединения по входу &lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;i&gt;(к конкретному классу обращается большое число других классов)&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Низкий или средний коэффициент &amp;nbsp;разветвления по выходу &lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(конкретный класс обращается к малому или среднему числу других классов)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Портируемость&lt;/li&gt;&lt;li&gt;Минимальная, но полная функциональность&lt;/li&gt;&lt;li&gt;Стратификация &lt;i&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;(отсутствие в системе лишних частей)&lt;/span&gt;&lt;/i&gt;&lt;/li&gt;&lt;li&gt;Соответствие стандартным методикам&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-3797299729452435733?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/3797299729452435733/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/3797299729452435733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/3797299729452435733'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2010/05/blog-post.html' title='Желательные характеристики проекта'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-349021035983670929</id><published>2009-10-24T19:53:00.001+04:00</published><updated>2010-05-31T09:14:29.468+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'>popups api</title><content type='html'>Выполняя заказ на elance.com, открыл для себя модуль &lt;a href="http://drupal.org/project/popups"&gt;Popups&lt;/a&gt;. Я, как обычно, делал велосипед для ajax-залогинивания, но заказчик оказался более осведомленным, чем я. Позволяeт выводить просто popup-ы со своим содержимым,&amp;nbsp;подгружать странички/формы в ajax popup-е (например по клику на ссылке &amp;nbsp;с классом &lt;span style="font-family: 'Courier New', Courier, monospace;"&gt;popup&lt;/span&gt;). Через jquery можно подписаться на 3 события от popups-ов, о чем не сказано в документации. Будете использовать - посмотрите в исходниках, возможно окажется полезным ;).&lt;br /&gt;&lt;br /&gt;Описание со странички проекта:&lt;br /&gt;&lt;blockquote&gt;&lt;span style="color: #003150; font-family: 'Bitstream Vera Sans', Verdana, Helvetica; font-size: 13px; line-height: 17px;"&gt; API for building modal ajax dialogs. Its focus is on putting forms inside of ajax popup dialogs. Current example can present pages as popups (of the&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Lightbox_(JavaScript)" rel="nofollow"&gt;&lt;span style="color: #003150;"&gt;&lt;span style="text-decoration: none;"&gt;lightbox type&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;). This is amazingly useful for things like confirmation pages. And the best part is it can be applied retroactively to a page without needing to modify the generating module, and (of course) it degrades gracefully.&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-349021035983670929?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/349021035983670929/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2009/10/popups-api.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/349021035983670929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/349021035983670929'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2009/10/popups-api.html' title='popups api'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-7270570065997370309</id><published>2009-10-23T07:36:00.000+04:00</published><updated>2010-05-31T09:35:06.117+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='api'/><category scheme='http://www.blogger.com/atom/ns#' term='drupal'/><title type='text'></title><content type='html'>Сегодня с удивлением для себя открыл функцию &lt;span style="font-family: Monaco, serif;"&gt;user_external_login&lt;/span&gt;. Она позволяет грамотно залогиниться, если этого требует логика вашего приложения в обход стандартной формы входа. Раньше довольствовался хаком &lt;span style="font-family: Monaco, serif;"&gt; $_GLOBAL['user'] = user_load($uid);.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Monaco, serif;"&gt;&lt;/span&gt; &lt;span style="font-family: Monaco, serif;"&gt; user_external_login_register&lt;/span&gt; - тоже любопытный экземпляр.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-7270570065997370309?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/7270570065997370309/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2009/10/userexternallogin.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/7270570065997370309'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/7270570065997370309'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2009/10/userexternallogin.html' title=''/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-470269364869739543.post-1825722314760918322</id><published>2009-10-21T06:46:00.000+04:00</published><updated>2010-05-31T09:14:29.479+04:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geoip'/><category scheme='http://www.blogger.com/atom/ns#' term='халява'/><title type='text'>Free IP address geolocation tools</title><content type='html'>Из &lt;a href="http://m.habrahabr.ru/post/72674/"&gt;статьи&lt;/a&gt; на хабре узнал о полезном сервисе &lt;a href="http://ipinfodb.com/"&gt;ipinfodb.com&lt;/a&gt;, который предоставляет бесплатно базу для определения локации пользователя по его IP-адресу.  Как раз недавно пытался найти что-то подобное, но нашел только условно бесплатные максминдовские базы.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/470269364869739543-1825722314760918322?l=blog.vectoroc.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.vectoroc.com/feeds/1825722314760918322/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://blog.vectoroc.com/2009/10/free-ip-address-geolocation-tools.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/1825722314760918322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/470269364869739543/posts/default/1825722314760918322'/><link rel='alternate' type='text/html' href='http://blog.vectoroc.com/2009/10/free-ip-address-geolocation-tools.html' title='Free IP address geolocation tools'/><author><name>vectoroc</name><uri>http://www.blogger.com/profile/15934374576991137417</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://1.bp.blogspot.com/_N4n_3o2Y7Pk/TANF34E052I/AAAAAAAAB4g/cmbZpMoQxNY/s1600-R/a_234ec3bd.jpg'/></author><thr:total>0</thr:total></entry></feed>
