map#1
map#2
map#3
map#4
map#5
map#6
map#7
map#8
map#9
map#10
map#11
map#12
map#13
map#14
map#15
map#16
map#17
map#18
map#19
map#20
map#21
map#22
map#23
map#24
map#25
map#26
map#27
map#28
map#29
map#30
map#31
map#32
map#33
map#34
map#35
map#36
map#37
map#38
map#39
map#40
map#41
map#42
map#43
map#44
map#45
map#46
map#47
map#48
map#49
map#50
map#51
map#52
map#53
map#54
map#55
map#56
map#57
map#58
map#59
map#60
map#61
map#62
map#63
map#64
map#65
map#66
map#67
map#68
map#69
map#70
map#71
map#72
map#73
map#74
map#75
map#76
map#77
map#78
map#79
map#80
map#81
map#82
map#83
map#84
map#85
map#86
map#87
map#88
map#89
map#90
map#91
map#92
map#93
map#94
map#95
map#96
map#97
map#98
map#99
map#100
map#101
map#102
map#103
map#104
map#105
map#106
map#107
map#108
map#109
map#110
map#111
map#112
map#113
map#114
map#115
map#116
map#117
map#118
map#119
map#120
map#121
map#122
map#123
map#124
map#125
map#126
map#127
map#128
map#129
map#130
map#131
map#132
map#133
map#134
map#135
map#136
map#137
map#138
map#139
map#140
map#141
map#142
map#143
map#144
map#145
map#146
map#147
map#148
map#149
map#150
map#151
map#152
map#153
map#154
map#155
map#156
map#157
map#158
map#159
map#160
map#161
map#162
map#163
map#164
map#165
map#166
map#167
map#168
map#169
map#170
map#171
map#172
map#173
map#174
map#175
map#176
map#177
map#178
map#179
map#180
map#181
map#182
map#183
map#184
map#185
map#186
map#187
map#188
map#189
map#190
map#191
map#192
map#193
map#194
map#195
map#196
map#197
map#198
map#199
map#200
map#201
map#202
map#203
map#204
map#205
map#206
map#207
map#208
map#209
map#210
map#211
map#212
map#213
map#214
map#215
map#216
map#217
map#218
map#219
map#220
map#221
map#222
map#223
map#224
map#225
map#226
map#227
map#228
map#229
map#230
map#231
map#232
map#233
map#234
map#235
map#236
map#237
map#238
map#239
map#240
map#241
map#242
map#243
map#244
map#245
map#246
map#247
map#248
map#249
map#250
map#251
map#252
map#253
map#254
map#255
map#256
map#257
map#258
map#259
map#260
map#261
map#262
map#263
map#264
map#265
map#266
map#267
map#268
map#269
map#270
map#271
map#272
map#273
map#274
map#275
map#276
map#277
map#278
map#279
map#280
map#281

Конкурс от ag.ru

08.09.2011

Читая рецензию на Deus Ex: HR (кстати классная игра всем советую) наткнулся на конкурс рабочих мест от Absolute Games. Просмотрев список участников мелькнула мысль, что у меня не хуже, и недолго думая загрузил недавно сделанную фотографию своего рабочего места.

Сама фотография сделана для экспиремента со съемкой в HDR. Ну и раз уж решил поучаствовать было бы глупо не попросить пользователей моего сайта поддержать и проголосовать за мой снимок. Все что нужно сделать это зайти по ссылке – http://www.ag.ru/iclubby/36 и поставить 3 балла моему рабочему месту. Если возникли сложности – под катом раскажу подробнее.
Остальное

Обновил закладочник до 2.1.1

08.02.2011

И даже написать об этом забыл, впрочем в самой программе должно вспыхнуть оповещение. Интересно кто то ещё им пользуется? В общем там исправлены ошибки и доведены модули до рабочего состояния.

Импорт статистики на бирже сайтов

08.12.2010

По моим наблюдениям самые частые комментарии на бирже сайтов это просьбы показать или открыть статистику. Продавец зачастую ничего не скрывает, но существует проблема если статистика закрыта и нет возможности предоставить к ней доступ широкой аудитории (пример – google analytics). Раньше в этом случае покупателям приходилось довольствоваться лишь устными заявлениями продавца либо скриншотами.

Теперь же любой продавец на бирже может импортировать свою статистику на страницу лота, при покупатели будут уверены что перед ними статистика именно продаваемого сайта а не быстро нарисованный скриншот из photoshop`а. Выглядит это примерно так:

В итоге потенциальный покупатель на одной странице видит почти все начиная от показателей тИЦ, PR и заканчивая статистикой переходов по ключевым словам за месяц.

Ну и какой смысл сидеть в прошлом веке и покупать/продавать на форумах?

Скриншоты в анализе сайта

27.11.2010

Продолжаю дорабатывать pr-cy. Теперь и в анализе сайта отображаются скриншоты собственного производства. Сегодня первый день работы, поэтому скриншоты будут изготавливаться с задержкой, но через некоторое время все стабилизируется.
Скриншоты на pr-cy
Ну правда стало гораздо аккуратней? :)

Поддержка .РФ в панели вебмастера

25.11.2010

Ну вот как я и обещал появилась поддержка русскоязычных доменов в панели вебмастера. Правда пока не определяется число страниц в индексе яндекса (у него почему то не работает оператор site: с РФ зоной), но в остальном вроде работает. Честно говоря панель давно пора основательно переделать, чем возможно вскоре и займусь.

Система скриншотов на бирже сайтов

24.11.2010

Возможно кто то заметил что в последнее время у нас на бирже сайтов наблюдались, некоторые кхмм проблемы. Дело в том что старая система создания скриншотов (с помощью Firefox и какой то матери) перестала выдерживать нагрузку, да спроектирована была изначально с просчетами. Теперь все по другому – все сайты строятся в очередь и специально обученный демон рисует для них картинки. И у него это неплохо получается!

Класс Cacher (специально для Тормоза)

22.11.2010

В очередной раз Тормоз устроил дичайший холивар в своем блоге.

Я туда боюсь заходить – зашибут ещё ненароком. Между тем, задача как мне кажется легко решается. Вот накидал за 10 минут:

  1. <?php
  2.  
  3. class Cacher {
  4.     // Время жизни кэша в секундах
  5.     public $timeout = 10;
  6.  
  7.     // Массив с кэшем (хранится в памяти т. к. это всего лишь пример)
  8.     private $cache = array();
  9.  
  10.     public function __call($name, $args) {
  11.         return $this->realCall($name, $args);
  12.     }
  13.  
  14.     public function call($callback) {
  15.         $args = array();
  16.         if (func_num_args() > 1) {
  17.             $args = array_slice(func_get_args(), 1);
  18.         }
  19.         return $this->realCall($callback, $args);
  20.     }
  21.  
  22.     private function realCall($callback, $args = array()) {
  23.         $cacheKey = $this->getKey($callback, $args);
  24.  
  25.         // Выводим из памяти если существует кэш и он не просрочен
  26.         if ($this->hasCache($cacheKey)) {
  27.             echo "From cache with love.<br/>\r\n";
  28.             return $this->getCache($cacheKey);
  29.         }
  30.  
  31.         $data = call_user_func_array($callback, $args);
  32.         $this->setCache($cacheKey, $data);
  33.  
  34.         return $data;
  35.     }
  36.  
  37.     // Генерирует хэш ключ для кэша :)
  38.     private function getKey() {
  39.         $serialized = serialize(func_get_args());
  40.         $key = md5($serialized);
  41.         return $key;
  42.     }
  43.  
  44.     private function hasCache($key) {
  45.         if (isset($this->cache[$key])) {
  46.             if ($this->cache[$key]->expire > time()) {
  47.                 return true;
  48.             } else {
  49.                 // Удаляем просроченный кэш
  50.                 unset($this->cache[$key]);
  51.             }
  52.         }
  53.         return false;
  54.     }
  55.  
  56.     private function getCache($key) {
  57.         return $this->cache[$key]->data;
  58.     }
  59.  
  60.     private function setCache($key, $data) {
  61.         $this->cache[$key] = (object) array(
  62.             'expire' => time() + $this->timeout,
  63.             'data' => $data,
  64.         );
  65.     }
  66. }
  67.  
  68.  
  69. ?>

И пример использования:

  1. <?php
  2.  
  3. require './Cacher.php';
  4.  
  5. $cacher = new Cacher;
  6.  
  7. // Через __call
  8. $cacher->file_get_contents('http://jeck.ru');
  9. $cacher->file_get_contents('http://jeck.ru');
  10.  
  11. class TestClass {
  12.     private $param = 'paramValue';
  13.  
  14.     public function testMethod($url) {
  15.         return file_get_contents($url);
  16.     }
  17. }
  18.  
  19. $testClass = new TestClass;
  20. // Через call что бы передать имя и метод класса
  21. $cacher->call(array($testClass, 'testMethod'), 'http://jeck.ru');
  22.  
  23. ?>

Ушлые спамеры

19.11.2010

Вот такое письмо сейчас прибыло на почту:

Здравствуйте!

Высылаю анкету на организацию рекламной кампании для Вашего сайта – jeck.ru

Пожалуйста, заполните необходимые поля и вышлите ее на Email: valimaster@yandex.ru

После чего, Вам будет предоставлен доступ к личному кабинету и счет для оплаты.

С уважением, Владислав.

По любым возникшим вопросам обращайтесь:
Телефон: +7 (495) 585-62-89
ICQ: 569775857

Надеюсь теперь их email и icq попадут в спам базы.

PR-CY теперь поддерживает .РФ

17.11.2010

Вот например – http://pr-cy.ru/analysis/президент.рф.
Анализ президент.рф
Кроме того весь анализ был полностью переписан, он стал гораздо шустрее особенно с учетом того что кешируется только контент самого сайта, а тИЦ и PR проверяются каждый раз заново.

Работа с AntiCaptcha

16.11.2010

Снова решил поделится удобной библиотечкой, на этот раз для наглого спама удобного прохождения CAPTCHA. Код лежит на assembla.
Пример работы с библиотекой:

  1. <?php
  2.  
  3. require './anticaptcha.php';
  4.  
  5. try {
  6.     // 5a2e55b49179066bc702342412cf5cbc - ключ AntiCaptcha
  7.     $ac = new AntiCaptcha('5a2e55b49179066bc702342412cf5cbc');
  8.  
  9.     // Задаем ограничивающие параметры
  10.     $ac->numeric = true;
  11.     $ac->min_len = 6;
  12.     $ac->max_len = 6;
  13.  
  14.     // Получаем каптчу
  15.     $captcha = file_get_contents('http://jeck.ru/labs/captcha');
  16.  
  17.     // Расшифровываем налету
  18.     echo "Start auto recognizing\r\n";
  19.     $code = $ac->recognize($captcha, true);
  20.     echo "Recognized code - ".$code."\r\n";
  21.     // Сохраняем каптчу в файл
  22.     file_put_contents('./captcha.png', $captcha);
  23.  
  24.     // Расшифровываем из файла
  25.     echo "Start file recognizing\r\n";
  26.     $code = $ac->recognize('./captcha.png');
  27.     echo "Recognized code - ".$code."\r\n";
  28. } catch (Exception $e) {
  29.     // Обработка исключений
  30.     echo $e->getMessage();
  31. }
  32.  
  33. ?>

Основное преимущество – нет необходимости сохранять изображение в файл. Кстати если интересно тут можно посмотреть процесс рефакторинга.

И не стесняйтесь – подписывайтесь.

Старые записи →