Category: it

Category was added automatically. Read all entries about "it".

u12

Открытое письмо ко всем веб-разработчикам!

Уважаемые господа веб-разработчики!

Я, конечно, понимаю, что безвозвратно ушла та древняя эпоха, когда навигация по страницам в многостраничных списках осуществлялась с помощью списка страниц типа "[1] [2] [3] ... [42]" или аналогичного. И я понимаю, что на планшетах и айфонах тыкать в цифирьки в подобном списке не весьма удобно. И я понимаю, что намного удобнее, когда пользователь доскролливает список почти до конца - подгружать ему незаметненько AJAX-ом продолжение списка, эдакую виртуальную "следующую страницу". И это все хорошо и прекрасно, прогресс, мода и все такое.

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

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

Он видит перед собой уже совсем не те элементы списка, которые видел - и, вероятно, хотел видеть - мгновение назад. А видит некие совершенно другие, чужие элементы, непонятно откуда вдруг взявшиеся и непонятно как далеко отстоящие от тех самых элементов, которые несчастный пользователь скроллбара мгновение назад видел и хотел видеть. Возможно - даже очень хотел их видеть. Может быть даже - внимательно их рассматривал, в тщетной надежде найти в этом ненадежном прыгающем списке нечто милое его сердцу, нечто алкаемое и вожделенное. Может быть даже - о, ужас! - он хотел купить некоторые товары из этого списка - и еще мгновение назад намеревался оторвать от скроллбара кнопку мыши или палец тачпада, чтобы кликнуть этой кнопкой мыши или пальцем тачпада в кнопку "Купить"! Но - нет! Увы ему, несчастному пользователю скроллбара! Где ему искать теперь те товары, ускроллившиеся в неведомые выси? Где ему искать теперь те элементы списка, с которыми он так мечтал ознакомиться повнимательнее? Увы ему, увы!

А ведь есть, скажу я вам, уважаемые господа веб-разработчики, отнюдь ненулевое количество решений данной проблемы. И их даже несколько больше, чем одно. Но почему-то еще нигде, нигде я такого решения не видела. Всем пофиг? Или эти - элементарные - решения просто не поддерживаются по умолчанию любимыми фреймворками, а кодить на чистом javascript все уже разучились? Или никто не знает событийной модели браузеров? Объясните мне, я не понимаю!

Ладно бы, я бы поняла, если бы пользователя скроллбара никак нельзя было бы отличить от непользователя. Так ведь нет же ж! При клике по скроллбару таки возникает отчего-то событие mousedown, а при откликивании от скроллбара, опять же, возникает зачем-то событие mouseup! А цепочка событий scroll (в ответ на которые и выполняется автоподгрузка) возникает - удивительно! - аккурат промеж них! На планшетах и айфонах, опять же, непонятно зачем и почему, возникают совершенно другие события - touchstart и touchend. И есть даже такое страшное событие, как mousewheel, по которому можно отличить пользователя скроллбара от непользователя оного, но при этом и непользователя планшетов и айфонов. И ведь можно же, можно пользователю скроллбара вставлять в контейнер новые элементы списка только после того как он отпустит кнопкой мыши или пальцем тачпада несчастный скроллбар! Подгрузить AJAX-ом элементы, сохранить их куда-нибудь аккуратненько до поры, подвесить на событие mouseup обработчик, который их прочитает оттуда и вставит в контейнер. Можно - причем элементарно. И все будут счастливы. И будет и прогресс, и мода, и все такое - никуда не денется. Так почему же? В чем проблема? Что случилось с вами, люди?!!



P.S. Перепост и/или ссылки сильно приветствуются, ибо крик души! Наболело!
u12

Как установить связку PHP+Oracle под Windows для чайников

Понадобилось установить на локальные машины связку PHP+Oracle. Промучилась два дня, изображая собою человечка, бьющегося головой о монитор - наконец все заработало. Записываю все ходы и хаки, чтобы потом не забыть (да и мало ли вдруг еще кому пригодится).
Кажется, вся эта информация в сборе собирается и публикуется в одном месте впервые :). Мне пришлось ее выискивать и интегрировать из сотен разных источников :).

Итак, установка связки PHP с Oracle за 10 простых шагов!
Collapse )
u12

(no subject)

За ночную смену наелдурасили хитровывернутое распределение деревьев, трав и мобов по разным странам и локациям. Мир получается удивительно разнообразным и весьма красивым. Можно даже мобов не бить, а часами бродить по этим локам, сочетая приятное с полезным - поиском редких трав.


На картинке для привлечения внимания персонаж-крестьянка любуется красотами местной природы и прикидывает не пособирать ли травы.

Занимательная особенность этой игры в том, что мир не просто потенциально бесконечен - он еще и бесконечно изменчив ;). Заранее "построен" - предопределен - только город. Все остальные локации живут собственной, независимой от разработчика жизнью. Ну, в заданных - как законы физики - пределах ;). Не знаю, если ли такое где-нибудь еще, но тут вот - есть.
u12

(no subject)

Домутила, наконец, стиль для ЖЖ, практически полностью эмулирующий все, как оно было. Как будто бы чеширукие маркетологи СУПа и не набезобразили. За компанию получила массу новых и совершенно неинтересных знаний о том, как оно все в S2 устроено.

Ну вот, как-то так: Лэйер, эмулирующий старый добрый S1 стиль "Clean and Simple" в оболочке Dystopia. Кому интересно - можно скачать и использовать как угодно. Например, установить себе.

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

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

Если кому-то вдруг захочется заморочиться и перемутить какой-нибудь другой S1 стиль, под катом краткие рекомендации из серии "куда копать". Collapse )
u12

Любителям Javascript: Как определить реальную позицию каретки в textarea в MSIE?

Гугль на эту тему выяндыксивает из интернета практически одну, единственную функцию, сводящуюся к тому, чтобы породить клона текущего селекшна и его помувать по хитрому.

И все бы хорошо, но. Если каретка находится на строке в нулевой позиции, document.selection.createRange() возвращает абсолютно идентичный текстРэньдж, как если бы каретка находилась в самом конце предыдушей строки. А если, не приведи Господи, в конце текста в текстарии находится некоторое количество переносов строк, то... ну, понятно.

Убив три часа, я все-таки выродила нечто, возвращаюшее реальную позицию каретки в MSIE так, как она являет свой светлый лик пользователю, работающему с textarea. Collapse )

И все бы ничего бы, и все бы хорошо бы. Но одна собака все-таки порылась. А именно: если тыцнуть мышькой в 0-позицию строки, а потом тыцнуть мышькой в конец предыдущей строки, MSIE вернет уже неправильный xSel.boundingTop. Почему-то при именно такой последовательно действий MSIE считает, что мы идиоты и то, что мы тырцнули в конец строки, полностью эквивалентно, вплоть до неотличимой тождественности, предыдущему тычку. Что интересно, если левой стрелкой клавы перейти из 0-символа строки в конец предыдущей строки, то ничего подобного не происходит и позиция определяется нормально.

Резуме. Код выше, под катом, если кому надо. А мне... мне надо более красивое и безупречное решение. В том смысле, чтобы оно определяло позицию крешной каретки всегда правильно, не зависимо от последовательности тычкой мышькой. Если оно у кого, вдруг, завалялось - you are welcome!
u12

(no subject)

Я подходила к геймдеву неправильно. Не как к бизнесу. Мне хотелось создать живой и интересный мир вообще, но мир сам в себе, изолированный. Это проявила себя моя тенденция к собственной изоляции от мира. А бизнес - это искусство создания связей между людьми. Зарабатывание денег там вторично. Оно просто вытекает из хорошо составленных связей.

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

(no subject)

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

Чем совершеннее персонаж, тем точнее, быстрее, мощнее и вообще безукоризненнее он должен выполнять волю игрока. Совершенство же персонажа во всем остальном необходимо для автоматизации рутинных процессов игры. Игрок может поставить такого персонажа тупить в локации, а сам пойти выпить кофе с друзьми или посмотреть фильм. Когда фильм закончится, персонаж успеет получить +1 к какой-нибудь способности. Это очень хорошо. Если же персонаж "сглючит" и не прокачается, игроку придется тупить самому, а это плохо. Ему может стать скучно и он может забросить игру и своего персонажа. Чем выше уровень персонажа, тем труднее игроку бросить его на произвол судьбы.

Совершенному персонажу для автоматической прокачки в трудных локациях может потребоваться, в том числе, и некоторая свобода воли и выбора. Однако, здесь заключается известная проблема, касающаяся потенциальных конфликтов волеизъявлений игрока и его персонажа. Как правило, такие конфликты решаются просто: воля игрока всегда имеет более высокий приоритет в вычислениях, либо, если по умолчанию выставлен "продвинутый" уровень автоматизации, его всегда можно отключить в настройках игры.

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

Значение имеет только желание игрока.
u12

(no subject)

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

Из любой игры есть только один, единственный выход: кнопка "Закрыть". Очень простой и очевидный выход. И ничего более не требуется. Все же остальное - лишь продолжение этой игры по правилам этой игры.
mini

(no subject)

программное обеспечение стремительно деградирует: потребовалось прочистить картридж у принтера и... что бы вы думали? утилита прочистки выполнена в виде .jsp, который запускается через броузер! ну да, если бы она еще запускалась, как же! для того, чтобы она запустилась, нужно где-то в дебрях диска найти, блядь, сервер(!!!) и запустить. а для того, чтобы найти и запустить, блядь, сервер - нужно сначала догадаться, что нужно найти и запустить, блядь, сервер. и ведь ни в одном хелпе не сказано, что нужно запустить этот, блядь, сервер. сказано - воспользуйтесь этой долбданной утилитой, которая хрен нифига не запускается, без объяснения причин. я в шоке.

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

 
mini

(no subject)

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

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

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