08:23 pm
[ссылка] |
Травутилс v6.0 Готовится решение о разработке 6й версии Травутилса.
Движок/framework/cms от этого всего дела (вместе с документацией) будет общедоступен на BSD или MIT лицензии. Сам новый Травутилз будет включать в себя, кроме существующего функционала: * Статистику старых серверов начиная от "7 мая 2007". * Рассылку уведомления о новых серверах/ custom статистика в рассылке (например получать ежедневно отчёт о своих альянсах). * Возможность смотреть изменения статистики по дням/по неделям/по месяцам. * Простая, но эффективная логовница. * Новый дизайн в соответствии с w3c рекомендациями. * userbar для альянсов. * Другие мелочи.
А также будет переписана внутренняя механика обновления - обновления будут обновляться почти мгновенно, то есть как только инфа появилась на Травиане - так сразу (в течении ~ 30 минут).
Расширенная статистика будет полностью свёрнута (возможно останется доступны архивные данные). Что делать с crop finder ещё неясно. Но очень хочется его тоже свернуть в виду геморойности его поддержки. Скорей всего будет добавлена фича "залотых клеток" (150% зерна), а со временем вообще отключён.
|
10:31 pm
[ссылка] |
Концепт безбарьерной формы 2 В продолжении http://anlide.livejournal.com/52992.html
Задача - сделать на совесть систему логинов. В предыдущем посте была рассмотрена ситуация, когда на обработчку формы приходится 3 принципиально разных метода обработки. Теперь выяснилось, что есть небольшая (но фатальная) проблема - нельзя сделать нормальный редирект на JS, если форма отработала без ошибок.
Есть три способа: * "location.href" и куча его разновидностей. * $('a #redirect').click() * ajax возвращать уже новую страницу.
Первый вариант затирает историю браузера, это в данном варианте неприемлемо. Поразмыслив пришёл к выводу что в подавляющем большинстве случаев это тоже неприемлемо. Второй вариант не работает в современных браузерах ибо не безопасно. Понятно, печально. Третий вариант по сути своей не особо отличается от первого варианта. За исключением того, что пользователь в конце операции обработки получит страницу с url формы.
Соль сей басни такова, что обработка формы при помощи JS на сегодняшний день реализована на совесть быть не может.
Итого получается только 2 обработчика формы. Вариант с куками и вариант без куков.
|
09:29 am
[ссылка] |
Концепт безбарьерной формы HTML form как правильно сделать её безбарьерной?
После двух недель исследования на эту тему - сделал рабочий прототип. Форма может работать в 3х режимах. 1. Отключено JS и куки. В этом режиме POST обработчик после выполнения полезной нагрузки или должен показать на собственной странице ещё раз эту форму (есть есть ошибки например) или отправить пользователя на другую страницу (если нет ошибок). 2. Отключено JS но включены куки. POST обработчик после выполнения полезной нагрузки смотрит - а есть ли сессия (в конце выполнения страницы ставится флажок - таким образом мы можем быть уверенными, что флаг соответствует реальному положению дел). Если сессия есть - заполняются переменные в сессии и пользователь редиректится на форму обратно. А форма видит переменные сессии и соответственно выводит ошибки и поля. 3. Включено JS и куки. Используется Jquery.form который дописывает hidden input name="ajax". POST обработчик видя такое дело - рисует как обычный POST запрос. skin/layout видят наличие post/ajax и отдают только контент. Вуаля - формочка корректно отработала.
Также отдельно было изучено и рассмотрено, а как же по человечески делать защиту от SQL инъекции. Не городить кучу кода надранного неизвестно откуда, а именно сделать по человечески, ещё ни разу не видел нормального решения на эту тему. Тоже сделать рабочий прототип. * Для программиста вводится правило - экранировать только двойными ковычками, а сам SQL запрос оборачивается в одинарные кавычки. Параметры SQL запроса экранируются на лету. В момент подставления в SQL строку. * Для корректного отображения в формочке той же двойной кавычки необходимо перед выводом в HTML выполнить htmlentities для каждого выводимого параметра.
ЗЫ. Теперь, когда прототип готов - переделаю всё на правильную архитектуру. В инете уже есть страничка о этом движке. Аля "framework для высоконагруженных сайтов" :) ЗЫЫ. Это была форма регистрации юзверя.
|
09:32 pm
[ссылка] |
Старый код Добрался сегодня до своих старых разработок. В частности - модель солнечной системы в 3D графике. Минут за 5 разобрался в километровом коде... Сам с себя поражаюсь - я уже очень давно не видел настолько хорошо написанный код, настолько хорошо продуманной архитектуры приложения.
Судя по дате файлов оно делалось конец 2005 года - середина 2006 года.
Хочется сказать одно: впечатляет.
|
11:11 pm
[ссылка] |
mysql few rowset Поручил одному человеку сделать хранимую процедуру, которая бы возвращала 2 rowset. Нужно вызвать, выгрести данные и чего-то с ними сделать на стороне php. Причём позарез нужно в одной хранимой процедуре возвращать данные.
У чела возникли проблемы, мол а как же выгрести данные? В виду того, что такое в своей практике использую уже несколько лет - отправил его гуглить до посинения, мол просто тут всё. Ничего не нагуглил, мануалы не помогли. Решил тогда сам попробовать нагуглить требуемую инфу, о том как работать с несколькими rowset. Не нешёл...
Тогда решил запостить готовое решение, думаю ооочень многим оно облегчит жизнь :) пользуйтесь и радуйтесь :) http://php.net/manual/en/mysqli.next-result.php
|
09:30 am
[ссылка] |
Небольшой SQL запрос на travutils сервере... SQL-запрос был успешно выполнен (запрос занял 2905.5481 сек.)
CREATE TABLE `result` SELECT `title`, SUM(`duration`) AS sum, AVG(`duration`) AS avg, COUNT(*) AS count FROM `profile_detail` GROUP BY `title` ORDER BY `sum`;
Целую ночь пытался добавить индекс на колонку "title" - на 33000 секунде я понял что-то что-то нетак...
Структура таблиц вот такая: -- --------------------------------------------------------
-- -- Структура таблицы `profile_detail` --
CREATE TABLE IF NOT EXISTS `profile_detail` ( `id_profile` int(10) unsigned NOT NULL, `sub_index` mediumint(8) unsigned NOT NULL, `duration` bigint(20) unsigned NOT NULL, `title` varchar(300) collate utf8_unicode_ci NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
-- --------------------------------------------------------
-- -- Структура таблицы `profile_sql` --
CREATE TABLE IF NOT EXISTS `profile_sql` ( `id_profile` int(10) unsigned NOT NULL auto_increment, `time` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `id_session` int(10) unsigned NOT NULL, `index` mediumint(8) unsigned NOT NULL, `sql` text collate utf8_unicode_ci NOT NULL, PRIMARY KEY (`id_profile`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=6418599 ;
============================== Суть - залогировать все SQL запросы за сутки (24 часа 7 минут) и сделать profile для каждого из них %) Вобщем получилось profile_sql - 6,418,598 записей / 4.6 ГБ profile_detail - 144,343,847 записей / 1.1 ГБ
|
11:26 pm
[ссылка] |
Любителям аллодов посвящается Allods 3 Вы всё ещё ищете метеорит на первом острове? Забудьте! Мы нашли кристалл!
|
01:19 am
[ссылка] |
SVN разные репозитории Спешу поделится приятной новостью :)
Удалось связать два репозитория SVN.
Вобщем предыстория такая. Что вот мол 2.5 года ваял travutils - по ходу дела был сделан движок шустрый, быстрый, понятный, функциональный. Также появилось желание оформить его в OpenSource по BSD лицензии. Одна из целей движка - собрать сайт, который держит нагрузку и при этом качественно решает ряд типичного функционала за 15 минут. Это в свою очередь налагает жёсткие рамки на процесс сборки сайта. И соответственно хранения. Ну и вообще работы с этим всем делом. Плюс сохранить все положительные свойства движка.
Вобщем задача стоит простая - ядро движка в SVN на sourceforge.net, компоненты и модули - там же, но в других проектах. Customize собираемого сайта - в личном/локальном/закрытом репозитории. Вопрос как можно связывать это всё до кучи быстро и качественно. А вот есть возможность выставить атрибут на корневую папку локального репозитория "svn:externals". И в параметр атрибута прописать ссылку на внешний репозиторий.
Есть ньансы и тонкости - но связать разные репозитории SVN можно. И это важно.
Почерпнул из кладязя мудрости тут: http://rsdn.ru/article/devtools/subversions.xml#EDC
|
09:29 am
[ссылка] |
Отпуск У мну на работе отпуск на неделю с понедельника.
За время отпуска планируется сделать две весчи по Травутилсю: * Прикрутить биллинговую систему cashU. Арабский товарищ уже принял все документы и благословил мну на работу :) . Посмотрим что из этого получится. * Сделать платную рассылку новостей о рестартах серверов. Также включить в рассылку информацию локального характера и уведомление о комментах. Ну в общем бизнес логика будет не из простых, техническая реализация тоже - ибо нагрузка скорей всего через год будет более 50000 мыл/день. Ну и юридическая сторона - отписку правильную придумать и сделать, настроить DNS правильным образом и прочее.
ЗЫ. Цитирую PayPal. Вот вчера ответ пришёл. Чтобы не возникало всяких слухов на тему "PayPal работает в Украине" и прочее.
I have reviewed your account and it shows you do not have this option because in your country you cannot receive funds into your PayPal account. If you are planning to receive funds you will need to use a different payment processor other than PayPal.
|
12:04 am
[ссылка] |
Лицензионное ПО У мну есть лицензионный starcraft! Я по сему поводу страшно горжусь!
Скоро оформлю себе лицензионные и другие продукты blizzard...
|
07:52 pm
[ссылка] |
Алгоритм загрузки map.sql Поступает много отзывов на тему карявости map.sql загрузчика.
Вот например: http://travian-utils.com/?s=ua3&graph
На графике активности сервера периодически возникают падения а потом пропорциональные всплески. Дело в том, что загружаемый алгоритм map.sql файла был изменён при одной проблеме. *давно* Хостер решил, что по фэншую будет правильно ограничить все сервера входящим и исходящим трафиком - в резуьтате сайт стал дико тормозить. Но мы то не знали что хостер такое сделал. Ограничение было что-то вроде 10мбит (что выше крыши для общения с интернетом даже для такого сайта) - но это такое ограничение на общение серверов между собой. То есть сервер БД и веб сервер были ограничены скоростью 10мбит. А для нормальной работы Травутился нужен канал между этими серверами порядка 30мбит. Отсюда на скорую руку был переписан алгоритм загрузки map.sql ибо был риск, что будет полный нуль в течении неопределённого времени. Алгоритм простой - сокеты уровня скрипта были заменены unix fetch.
Всё бы хорошо, но за 2 года работы сайта был написан кучерявый алгоритм (на сокетах который) - который ведёт себя адекватно и автономно в течении долгих месяцев. И проверки всякие необходимые (которые срабатывают очень редко, но очень важные) были опущены. Потом решили не откатывать алгоритм и теперь имеем то, что имеем.
В данном случае пропускается проверка времени обновления загружаемого файла (до и после загрузки).
|
11:20 pm
[ссылка] |
Функциональные особенности travutils * Новости новых серверов. Новости, о новых серверах, которые расположены на главной странице. Новости появляются позже, чем автоматика распознает рестарт. За всё время автоматика допустила ошибку 2 раза из ~ 1000 уведомлений за два года. Поэтому собственно каждое уведмление обрабатывается лично мной. В любом случае новость будет опубликована не позже чем в день новости и не ранее чем за трое суток до новости. Платные новости - будут высылаться на email пользователю прямо от соответствующего робота, поэтому пользователь о рестарте узнает максимально быстро. Обычно это за двое суток до старта.
Новые сервера стартуют обычно по понедельникам средам и пятницам. Бывают исключения, но редко. Примерный процент: Понедельники - 45% Среды - 25% Пятницы - 25% Другие дни - 5%
* Crop map Для работы crop finder/crop map необходимо мне лично зарегистрироваться на соответствующем сервере (или получить от кого-то логин/пароль обычно за 2000 серебра). Далее необходимо настроить систему на отдельной машине и запустить процесс сканирования. Процесс медленный - один сервер за 6-10 часов. От администрации не прячусь, но сознательно режу скорость загрузки данных. Далее необходимо залить полученные данные на основной сервер, на основном сервере настроить записи в БД и crop finder для данного сервера работает. Как правило crop map для пользователей доступен спустя 1-2-3 суток. Бывают исключения до 5-7 суток но редко. И бывают единичные случаи, когда зарегистрироваться не получилось и никто из пользователей не проявил инициативу помочь исправить это (2 раза за всё время было).
Надеюсь эта информация поможет вам в использовании travutils.
|
05:55 pm
[ссылка] |
Статус проекта travutils Коротко о главном. * С Травианом закончили общаться - утилиту управления альянса мы делать не будем. * Сбили цену на хостинг - финансовая ситуация проекта улучшилась.
Текущие действия: * Неторопливая поддержка проекта в рабочем состоянии. * По просьбам трудящихся мелкие исправления/дополнения на сайтах. * Такие реализовать платную рассылку о новых серверах (уже 10 месяцев собираюсь с мыслями).
Стратегические планы: * Подождать до март-апрель 2010 года и по ситуации смотреть. В любом случае убрать расширенную статистику с crop-finder.com . Если всё нормально - то сделать поддержку старых серверов (до рестарта). Инфа о старых серверах в наличии имеется от июля 2007 года. Детальная статистика имеется с 8 мая 2008. Всё это хозяйство в архивах весит уже почти 1 Тб =)
Душевное спокойствие: * Ядро мега программы, которую я писал 6 месяцев - я нашёл куда притулить. В свободное от работы время ваяю партийный сайт, размах партийного сайта на порядок поболее чем весь travutils. Делается ярмарка (аля специфичная торговая площадка), база знаний (аля новое поколение википедии) и форум (тоже весьма специфичный). Ну вобщем и ядро которое в состоянии на дешёвой железке сканить чего-то в инете со скоростью 300000000 запросов/день (стабильность: 3 месяца автономной работы). Скоро оно будет работать на нужды базы знаний :)
|
08:47 pm
[ссылка] |
Курсоры mysql Оказывается надо сбрасывать флажок конца строк, если используется несколько курсоров. Хмм... не логично. Если мы прошлись по первому курсору и сделали первый фэтч второго курсора - то логично было бы сбросить флажок конца строк. 3 часа убил на эту хрень!
|
08:43 pm
[ссылка] |
По очень многочисленным просьбам... По очень многочисленным просьбам... В количестве примерно 100шт. Таки сделаю небольшую фичу. Crop map маленькими клетками :)
|
11:59 pm
[ссылка] |
Устроился на работу Устроился на работу в "Stalla Systems". С Травианом закончили общаться - дальше разработкой не занимаемся. Но очень хочеться довести до ума некоторые вопросы. В частности - сделать рассылку о новых серверах и рестартах. И съехать на сервер подешевле - ну или сбить цену на этот сервер.
|
12:11 am
[ссылка] |
диплом Защитил диплом специалиста по специальности "программное обеспечение автоматизированных систем" на отлично :)
|
12:34 am
[ссылка] |
page rank Page rank = 2 http://crop-finder.com/ua1/0|0/
Page rank = 1 http://crop-finder.com/
Вот так вот бывает... на главной странице Page Rank меньше чем на какой-то странице внутри сайта.
|
10:50 pm
[ссылка] | Прошёл обучение в московской Академии Управления.
Теперь я методологически грамотный и психологически устойчивый. Петров Константин Павлович в своих видео-лекциях рассказывает очень много о том что происходит вокруг, в Академии Управления нам рассказали ещё больше, причём простым ясным языком. Также хочется отметить, что кормят в Академии Управления восхитительно, я люблю побегать по ресторанчикам - есть с чем сравнить. Кормят очень вкусно.
Чё у нас тут с сайтом по науке происходит. А по науке - тяжело признать, что я был неправ с этой вот расширенной статистикой. Как начинаю думать - аж хреново становится. Столько работы коту под хвост запихнули... Не такой уж и психологически устойчивый - ну вот не получается признать свой 6 месячный труд, выполненный на совесть, бесполезным. И то, что Травиан морозится с этим вопросом мне ещё больше масла в огонь подливает в плане моральной устойчивости.
И ты хоть дырку в стене прогрызи - не поможет ничего.
|
07:30 am
[ссылка] |
миграция из датацнтра в датацентр Просто писец. Сервер пол ночи лежал. Система обновления подымется не раньше чем в понедельник. map.sql обновляй при помощи шаманства. Проще убить себя апстену чем решать такие проблемы. Но жеж управлениец травутился положено решать такие проблемы.
|