Серые дети Битрикса
Sep. 25th, 2011 12:36 amЯ тут развлёкся и нарисовал работающий прототип выбора дома для портала ЖКХ. В общей сложности это у меня заняло примерно 6 часов.
Выглядит это так (клик перекинет на работающую страничку):
Адреса внизу – это куда я ходил, страничка помнит ваши последние дома.
Вообще, 6 часов для такой штуки – долго, но там такого всякого повылезло по дороге, что не грех рассказать.
Очевидно, для начала мне надо было вынуть из портала базу адресов и их id на портале. И тут выяснилось, что портал работает на Вин СР1251, а не UTF-8, и заставить его отдавать юникод нет вообще никакой возможности. Я долго не мог в это поверить и игрался с заголовками, но болт.
Минус час на адаптацию серверного прокси (( Ещё с полчаса я подбирал режим, чтобы меня не банили за выбор квоты (мне пчуть больше 1000 обращений к скриптам надо было). Потом ещё с полчаса качал базу и час примерно её разбирал.
Потом я прикидывал, как мне ловчее всего перебрать базу так, чтобы засунуть её всю (1,5 мб кривой html-разметки) килобайт в 100. Перебрал варианта 3.
На сейчас при выборе одного адреса на самом портале съедается 300+Кб трафика без зипа. С зипом это получается 70+Кб. В шесть обращений к скрипту на сервере.
Мне показалось, что в такой примерно объем я смогу уложить всю базу домов по Архангельску и Северодвинску. Уложился в 88Кб. С одним обращением к кэшированному json (мгновенно то-есть).
База пересобрана в json, причём самые избыточные с точки зрения соотношения “разметка/контент” объекты – дома жилфонда – упакованы не в объекты типа {num:”23к1”,id:”4567”}, {num:”24”,id":”4569”},…, а просто в строки. То-есть, все дома одной улицы представлены как 23к1@4567;24@4569;…
Нормализация базы и построение индекса происходит уже на клиенте. Это кста в первом приближении довольно прожорливая до памяти манипуляция – на Айфоне 2G оно уже не работает (не на 100% уверен, что поэтому). Но на всём остальном ок.
Дальше всё, в общем, тривиально. Поиск ищет в реальном времени. Клик на дом перебрасывает на портал ЖКХ (почти все страницы, увы, пусты).
Яваскрипт с прикрученным к нему SugarJS позволяет очень кратко и красиво писать всякие такие вот штуки:

Мне страшно даже подумать, как такой функционал стали бы делать радетели Битрикса. Просто потому, что это на нём не надо делать. Это вообще не надо делать на сервере – а надо на клиенте, в браузере.
Но серым зомби-детям Битрикса этого не понять.

no subject
Date: 2011-09-24 10:12 pm (UTC)Что тут еще добавить
no subject
Date: 2011-09-24 10:15 pm (UTC)no subject
Date: 2011-09-24 11:04 pm (UTC)Ввожу "левачева 8", жму Enter, и ни фига не происходит.
no subject
Date: 2011-09-24 11:06 pm (UTC)no subject
Date: 2011-09-24 11:14 pm (UTC)no subject
Date: 2011-09-25 12:04 am (UTC)меня примерно также радует хорошая внимательная вёрстка -- с правильными длинами тире и пробелов, с висячей пунктуацией, с ритмом с хорошим etc.
) спасибо!
no subject
Date: 2011-09-25 06:54 am (UTC)надо только подчистить штуки типа "пр-кт. Морской, д. 43" (пр-кт. -- это фи)
no subject
Date: 2011-09-25 07:49 am (UTC)а за чем опять капча??
no subject
Date: 2011-09-25 08:04 am (UTC)Кроме того, для тебя у меня давно уже планка стоит достаточно высоко. Т.е. если ты выкладываешь относительно среднего вебо-хлама, в среднем, "заебись, какие штуки", то когда появляется что-то чуть меньше заебись, чем обычно, то хочется сказать, что говно (без обид, я просто иллюстрирую идею с планкой, не применительно к прототипу с адрес-баром), при этом понимая, что на общем фоне это всё равно жутко заебись :)
Конкретно по прототипу. Я кликаю на "Архангельск", ввожу "ива", появляется "ул. Георгия Иванова" и "ул. Ивана Рябова". Кликаю на "ул. Георгия Иванова", и сразу вижу квартиры, а ожидал бы увидеть, что "ива" в текстовом окошке заметилось на "ул. Георгия Иванова", как бы с autocomplete. Ну и слово "Архангельск" должно там тоже появляться.
Короче, сценарий ввода с клавиатуры, периодически используя списки как подсказки, причём стандартный (ожидаемый пользователем) принцип - это весь текст в текстовой строке является определяющим для страницы. У тебя же выглядит, будто "якорь" к странице не виден (я только сейчас догадался, что якорь - это синий текст большими буквами, вроде "Архангельск, ул. Георгия Иванова" - то, куда я уже накликал), а ввод работает как фильтр в контексте этого якоря. Это неинтуитивно, IMHO.
no subject
Date: 2011-09-25 08:09 am (UTC)Но да, ты прав насчёт культуры кода. Если смотреть на температуру "в среднем по больнице", то к сишникам ты можешь захотеть пойти работать, даже если тебе си сам по себе не очень нравится, просто потому что там люди очень сильные в среднем, и чем выше уровень языка, тем, в среднем, слабее люди. Я не хочу вступать в холивары, понятно, что хороший инженер чаще всего technology agnostic, и можно найти кучу контрпримеров ко всему, но это просто как бы "окраска", из общих наблюдений.
no subject
Date: 2011-09-25 09:02 am (UTC)no subject
Date: 2011-09-25 09:04 am (UTC)ты это где увидел?
no subject
Date: 2011-09-25 10:21 am (UTC)а тут мне просто показалось это несимпатичным, тем более это демонстрашка просто.
но замечание к логике по делу -- и поэтому при клике на любую псевдоссылку строка поиска просто очищается теперь.
no subject
Date: 2011-09-25 10:51 am (UTC)Ещё лучше было бы (раз уж такое дело) поместить строку ПОД крупной синей надписью, которая заголовок списка. Как-то логичнее, по-моему, что уточняющий/фильтрующий элемент будет НИЖЕ, чем то, что определяет фильтруемое множество (заголовок). What do you think?
Я не уверен в эстетичности этого дела, но, мне кажется, в данном дизайне (где поисковая строка - это фильтр "под заголовком") это могло бы быть логичнее, чем то, что есть.
no subject
Date: 2011-09-25 10:56 am (UTC)уточнение типа "Улицы на А" должно быть в той же строке, что и список.
этот сценарий я уже очень тщательно продумывал, он оптимален.
no subject
Date: 2011-09-25 11:48 am (UTC)В мозилле для мака не работает (мозилла у меня сбоит иногда), в сафари все отлично. Хорошая реализация автозаполнения и поиска по базе. Текст немного неинтуитивно сверстан — всё одинаковое.
Еще можно вставить карту для навигации для невербалов вроде меня. Например, на вводе «Ленин» появляется много вариантов, и вот отсюда по карте с флажками легче сориентироваться. Здесь релевантность карты очень зависит от функционала, я не смотрела, что можно делать с оригинальным порталом.
no subject
Date: 2011-09-25 01:02 pm (UTC)я тут подкрутил ещё всякие мелочи и вроде теперь вообще везде должно работать )
no subject
Date: 2011-09-25 06:05 pm (UTC)на сях ведь пишется такой код, который как раз и позволяет тем, кто пишет на высокоуровневых языках, не волноваться из-за всякой "ерунды" (типа выделения памяти и сборки мусора, критических исключений, зацикливаний итп) -- потому что написавшие компилятор за своих "высококуровневых" коллег подумали заранее.
плюс цена отказа тех массовых систем, которые пишутся на си, как правило всё же выше, чем яваскрипта какогонить.
поэтому в сишной профтусовке и должны оставаться самые сильные.
я не то чтобы С не люблю, мне просто его применять негде. соответственно и скиллов у меня почти ноль, и код я читаю очень напрягаясь. да и стиль мышления у меня "функциональный", а это вообще с С несовместимо. страшная тайна -- я в далёком детстве прочитал про указатели и про лисп в одной и той-же книжке, так вот зачем лисп, я сразу понял, а зачем указатели -- сильно не сразу ))
no subject
Date: 2011-09-25 10:48 pm (UTC)no subject
Date: 2011-09-25 10:55 pm (UTC)1. Мне понравился highlight номера дома :)
2. У тебя всё равно парадигма "edit box = фильтр для того, что уже выбрано на странице" сильно непроработана. Я не знаю, считаешь ли ты её жизнеспособной парадигмой, или это "простой хак, чисто для прототипа", но в том виде, в каком она есть, в ней всё ещё есть баги.
Пример:
1. Ввожу "ле"
2. Кликаю на "ул. Левачёва"
3. (Стирается text box и вижу 2 дома: 8 и 10)
4. Ввожу "8". Казалось бы, это должно отфильтровать и оставить только дом #8, ан нет. (см. что тебе сайт покажет...)
no subject
Date: 2011-09-26 06:09 am (UTC)но это же уже их база, так что им и чистить
no subject
Date: 2011-09-26 10:58 am (UTC)no subject
Date: 2011-09-26 11:35 am (UTC)no subject
Date: 2011-09-26 11:42 am (UTC)у меня то правильно показывает почти всё и понятно же, что если я -- не программист -- справился с этим за несколько десятков минут, то у них в лучшем случае часы бы ушли.
но нет же, западло.