Избранное

Позднее Ctrl + ↑

Ховер и клик должны совпадать

Это кажется очевидным, но ошибки на эту тему встречаются так часто, что надо бы написать.

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

Вот некоторые ошибки, которые мне встречались:

  • Меню на сайте состоит из ссылок, завёрнутых в некоторый контейнер. У контейнера в стилях прописана подсветка при наведении. Вокруг текста ссылки остаются некоторые поля до краёв контейнера, где контейнер подсвечивается, но ссылка не работает.
  • Подчёркивание ссылки реализовано как-то так, что клик в саму линию подчёркивания не вызывает перехода по ссылке, хотя ховер есть. Бывает наоборот: ховера нет, а клик срабатывает.
  • Модальный попап закрывается кликом за его пределами. Ховеры элементов вокруг попапа продолжают работать, хотя клик по ним не вызовет связанное с ними действие, а только лишь закроет попап.
  • Функция элемента заблокирована скриптом, а ховер остаётся. Например: главная кнопка на форме отключена из-за ошибки в заполнении, но продолжает подсвечиваться при наведении, как будто работает.
  • Большой контейнер с картинкой и подписью нажимается целиком и реагирует на наведение каким-то эффектом. В углу контейнера есть маленькая иконка, которая делает что-то другое, например, добавляет объект в «Избранное». При наведении на иконку эффект наведения на контейнер сохраняется, хотя клик в этом месте не вызовет действия, связанного с контейнером целиком.

Эта мысль относится к теме «Обратная связь».

Не спеши, когда плывёшь

Ого, предыдущая заметка с тегом «бассейн» написана больше десяти лет назад.

Я плаваю так: за 45-минутный сеанс стремлюсь проплыть как можно больше. Кажется, когда-то один раз мне удалось проплыть два километра, но нормальная для меня дистанция — 1700-1800 м:

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

Доплыл, пошёл переодеваться, достал телефон, смотрю — всё так и есть:

Круг, после которого стало 600 метров, занял у меня 2:30 при среднем времени круга 2:31, а последние круги, когда я ускоряюсь «чтобы больше успеть», получаются самыми плохими. Также свой экспериментальный круг я проплыл за 60 гребков, при средних 74. (Самый первый круг вообще можно не считать, потому что я его плыл кролем.)

В общем, вдохновившись этими результатами, я пошёл во вторник поплавать весь сеанс «медленно», но внимательно к технике, чтобы посмотреть, как это работает на всей дистанции. Пришёл, а бассейн закрыли до августа. Облом.

Проверка непустоты текста в ПХП

Только не бомбите, я для себя.

В ПХП оператор == проверяет равенство значений безотносительно типа. Поэтому строка «42» и число 42 с его точки зрения равны.

Это удобно: в большинстве случаев не нужно вообще думать о типах, просто сорок два равно сорока двум. Аналогично равны, например и логическая истина и число 1. Когда важно, чтобы значения были не просто равны, но ещё и совпадали по типу, используется оператор строгого равенства === .

Часто важно убедиться, что переменная не пуста. Можно проверить так:

if (@$text) { ... }

Как бы «если текст есть, то». Любая непустая строка приведётся к логически истине, при этом и пустая строка, и null, и даже неопределённая переменная приведутся ко лжи, и условие не выполнится.

Но есть нюанс. Число 0 тоже приводится к логической лжи. С этим был связан баг в Эгее: если текст заметки состоят целиком из нуля, заметку не получалось сохранить, потому что до одной из таких строчек этот текст доходил в виде числа, и условие не выполнялось. А это вполне легальный текст заметки.

У меня рука не поднимется исправить так:

if (@$text or $text === 0) { ... }

Поэтому теперь я проверяю наличие текста так:

if ((string) @$text !== '') { ... }

Не так элегантно, как было, но вроде жить можно. Или нет?

Продолжение

Вывески и таблички Дублина

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

Чёрный «Спар»:

Номер дома:

Отель:

Как поставить большой круглый логотип, если не влезает:

Скромная табличка банка:

Логотипу лайк:

Буквы как будто со старых московских станций метро:

Видимо, тут была аптека:

Клёво, когда пишут прям на кирпичной стене (это новое):

Пожарная бригада:

Обоешная:

Место под надпись как будто из другого дома взяли:

Дублиния:

Клёвая м-м:

В Европе обязательно нужно предупреждать, если у тебя куки:

Руинный бар бывает не только в Будапеште:

Фотографии из поездки в мае-июне 2018 года. Во всех заметках про путешествия снизу есть поиск дешёвых авиабилетов. Слетайте в Дублин!

Ещё Дублин:

Поднять руку, чтобы спросить

В школе нас учили, что вежливо поднять руку, если хочешь спросить учителя.

Это абсолютная хрень, говорю вам как учитель.

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

Поэтому я на курсе говорю слушателям: не надо поднимать руку, просто спрашивайте.

Знайте: ответственность за то, чтобы вовремя спросить — на слушателе. Когда вы поднимаете руку, вы перекладываете свою ответственность на учителя. Учителю и без этого есть, о чём думать. Дождитесь паузы в рассказе и задайте свой вопрос.

Черногория: Котор

После того, как посмотрели церковь, поплыли в Котор.

Плывём:

Приплыли. В город ведут ворота:

Красивая машинка:

Над домами торчат горы:

Над церквями торчат горы:

Улица:

Кафе:

Ещё улица:

Ещё кафе:

Винный магазин:

Парикмахерская:

Антикварный и аптека:

Вывеска прекрасна:

В отличие от вывески морского музея:

Хорватская господарская комора:

Частный знак:

Пару часов погулять — нормально.

Фотографии из поездки в октябре 2016 года. Во всех заметках про путешествия снизу есть поиск дешёвых авиабилетов. Слетайте в Черногорию!

См. также:

Черногория: Мадонна на рифе

После Герцога Нового поплыли в Котор, но по пути увидели какой-то остров с церковью — я уже показывал его:

1

Пока я писал эту заметку, я выяснил, что это называется остров Госпа-од-Шкрпьела, т. е. «Мадонна на рифе», но пока мы там плавали нам было пофигу совершенно.

Другой ракурс. Как видите, рядом ещё какой-то остров:

2

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

3

В это время как раз люди с последней экскурсии возвращались пришвартованную к острову лодочку, и мы спросили, нельзя ли нам просто самим подплыть. А нам сказали, что без проблем. Ну мы и подплыли, пришвартовались. Там ровно одно швартовочное место:

4

Привязались:

5
6

И пошли гулять:

7
8
9

Маяк:

10

Святая простота:

11
12
13
14

На острове ровно одно швартовочное место, на особой выпирающей части:

15

Вид на остров со швартовочного места:

16

Вид на соседний остров:

17

Я:

18

Поплыли дальше.

19

Фотографии из поездки в октябре 2016 года. Во всех заметках про путешествия снизу есть поиск дешёвых авиабилетов. Слетайте в Черногорию!

См. также:

РСС, или Как подписаться на мой блог (2019)

Заметка устарела. Читайте исправленную и дополненную версию

Если вы ищете прямой адрес РСС-потока моего блога, то вот он:
http://ilyabirman.ru/meanwhile/rss/

У меня появляется новая аудитория, поэтому время от времени я повторяю эту заметку.

Многие не знают, что такое РСС (RSS) и как им пользоваться. К сожалению, РСС — немного гиковская технология, не вполне доступная нормальным людям. Но если её освоить, то становится непонятно, как ты до этого жил. В этом смысле РСС похож на торенты: там тоже есть некоторый порог входа, но польза оправдывает затраты сил на его преодоление.

Что такое РСС? Это механизм подписки на блоги и другие сайты с регулярными обновлениями. Вместо того, чтобы самому ходить по разным сайтам и смотреть, не появилось ли там чего новенького, разумно поручить эту тупую работу машине. Пусть она ходит по всем сайтам и аккуратно собирает всё новое в одном месте. Тогда получается, что новости просто приходят к нам, а не мы охотимся за ними.

Чтобы использовать РСС, нужна РСС-читалка. Это программа, которая знает, какие сайты вы любите, и следит за обновлениями на них. Когда сайты обновляются, свежие публикации автоматически скачиваются, и вы получаете свежий выпуск собственного «журнала», где собрано всё новое с любимых сайтов.

Вот так примерно выглядит моя читалка:

РСС, или как подписаться на мой блог

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

Как подписаться на кого-нибудь по РСС? Многие РСС-читалки позволяют подписаться напрямую, то есть они сами будут скачивать всё новое. Но это непрактично: если вы подпишетесь независимо на компьютере, айпаде и айфоне, то три читалки не будут знать, что́ вы уже прочитали, и все заметки вы будете получать по три раза. Намного лучше воспользоваться сервисом-агрегатором, который будет ходить и собирать новости, а читалки с ваших устройств будут просто синхронизироваться с этим сервисом.

Заведите себе акаунт, например, в Фидли. В меню слева сверху есть пункт Add content — введите туда адрес блога, например, моего. Всё, теперь вы подписаны, новые посты будут приходить к вам туда. Подпишитесь так же на все любимые блоги, и теперь сможете читать всё в одном месте, например:

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

У самого у меня около двух сотен разных источников в читалке. Среди них не только блоги, но и, например, результаты поиска в Яндексе по моей фамилии — так я всегда автоматически вижу, когда кто-то где-то ссылается на меня. Если вы сами читаете этот пост через РСС и недоумеваете, зачем я всё это объясняю — привет!

Конечно же, любой блог на Эгее поддерживает РСС, для этого ничего не нужно настраивать.

Читать РСС прямо в интерфейсе Фидли — это такое же насилие над собой, как использование Гмейла через веб-интерфейс. Кому-то нравится такая фигня, но мне не понять.

Для чтения РСС я предпочитаю Риидер (он платный, есть миллион других, в том числе бесплатных читалок). Риидер бывает для Айфона, Айпада и Мака — везде сказочно красивый (сверху это он на скриншоте). После того, как вы его установите, его надо будет привязать к вашему акаунту в Фидли, и всё, он будет показывать всё, на что вы подписаны. То есть это просто клиент для агрегаторов. Кстати, кроме Фидли есть ещё куча агрегаторов, просто я предпочитаю Фидли: он бесплатный и работает без нареканий. Риидер поддерживает множество разных агрегаторов, комбинировать можно как угодно. Вы можете даже использовать разные клиенты на разных устройствах — всё со всем без проблем синхронизируется.

Ещё часто спрашивают, зачем РСС, если есть соцсети. Вроде как, все туда кидают ссылки на свои посты. Тут дело личное, конечно, но я не понимаю, как можно даже сравнивать по удобству одно с другим.

Во-первых, за соцсетями, чтобы ничего не пропустить, надо внимательно следить, а это съедает целую кучу времени. Я их читаю по диагонали и по умолчанию считаю, что там ничего особо ценного нет. Они ещё и ставят посты в одним им известном порядке. Читалка ничего не пропустит.

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

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

Теперь вместо браузера и твиттера для чтения блогов вы можете использовать клёвый, удобный, придуманный специально для этого инструмент — РСС-читалку. На здоровье!

Эгея 2.8

Готова Эгея 2.8 (сборка v3364) с комментариями через соцсети, улучшениями в антиспаме, планировщиком заметок, новой темой оформления, поддержкой эмодзи и другими штуками. Эта заметка повторяет анонс беты, но с меньшим занудством. Хотите подробнее — читайте анонс беты.

Комментарии через соцсети

Раньше оставить комментарий мог любой, просто указав что-то, напоминающее почту. Теперь ещё можно зайти через Твиттер или Фейсбук:

Если хотите, можно потребовать этого, поставив галочку в настройке:

Тогда просто оставив почту комментировать уже будет нельзя.

При входе через соцсеть вместо того, чтобы сразу идти в эту соцсеть, вы сначала заглянете на сайт Эгеи:

Вход в два прыжка может напрягать комментаторов, но упрощает жизнь владельцам блогов на Эгее: не нужно думать про сложную настройку взаимодействия с соцсетью. Кроме того, если вы один раз представитесь сайту Эгеи через Фейсбук, то в следующий раз он уже будет узнавать вас сам.

Если вы как автор блога всё-таки хотите заморочиться с ключами соцсетей, чтобы комментаторы представлялись вам напрямую, а не через сайт Эгеи, так тоже можно. Скопируйте из system/gips/ в user/gips/ джейсоновские файлы настройки соцсетей и пропишите там свои ключи.

С разработкой этой фичи помогли Иван Щолоков и Виктор Корейша, с дизайном помог Иван Звягин.

Ещё появились дата и время у комментариев, изменён формат отображения относительного времени, поменялась вёрстка комментариев и управления ими на мобиле.

Улучшения в антиспаме

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

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

Запланированные заметки (для платных пользователей)

Если вы платный пользователь, теперь сможете запланировать заметку. Для этого рядом с кнопкой «Опубликовать» появилась кнопка с календариком:

Если в неё нажать, можно указать дату и время, когда выйдёт заметка:

Как всегда с Эгеей, чтобы это работало не нужно ничего дополнительно настраивать, никакой там крон или ещё какую байду. Потому что в момент публикации на сервере ничего не должно происходить. Просто на все запросы, поступившие после часа X, Эгея будет отвечать так, как будто заметка уже есть. Разумеется, Эгея сама управляет всеми кешами так, чтобы они устарели в нужное время. Уведомление о новой заметке отправится в «Блоги», как только первый человек её увидит.

Новая тема оформления

Называется «Акут», чистенькая:

В большинстве тем оформления случились наноулучшения. В частности, аудиоплеер теперь нормально выглядит на всех темах с тёмным фоном. Это «Холм»:

Эмодзи

Теперь Эгея поддерживает эмодзи 🎉 Женя Степанищев научил Эгею правильно работать с базой данных для их поддержки. При обновлении база данных должна автоматически сконвертироваться, и Эмодзи должны заработать. Если не заработают, видимо, у вас очень древняя версия Майэскуэля, где нет поддержки нужной для этого кодировки utf8mb4.

Остальное

Сбылись мечты народные! Ссылка «7 комментариев» под заметкой теперь ведёт сразу туда, где начинаются комментарии, а не в начало страницы с заметкой.

Теперь под каждой заметкой показывает, сколько людей её видели:

Пришлось придумать хитрость, чтобы кешировать всё, кроме этих чисел.

На странице 404 теперь показываются ссылки на популярные заметки, чтобы хоть куда-то можно было пойти:

Популярные теперь считаются по количеству увидевших, а не хитов.

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

В окне входа можно сказать, что ты забыл пароль:

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

Если ввести ту же, что Эгея знает, то туда тоже отправится ссылка для сброса пароля.

Убрана двигалка «важные — все» на странице тегов, теперь просто показываются все.

Пофиксились некоторые баги с масштабированием картинок и на странице со списком тегов. Ещё исправлена группа багов, из-за которых нельзя было назвать заметку или тег «0». Если вы не любите ПХП, то у вас отличный повод для злорадства! Ещё добавились небольшие оптимизации там и тут (v3276, v3278, v3297, v3345, v3350).

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

Ещё после выхода версии 2.7 выходили небольшие апдейты; версия 2.8 включает все фиксы из них:

Технические детали

Минимальная версия ПХП поднялась с 5.3 до 5.4. Если у вас 5.3, новая Эгея не будет работать вообще никак.

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

Жуэль, Роза и Нисден обновились.

Эгея теперь генерирует sitemap.xml.

Если вы делали свою тему оформления, посмотрите, что изменилось в комплектной, и аккуратно повторите эти изменения у себя.

Как обновиться

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

Замените файл .htaccess в корне, папку /system/ и все подпапки в /themes/ (то есть уберите старые, положите новые, а не дозалейте в старые новые файлы).

Где скачать

Свежий дистрибутив — на сайте движка.

Если вы пользуетесь платной версией и хотите платную 2.8, напишите мне.

О предыдущей версии: 2.7

Ранее Ctrl + ↓