Как стать автором
Обновить
15
0
Александр @Placido

Пользователь

Отправить сообщение

Самое опасное слово в разработке программного обеспечения

Время на прочтение2 мин
Количество просмотров37K
«Просто размести это где-нибудь на сервере».

«Просто добавь кнопку “Избранного” справа от элемента».

«Просто добавь [вставьте здесь сложную опцию] в экране настроек».

Использование слова «просто» указывает на множество сделанных допущений. Несколько месяцев назад Брэд Фрост поделился некоторыми мыслями, какое отношение к знанию имеет это слово.

Слово «просто» заставляет меня чувствовать себя идиотом. «Просто» предполагает, что у меня есть определённый бэкграунд, что я изучал определённые предметы в университете, что я хорошо разбираюсь в определённых технологиях и прочитал все правильные книги, статьи и справочные ресурсы.
Читать дальше →
Всего голосов 68: ↑58 и ↓10+48
Комментарии87

Я хочу, чтобы сайты открывались мгновенно

Время на прочтение10 мин
Количество просмотров139K
Здравствуйте, меня зовут Александр Зеленин и я веб-разработчик. Я расскажу, как сделать так, чтобы ваш сайт открывался быстро. Очень быстро.


Я хочу, чтобы мой сайт открывался быстро
Всего голосов 130: ↑122 и ↓8+114
Комментарии87

Да пребудет с вами прокрутка: теория и практика по камере в платформерах [2/2]

Время на прочтение17 мин
Количество просмотров30K
Первая часть

От переводчика. OlegKozlov рассказал о приёмах камеры в своей игре «Несыть». Из-за большого количества трафика и не слишком верно действующего JS якорь перебрасывает куда угодно, только не на комментарий, поэтому сделаю копию здесь.
Что сделано в «Несыти»…
1. Упреждение по движению: точка привязки камеры вынесена вперёд от центра червя, причём чем быстрее он ползёт, там дальше она выносится.
2. Упреждение по управлению: когда игрок начинает сжимать червя для прыжка, то вынос точки привязки камеры ещё усиливается заранее передвигая камеру в ту область, куда червь сейчас прыгнет.
3. Линейное сглаживание — камера плавно стремится к точке своей привязки, тем быстрее, чем больше разница между фактическим положением камеры (центра экрана) и точкой её привязки.
4. Плюс масштаб всего происходящего завязан на размер червя, когда червь увеличивается, то камера «отъезжает». Причём делает это тремя-четыремя ступенчатыми переключениями, чтобы игрок ощущал, что его червь вырос. Если делать плавно, то рост и изменение масштабов игры нивелируются и не приносят удовольствия.
5. Упор в край. Камера «упирается» в края уровня, становясь более статичной и позволяя голове червя сильно смешаться от центра экрана, буквально упираться головой в его край.
image

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

Направление


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

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

Wonder Boy, ещё одна моя любимица, быстрый платформер, в котором можно идти только вперёд через старое доброе одностороннее окно свободного хода. В отличие то Super Mario Bros., там нет зоны разгона, плавно ускоряющей камеру, но есть другая интересная техника, которую я называю «рельсы». Камера ставится и движется так, чтобы предвосхищать будущие преграды.

Wonder Boy (Sega, 1986)
Рельсы: запрограммированный маршрут камеры
Зона свободного хода (односторонняя)
Статическое упреждение

Пятое поколение приставок, среди них PlayStation и Nintendo 64, открыло новые аппаратные возможности, положив начала грубому, но настоящему 3D. Приёмы трёхмерной камеры — сами по себе захватывающая и многогранная тема, но поддержка 3D повлияла и на двухмерные игры. Разработчики теперь могут приближать камеру, наклонять вид и даже сочетать 2D и 3D — то, что мы сейчас называем 2,5D, когда игра идёт на двухмерной плоскости, но в объёмном мире.
Очень много трафика...
Всего голосов 64: ↑62 и ↓2+60
Комментарии10

Создание веб-сайта. Курс молодого бойца

Время на прочтение24 мин
Количество просмотров845K
Как-то меня попросили провести небольшой семинар в лицее, где я когда-то учился, по созданию веб-сайта. В процессе написания речи я подумал, что она может вылиться в материал, который, возможно, будет полезен многим начинающим в области веб-дизайна, вёрстки веб-страниц и пр. Я не претендую на истину в первой инстанции и всё изложенное носит чисто личностный взгляд на работу с дизайном и кодом. Статья даёт поверхностный взгляд на понятия и средства, которые, на мой взгляд, могут стать неплохим стартом для того, кто готов идти дальше.
Читать дальше →
Всего голосов 86: ↑77 и ↓9+68
Комментарии46

Иллюзия времени

Время на прочтение13 мин
Количество просмотров33K

Мой дедушка был часовщиком. Когда я был ребенком, я мог подолгу сидеть возле его большого деревянного стола, наблюдая за тем, как он собирает все эти механизмы, состоящие из десятков мельчайших деталей. Все его терпение, решительность и точность, которые он вкладывал в каждую деталь своих механизмов всегда восхищали меня.
Читать дальше →
Всего голосов 36: ↑28 и ↓8+20
Комментарии13

Поисковые подсказки изнутри

Время на прочтение11 мин
Количество просмотров28K


Ночная зала. Тысячи таинственных ликов в темноте, подсвеченных голубоватым свечением мониторов. Оглушительный треск миллиона клавиш. Подобные выстрелам автомата удары по клавишам «Enter». Зловещее стрекотание сотен тысяч мышек… Так, наверняка, играло воображение каждого разработчика высоконагруженной системы. И если его вовремя не остановить, то может выйти целый триллер или фильм ужасов. Но в данной статье мы будем гораздо ближе к земле. Мы кратко рассмотрим известные подходы к решению задачи поисковых подсказок, как мы научились делать их полнотекстовыми, а также расскажем о парочке уловок, на которые мы пошли, чтобы придать им скорости, но при этом не научить жадности к ресурсам. В конце статьи вас ждёт бонус — небольшой рабочий пример.
Читать дальше →
Всего голосов 64: ↑60 и ↓4+56
Комментарии14

Еще раз о дизайне мобильного приложения. Какой цвет выбрать для иконки своей программы?

Время на прочтение4 мин
Количество просмотров29K


Кажется, это не слишком значительная проблема, правда? В любом случае дизайнер может справиться, не слишком заморачиваясь над вопросом выбора цвета. Тем не менее статистика говорит нам, что цвет иконки приложения имеет огромное значение для продвижения программы. Собственно, цвет любого продукта очень важен.

К примеру, если спросить человека, какая компания ассоциируется у него с красным цветом, скорее всего, ответ будет – Coca-Cola или Ferrari (хотя мы, конечно же, назвали бы Appodeal :)). Давайте попробуем определить, какой цвет важен для вашего продукта, а точнее – для иконки вашего приложения. Тема выбора цвета довольно сложная, субъективная. Но есть ряд исследований, которые позволяют говорить о некоторых вещах с уверенностью.
Читать дальше →
Всего голосов 25: ↑16 и ↓9+7
Комментарии9

Как работает реляционная БД

Время на прочтение51 мин
Количество просмотров545K
Реляционные базы данных (РБД) используются повсюду. Они бывают самых разных видов, от маленьких и полезных SQLite до мощных Teradata. Но в то же время существует очень немного статей, объясняющих принцип действия и устройство реляционных баз данных. Да и те, что есть — довольно поверхностные, без особых подробностей. Зато по более «модным» направлениям (большие данные, NoSQL или JS) написано гораздо больше статей, причём куда более глубоких. Вероятно, такая ситуация сложилась из-за того, что реляционные БД — вещь «старая» и слишком скучная, чтобы разбирать её вне университетских программ, исследовательских работ и книг.

На самом деле, мало кто действительно понимает, как работают реляционные БД. А многие разработчики очень не любят, когда они чего-то не понимают. Если реляционные БД используют порядка 40 лет, значит тому есть причина. РБД — штука очень интересная, поскольку в ее основе лежат полезные и широко используемые понятия. Если вы хотели бы разобраться в том, как работают РБД, то эта статья для вас.
Читать дальше →
Всего голосов 232: ↑229 и ↓3+226
Комментарии134

По-настоящему адаптивные письма. Часть… снова первая

Время на прочтение9 мин
Количество просмотров27K


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

К чему мы приходим:
— Использование внешних стилей и последующий прогон кода через инлайнер. Из-за усложнения кода это стало целесообразным
— Улучшение семантики через именование классов и сокращение участков кода
— Частичная поддержка the Bat! Хотя Николь на него забила.
— Полная поддержка всех мобильных почтовых клиентов
— Использование ранее опасных конструкций. Благодаря усердному тестированию проблемы решены.
Читать дальше →
Всего голосов 30: ↑25 и ↓5+20
Комментарии25

Система уведомлений о событиях на сайте (на примере аудиоплеера ВКонтакте)

Время на прочтение2 мин
Количество просмотров37K
Приветствую.

Думаю, многие, кто имеет аккаунт ВКонтакте и слушает там музыку, замечали, что если на одной вкладке включить трек, а затем уже на другой включить второй, первый трек уйдет в паузу. Примерно то же самое происходит с различными уведомлениями (новое сообщение, ответ на комментарий/запись и т.д.) — отображается оно только в активной вкладке. Кому интересно как это работет и каким образом сделать подобное у себя на сайте, милости просим за хабракат.
Читать дальше →
Всего голосов 94: ↑90 и ↓4+86
Комментарии38

Неизменяемость в JavaScript

Время на прочтение6 мин
Количество просмотров42K
Неизменяемость — основной принцип функционального программирования, который также может многое предложить объектно-ориентированным программам. В этой статье я расскажу вам о том, что именно является краеугольным камнем неизменяемости, как использовать эту концепцию в JavaScript и почему это полезно.
Читать дальше →
Всего голосов 24: ↑18 и ↓6+12
Комментарии12

Статический анализ кода в PHP: регулярные выражения

Время на прочтение3 мин
Количество просмотров14K
Продолжая развивать тему статического анализа, который в общем случае занимается поиском любых дефектов в исходных кодах программ, давайте коснёмся проверки правильности регулярных выражений.

Тема регулярных выражений для PHP довольно щекотлива (примерно как манипулирование массивами), поэтому я вкратце напомню, с чем мы имеем дело.

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

Итак, давайте посмотрим, на примере многим знакомых ZF2 и Symfony2, какие из упомянутых проблем можно найти с помощью статического анализа.
Читать дальше →
Всего голосов 24: ↑20 и ↓4+16
Комментарии21

9 анти-паттернов, о которых должен знать каждый программист

Время на прочтение9 мин
Количество просмотров149K
В программировании самокритика – это умение распознать контрпродуктивные решения в дизайне, коде, процессах и поведении. Знание о вредных шаблонах решений полезно для программиста. В этой статье я опишу анти-паттерны, которые я встречал на своём личном опыте время от времени.

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

1 Преждевременная оптимизация


В 97% случаев надо забыть об эффективности малых частей программы: преждевременная оптимизация – корень всех зол. Но в 3% случаев об оптимизации забывать не нужно.
Дональд Кнут

Хотя никогда зачастую лучше, чем прямо сейчас
Тим Питерс, Зен языка Python


Что это

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

Почему плохо

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

Как избежать

Сначала пишите чистый, читаемый, работающий код, используя известные и проверенные алгоритмы и инструменты. При необходимости используйте инструменты для профилирования для поиска узких мест. Полагайтесь на измерения, а не на догадки и предположения.
Читать дальше →
Всего голосов 117: ↑97 и ↓20+77
Комментарии123

Приведение типов в PHP == табурет о двух ножках?

Время на прочтение4 мин
Количество просмотров55K
image

— В PHP приведение типов работает нормально, надо только включать здравый смысл.
— А чего там, просто сравниваешь и все…
— Ого, глюк какой-то в PHP, смотри, сравниваю два флоата, они должны быть одинаковые, а он мне говорит, что они не равны.
— А, ну когда число со строкой сравниваешь, перебирать надо, что сработает.

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

Буду краток, дальше будут только примерчики. А к тебе, дорогой читатель, просьба. Некоторые ответы спрятаны под спойлер. Перед тем, как заглянуть в ответ под спойлером, попробуй ответить сам. За каждый правильный ответ заслуженно прибавляй себе по баллу. В конце поста в опросе не забудь проставить свой результат. Договорились?
Тогда поехали
Всего голосов 49: ↑39 и ↓10+29
Комментарии81

Безумный PHP. Фьюри код

Время на прочтение7 мин
Количество просмотров64K

Сборник PHP ненормальностей или что надо знать чтобы не сойти с ума и не прострелить себе что-нибудь


Прочитал статью mnv: "Приведение типов в PHP == табурет о двух ножках?" и захотелось в комментариях добавить немного дополнений, но… Но потом увидел комментарий и понял, что лучше дополню статью тем, про что мало кто пишет и мало где это имеется в централизованном виде. Вроде бы всем известная тема, а все же кому-то в новинку. Это не совсем про приведение типов, но они тоже есть. Это про особенности, зная которые можно делать меньше ошибок. Если интересно, го под кат, я создал!
Читать дальше →
Всего голосов 91: ↑82 и ↓9+73
Комментарии74

Дайджест интересных материалов из мира веб-разработки и IT за последнюю неделю №163 (1 — 7 июня 2015)

Время на прочтение8 мин
Количество просмотров32K
Предлагаем вашему вниманию подборку с ссылками на полезные ресурсы, интересные материалы и IT-новости


Читать дальше →
Всего голосов 32: ↑28 и ↓4+24
Комментарии0

Готовимся к собеседованию по PHP: ключевое слово «static»

Время на прочтение5 мин
Количество просмотров188K
Не секрет, что на собеседованиях любят задавать каверзные вопросы. Не всегда адекватные, не всегда имеющие отношение к реальности, но факт остается фактом — задают. Конечно, вопрос вопросу рознь, и иногда вопрос, на первый взгляд кажущийся вам дурацким, на самом деле направлен на проверку того, насколько хорошо вы знаете язык, на котором пишете.

image

Попробуем разобрать «по косточкам» один из таких вопросов — что значит слово «static» в PHP и зачем оно применяется?
Подробности, цитаты из мануала, стандартов и личного опыта - под катом
Всего голосов 54: ↑41 и ↓13+28
Комментарии70

Иконификация контента

Время на прочтение8 мин
Количество просмотров15K
img

В этой статье мы поговорим о концепции иконификации – размещения контента на странице и применении CSS для его трансформирования в упрощенное превью в виде значка. Давайте рассмотрим на примере. В этом демо показана иконификация на примере календаря. Чтобы развернуть месяц, нужно нажать на его значок.
Читать дальше →
Всего голосов 16: ↑15 и ↓1+14
Комментарии8

Оптимизация рендеринга веб-страницы

Время на прочтение5 мин
Количество просмотров43K
image

Из-за давления бизнеса, мы стремимся сделать всё быстрее. От этого страдает планирование и многие вещи не учитываются. Например, легко забыть о производительности и через какое-то время столкнуться с тем, что на более слабых машинах и планшетах обилие движущихся элементов страшно тормозит и дёргается в конвульсиях. Посмотрим, что можно сделать, если вы столкнулись с такой проблемой или хотели бы её избежать.
Читать дальше →
Всего голосов 44: ↑42 и ↓2+40
Комментарии16

58 признаков хорошего интерфейса

Время на прочтение16 мин
Количество просмотров381K
У хорошего интерфейса пользователя высокая конверсия и его просто использовать. То есть, он хорош и для бизнеса, и для использующих его людей. Вот список опробованных нами идей.

1 Один столбец вместо нескольких


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

image
Читать дальше →
Всего голосов 226: ↑182 и ↓44+138
Комментарии102

Информация

В рейтинге
Не участвует
Откуда
Одесса, Одесская обл., Украина
Дата рождения
Зарегистрирован
Активность