ermouth: (Default)
[personal profile] ermouth

Я тут развлёкся и нарисовал работающий прототип выбора дома для портала ЖКХ. В общей сложности это у меня заняло примерно 6 часов.

Выглядит это так (клик перекинет на работающую страничку):

image

Адреса внизу – это куда я ходил, страничка помнит ваши последние дома.

Вообще, 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 позволяет очень кратко и красиво писать всякие такие вот штуки:

image

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

Но серым зомби-детям Битрикса этого не понять.

Date: 2011-09-24 10:12 pm (UTC)
From: [identity profile] trubachev.livejournal.com
На поиск моего дома на их сайте у меня ушло более 35 секунд, на твоем - менее 10
Что тут еще добавить

Date: 2011-09-24 10:15 pm (UTC)
From: [identity profile] trubachev.livejournal.com
Ну у меня на ноуте thinkpad, так что попасть в нужное место порой сложно)

Date: 2011-09-24 11:04 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Ну и, уже не в первый раз, ты забыл про Enter :)
Ввожу "левачева 8", жму Enter, и ни фига не происходит.

Date: 2011-09-24 11:06 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Но, вообще, по-моему, для 6 часов очень хороший результат, не стоит прибедняться :) По дороге постоянно вылазит что-то.

Date: 2011-09-24 11:14 pm (UTC)
From: [identity profile] ermouth.livejournal.com
ну остальное же заебись же ) а энтер да, сделаю.

Date: 2011-09-25 12:04 am (UTC)
From: [identity profile] ermouth.livejournal.com
я кстати как прокси использовал тот код, который ты мне написал несколько лет назад -- и переделывая его, был снова очень впечатлён культурой кода, принятой у сишников.

меня примерно также радует хорошая внимательная вёрстка -- с правильными длинами тире и пробелов, с висячей пунктуацией, с ритмом с хорошим etc.

) спасибо!

Date: 2011-09-25 06:54 am (UTC)
From: [identity profile] kipyatkoff.livejournal.com
красиво и грамотно )
надо только подчистить штуки типа "пр-кт. Морской, д. 43" (пр-кт. -- это фи)

Date: 2011-09-25 07:49 am (UTC)
From: [identity profile] driker.livejournal.com
Молодец, работает отлично) Сделай полностью свой портал, думаю заткнет за нос первый

а за чем опять капча??

Date: 2011-09-25 08:04 am (UTC)
From: [identity profile] morfizm.livejournal.com
Остальное очень хорошо :) Я приберегу слово "заебись" для чего-то действительно перфектного или поражающего воображение.

Кроме того, для тебя у меня давно уже планка стоит достаточно высоко. Т.е. если ты выкладываешь относительно среднего вебо-хлама, в среднем, "заебись, какие штуки", то когда появляется что-то чуть меньше заебись, чем обычно, то хочется сказать, что говно (без обид, я просто иллюстрирую идею с планкой, не применительно к прототипу с адрес-баром), при этом понимая, что на общем фоне это всё равно жутко заебись :)

Конкретно по прототипу. Я кликаю на "Архангельск", ввожу "ива", появляется "ул. Георгия Иванова" и "ул. Ивана Рябова". Кликаю на "ул. Георгия Иванова", и сразу вижу квартиры, а ожидал бы увидеть, что "ива" в текстовом окошке заметилось на "ул. Георгия Иванова", как бы с autocomplete. Ну и слово "Архангельск" должно там тоже появляться.

Короче, сценарий ввода с клавиатуры, периодически используя списки как подсказки, причём стандартный (ожидаемый пользователем) принцип - это весь текст в текстовой строке является определяющим для страницы. У тебя же выглядит, будто "якорь" к странице не виден (я только сейчас догадался, что якорь - это синий текст большими буквами, вроде "Архангельск, ул. Георгия Иванова" - то, куда я уже накликал), а ввод работает как фильтр в контексте этого якоря. Это неинтуитивно, IMHO.

Date: 2011-09-25 08:09 am (UTC)
From: [identity profile] morfizm.livejournal.com
Если честно, я уже совершенно не помню, о каком коде идёт речь :)

Но да, ты прав насчёт культуры кода. Если смотреть на температуру "в среднем по больнице", то к сишникам ты можешь захотеть пойти работать, даже если тебе си сам по себе не очень нравится, просто потому что там люди очень сильные в среднем, и чем выше уровень языка, тем, в среднем, слабее люди. Я не хочу вступать в холивары, понятно, что хороший инженер чаще всего technology agnostic, и можно найти кучу контрпримеров ко всему, но это просто как бы "окраска", из общих наблюдений.

Date: 2011-09-25 09:02 am (UTC)
From: [identity profile] ermouth.livejournal.com
боты, мать их.

Date: 2011-09-25 09:04 am (UTC)
From: [identity profile] ermouth.livejournal.com
на портале это в базу прошито. на моей разводящей это автоматом исправляется.

ты это где увидел?

Date: 2011-09-25 10:21 am (UTC)
From: [identity profile] ermouth.livejournal.com
по первоначальному дезигну из какого-то из прошлых постов строка ввода должна располагаться не справа вверху, а прямо над списками. тогда да, в неё надо писать город и улицу -- она попутно будет работать как заголовок к списку.

а тут мне просто показалось это несимпатичным, тем более это демонстрашка просто.

но замечание к логике по делу -- и поэтому при клике на любую псевдоссылку строка поиска просто очищается теперь.

Date: 2011-09-25 10:51 am (UTC)
From: [identity profile] morfizm.livejournal.com
Очищение строки - хорошо для логики, т.к. понятно, что предыдущий refinement уже не имеет смысла в новом контексте.

Ещё лучше было бы (раз уж такое дело) поместить строку ПОД крупной синей надписью, которая заголовок списка. Как-то логичнее, по-моему, что уточняющий/фильтрующий элемент будет НИЖЕ, чем то, что определяет фильтруемое множество (заголовок). What do you think?

Я не уверен в эстетичности этого дела, но, мне кажется, в данном дизайне (где поисковая строка - это фильтр "под заголовком") это могло бы быть логичнее, чем то, что есть.

Date: 2011-09-25 10:56 am (UTC)
From: [identity profile] ermouth.livejournal.com
если эта страничка встроена как виджет в портал, то в строке поиска просто должен быть корневой адрес списка в развернутой форме. Архангельск, ул. Адмирала Кузнецова -- например.

уточнение типа "Улицы на А" должно быть в той же строке, что и список.

этот сценарий я уже очень тщательно продумывал, он оптимален.

Date: 2011-09-25 11:48 am (UTC)
From: [identity profile] 802-11.livejournal.com
Шикарно, пор фавор.
В мозилле для мака не работает (мозилла у меня сбоит иногда), в сафари все отлично. Хорошая реализация автозаполнения и поиска по базе. Текст немного неинтуитивно сверстан — всё одинаковое.

Еще можно вставить карту для навигации для невербалов вроде меня. Например, на вводе «Ленин» появляется много вариантов, и вот отсюда по карте с флажками легче сориентироваться. Здесь релевантность карты очень зависит от функционала, я не смотрела, что можно делать с оригинальным порталом.

Date: 2011-09-25 01:02 pm (UTC)
From: [identity profile] ermouth.livejournal.com
у меня работает в фф на маке.

я тут подкрутил ещё всякие мелочи и вроде теперь вообще везде должно работать )

Date: 2011-09-25 06:05 pm (UTC)
From: [identity profile] ermouth.livejournal.com
мне кажется это в среде сишников что-то типа естественного отбора.

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

плюс цена отказа тех массовых систем, которые пишутся на си, как правило всё же выше, чем яваскрипта какогонить.

поэтому в сишной профтусовке и должны оставаться самые сильные.

я не то чтобы С не люблю, мне просто его применять негде. соответственно и скиллов у меня почти ноль, и код я читаю очень напрягаясь. да и стиль мышления у меня "функциональный", а это вообще с С несовместимо. страшная тайна -- я в далёком детстве прочитал про указатели и про лисп в одной и той-же книжке, так вот зачем лисп, я сразу понял, а зачем указатели -- сильно не сразу ))

Date: 2011-09-25 10:48 pm (UTC)
From: [identity profile] ermouth.livejournal.com
попробуй ввести левачева 8 теперь )

Date: 2011-09-25 10:55 pm (UTC)
From: [identity profile] morfizm.livejournal.com
Я сейчас очень тороплюсь, потом отвечу подробнее.
1. Мне понравился highlight номера дома :)
2. У тебя всё равно парадигма "edit box = фильтр для того, что уже выбрано на странице" сильно непроработана. Я не знаю, считаешь ли ты её жизнеспособной парадигмой, или это "простой хак, чисто для прототипа", но в том виде, в каком она есть, в ней всё ещё есть баги.

Пример:
1. Ввожу "ле"
2. Кликаю на "ул. Левачёва"
3. (Стирается text box и вижу 2 дома: 8 и 10)
4. Ввожу "8". Казалось бы, это должно отфильтровать и оставить только дом #8, ан нет. (см. что тебе сайт покажет...)

Date: 2011-09-26 06:09 am (UTC)
From: [identity profile] kipyatkoff.livejournal.com
http://gkh.dvinaland.ru/fund/23327/
но это же уже их база, так что им и чистить

Date: 2011-09-26 10:58 am (UTC)
From: [identity profile] ermouth.livejournal.com
у них вообще КЛАДР пришит, со всеми его прелестями.

Date: 2011-09-26 11:35 am (UTC)
From: [identity profile] kipyatkoff.livejournal.com
ооо, КЛАДР, тогда медицина бессильна )

Date: 2011-09-26 11:42 am (UTC)
From: [identity profile] ermouth.livejournal.com
если быть ленивым мудаком -- то да, бессильна.

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

но нет же, западло.

Profile

ermouth: (Default)
ermouth

November 2021

S M T W T F S
 123456
78910111213
14151617181920
21 222324252627
282930    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 31st, 2026 07:48 pm
Powered by Dreamwidth Studios