разработка, саморазвитиеОтчет о конференции DevConf

17-го мая в Москве была проведена конференция DevConf 2010, на которой было 5 секций для разработчиков. Это PHP, ASP.NET, Python, Ruby и Perl. Я там был и пиво пил (про пиво правда, в конце конференции Рамблер всех угощал алкоголем).Так как можно было ходить на любые секции, я выбрал доклады на которые пойду. Кажется, я не слушал доклады только про ASP.NET и Perl.

Поговорим про каждую посещенную секцию:

PHP.

В целом, эта секция была немного уныла, так как в основном были сказаны уже известные факты и практики. В докладе Ильи Альшанетского про оптимизацию приложений можно было узнать «за» и «против» использования конкретных реализаций и методов для оптимизаций.

Полный зал собрал Иван Шумков, с докладом про Redis. Redis — это один из перспективных серверов key=value хранилищ данных с кучей всяких вкусностей, которые удобно использовать в своих приложениях. Иван рассказал про фичи Redis’a, про примеры использования (в основном были success-stories с сайта http://geometria.ru), про Rediska. Были интересные вопросы про бэкапы и «что будет с данными, если сервер упадет». Вопросы, кстати, очень уместные, так как Redis хранит все данные в оперативной памяти и по запросу может создавать бэкапы в разных формах. Лично я взял Redis на заметку, хотя MongoDB мне тоже нравится.

Вадим Крючков рассказывал про libevent, но вопросы были с подвохом, и видимо Вадим не совсем разобрался, так что ему пришлось не сладко.

RUBY

Очень хотел послушать про развертывание приложений на сервере, но когда пришел в зал, понял что все очень плохо. Да, там рассказывали азы Rake, но большинство задач уже решает Capistrano, и смысла я не увидел. Про Rubinious было интересно, но я не из тех кто любит обертки языка на этом же языке ради пары фич.

Еще один интересным докладом был «Разработка приложений для Facebook.com на ruby on rails» Алекса Дмитриева. Так как у меня был опыт разработки приложения, мне было интересно услышать про всякие нюансы, про монетизацию и т.д.

На секции RUBY самым ожидаемым докладчиком был Ехуда Кац, один из сотрудников EngineYard, у которого было несколько докладов. Рубинисты его практически боготворят.

PYTHON

Как разработчику, мне больше интересен Ruby, поэтому я заглянул только на мастер класс Ивана Сагалаева из Яндекса, чтобы послушать (посмотреть?) что Иван расскажет. Иван решил провести мастер-класс вместо доклада и всё время писал код для парсинга XML. Для питонистов наверно было увлекательно :)

Еще одним из известных личностей был Майкл «Монти» Видениус — один из создателей MySQL. Монти рассказывал про историю MySQL и как они решили создать MariaDB. В целом рассказ был интересным, потом я послушал про техническую часть MariaDB.

Когда закончилась все доклады, Рамблер пригласил всех вниз, в фуд-корты для распития пива.

 

На второй день у меня был мастер-класс «Игры в IT» от Славы Панкратова и Александра Орлова.

Целый день мы разбирали ситуации между менеджерами проектов и заказчиками или менеджеров и программистами. Поневоле вспоминались живые кейсы, которые были у меня.

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

Наверно, самым классным у Славы и Саши было то, что они интересно рассказывали и их было интересно слушать. У каждого был свой опыт, о котором они постоянно делились с нами.

В целом, конференция прошла удачно. Не без косяков со стороны организации, но все решалось тут же, на месте. Я рад что мне удалось посетить DevConf, надеюсь, в следующем году смогу посетить её еще раз.

air, разработкаПрислали книгу от Adobe

15 июля я прочитал новость на сайте Ajaxian, что Mike Chambers может отправить книгу "Adobe AIR for Javascript Developers pocket guide" первым 100 приславшим адрес на его почтовый адрес.

Я, недолго думая, отправил письмо :) Вчера позвонили из службы доставки и спросили когда я буду дома и попросили номер мобильного телефона. Сначала я не понял что мне должны прислать, потому что обычно не верю в такие халявные книги :)

И сегодня курьер позвонил, спросил как до меня добраться и привез пакет с кучей наклеек. Расписался, почитал что пишут на наклейках и понял что прислали именно эту книгу. Внутри были сама книга, буклет о платформе Adobe (точно не понимаю что это. но видимо про Flex и Flash) и наклейка.

Adobe AIR for Javascript Developers pocket guide

Теперь на досуге можно почитать книжку, вместо того чтобы ковыряться в браузере :)

P.S. Оказалось Mike Chambers один из авторов этой книги. Приятно.

jquery, php, разработкаСервис коротких ссылок

Все же наверно знаете что можно из длинной ссылки получить маленькую? :) Например, с помощью сервиса tinyurl.com, просто вводите свою большую ссылку и получается короткую, и сервис просто вас редиректит на нужную. Все просто.

Сервисов уже сделано довольно много таких. Есть даже русские.

А вчера я вечером не знал что делать, гулять и ехать на open air было рано (я так и не уехал, поздно спохватился и все транспорты ушли :( ), я решил попробовать поработать с CURL. Не буду объяснят что это такое :)

Вобщем я добился такого, что из php скрипта получать короткие ссылки с разных сервисов. Ввожу свою ссылку, жму кнопку и получаю штук 8 других. 8 — потому что гугл мне показал 10 штук примерно их, но 2 сервиса отпали, так как были не рабочие.

Решил все это оформить как сервис, но вот беда — я не очень хороший верстальщик и у меня не получилсь сделать чтобы footer (подвал) был всегда внизу. Пока оставил, может придет вдохновение и доделаю. А получать весь набор ссылок через AJAX уже есть + есть проверка от спам-бота. Не серьезная конечно, но все равно от простых ботов защитит.

php, разработкаORM — это сложная штука

В пятницу днем узнал что моя реализация ORM дала сбой на большом кол-ве записей :) Пришлось ставить заглушку и выяснять что там случилось. Оказалось все просто — когда я делал ORM, я «пропустил» момент оптимизации. И так получилось что сначало все работало как надо, а потом записей стало так много, что скрипт просто не выдержал и вылетал с max execution time, нашел место проблемы (дуралей поставил получение всех записей, а потом только пагинатор убирал не нужные) и до вечера переписывал код :)

Второй вариант я сделал часа за 3. Работало отлично, hasMany, hasOne все в одном запросе через JOIN (Вася, я увидел это у тебя и мне понравилась реализация :) ) Разбор полученных данных и разброс в массивы.

Все круто, думал я :) А потом до меня дошло что когда мы используем hasMany, мы получаем 4 записи (к примеру) с одинаковыми данными текущей модели и с разными модели hasMany. Разбирается это все прекрасно, но вот пагинатор не сработал бы. Фактически мы после обработки получаем 1 запись. А LIMIT засчитал как за 4 записи.

Поэтмоу мне пришлось вернуть часть старого кода. Я оставил JOIN'ы, потому что с ними удобно было ставить запросы. Из-за запросов у меня были как раз проблемы в самом первом варианте. Там нельзя было фильтровать записи по полю из ассоциативной модели. Теперь можно, но пока пишу пост подумал что нада пару вещей проверить, на то как вложенности работают :) Но должны...

В итоге я получил работающий 3ий вариант, работает быстро. Записи берет только реально нужные через LIMIT. Жду когда протестим на основном сервере.

google, jquery, разработкаGoogle добавил интерфейс для AJAX-библиотек

Сегодня Google объявила об открытии интерфейса Google AJAX Libraries API. Что это и для чего нужно я в кратце поясню.

Во-первых, это хранилище всех версий следующих библиотек:

  • jQuery
  • Dojo
  • MooTools
  • script.aculo.us
  • prototype

Это значит вы можете получить любую версию библиотек сразу в коде страницы с помощью специального запроса (об этом чуть позже). Это также значит, что вам не предется хранить на своем сервере все эти кучи файлов и менять с выходом новых версий файл. И да, на сервере Google хранятся также сжатые версии.

Во-вторых, инфраструктура серверов Google довольна хорошо работает и сервера могут обеспечить хорошую скорость по выдаче файлов. Если кто-то уже загружал этот файл с сервера Google, он уже может оказаться в кеше. Разработчикам не придется заботиться о компресии и кеше, это сделает Google.

В-третих, все это работает максимально просто. Чтобы получить нужную библиотеку, можно воспользоваться двумя способами. Самый простой это сделать запрос через <script src=""></script>

Например, нам нужно получить prototype версии 1.6.0.2:

<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.min.js"></script>

Второй способ это загрузить библиотеку через метож google.load из Google AJAX API Loader's

Пример для jQuery:

<script src="http://www.google.com/jsapi"></script>
<script>
  // загружаем jQuery
  google.load("jquery", "1");

  // когда страница загружена, вызываем метод jQuery
  // поиск через Google :)
  google.setOnLoadCallback(function() {

    $.getJSON("http://ajax.googleapis.com/ajax/services/search/web?q=google&;v=1.0&;callback=?",
      //запрос завершен, получаем данные
      function (data) {
        if (data.responseDate.results &&
            data.responseDate.results.length>0) {
          renderResults(data.responseDate.results);
        }
      });
    });
</script>

Вот и все :)

Ещё одна интересная вещь — загрузка последней версии библиотеки. Когда мы указываем версию файла, можно указать что мы хотим загрузить самую последнюю версию. Например, если укажем версию «1» для jQuery, мы загрузим версию 1.2.6. Для остальных библиотек также. Можно указывать ветки версий. То есть, если укажем версию 1.2, то нам загрузят 1.2.6. Но когда выйдет версия 1.3.х, она не будет загружена.

По умолчанию грузится сжатая версия библиотеки, а чтобы загрузить обычную версию, надо указать в строке запроса что мы хотим загрузить. Например

<script src="http://ajax.googleapis.com/ajax/libs/prototype/1.6.0.2/prototype.js"></script>

Это если мы используем URL для запроса. А если мы используем метод google.load,то надо указать в функцию допольнительный параметр {uncompressed:false}

Дополнительные ссылки:

Официальная страница

Документация

via Ajaxian

jquery, разработкаГадская связка FCKEditor и jQuery UI

Была у меня задача написать плагин для FCKEditor, чтобы была возможность вставлять фотографии из фотобазы. Плагин написал, окошко открывается из FCK, фотки показываются. У нас фотки все хранятся с разными размерами, то есть можно выбрать размер. Я решил это дело оформить с UI Dialog, чтобы было удобно. Все, открывается. Думаю закончил, щас только размеры соберу для всех фоток и будет готово. Ан нет! Когда кликаю на фотку, почему-то все окно браузера перекашивает и появляется черный прямоугольник.

Сначала думал что это глючит jQuery UI, начал тестить, закачал последнюю бету. Все равно, не работает и все. В Firebug тестил, из-за фрейма у окошка FCK там нельзя вызвать в консоли то что мне надо. И так и этак пробовал, не получается.

После 2х часов мучений решил поменять имя функции открытия окошка на другое. Теперь вместо «open», называется «openDialog». И чудо! Заработало. Оказывается, в Firefox эта функция открывает новое окно. Хотя я обычно использую window.open, и не понимаю как open делает тоже самое.

Совет: когда пишите на JS, проверяйте названия своих функций :)

разработкаСистема To-do списка

Давно уже задумывался о создании простенькой системы todo списка для рабочих целей. Есть конечно вариант от 37signals — Ta-Da List, но там интерфейс мне не очень нравится. Довольно мелко написано и немного не удобно. Конечно, все остальное отлично сделано, не зря они 37signals :)

А пока я думаю о такой штуке:

  • простой минималистичный интерфейс
  • dashboard — панель «всего», задачи и только задачи, остальное будет работать через AJAX и не должно мешать просмотру списка задач
  • добавление задачи одним движением. написал, нажал ентер — задача в списке. тоже все через AJAX
  • закрытие задачи одним кликом.
  • каждые день с чистого листа. просмотреть задачи вчерашние можно будет через календарь
  • теги

Пока ещё думаю где найти время для всего этого и на чем писать. У меня два варианта — Ruby On Rails и cakephp. Рельсы я плохо знаю, руби тем более :( cakephp знаю, наброски уже были когда-то давно сделаны, но заброшены. Но cakephp все же на PHP, а я хочу попробовать Руби изучать. Видимо все-таки придется изучать рельсы и руби :)

личное, разработка, я хочуИзучение новых технологий

Задумался вот изучить новый язык. Ruby или Python, выбрать только не могу. Оба хороши, оба интересны.

Хочу изучать в связи с интересом Ruby On Rails и Django Framework, хочется узнать о них побольше. Не зря же вокруг них есть небольшой ажиотаж :)

Ещё надо изучить Lisp, но уже для университета, зачет получать надо :(

разработкаmarkItUp! легкий редактор на JavaScript

markItUp! это «легкий» редактор для jQuery. Это не WYSIWYG редактор и никогда им не будет. Вся «соль» этого редактора в том, что можно настроить его для использования с любыми средствами подсветки. BBCode, Markdown, Wiki синтаксис, Textile и конечно же HTML.

Особенности:
— Легкая интеграция
— Поддержка «горячих» клавиш
— Панель управления легко настраивается
— Легко изменяется и настраивается
— Просмотр результатов через AJAX
— Настраиваемый внешний вид

Примеры использования
Домашняя страница

разработкаWebKit проходит тест Acid3

Разработчики WebKit добились того. что их движок проходил тест ACID3 с 100 баллами

acid3 на webkit

Отличная работа! Напомню, что Opera проходит с 99 баллами.