Comments 158
В ней протухли корневые сертификаты. Почти ничего не открывается. Если кто знает, как их обновить, поделитесь! Буду очень благодарен.
вручную импортируйте её сертификат в браузер через "Издатели" или "Посредники" (Настройки, Расширенные, Безопасность, Управление сертификатами), через что воспримет Импорт.
Вот форум по Opera Presto. Ответ скопироан оттуда, может поможет
Каждому своё, можно и здесь сделать lite версию для таких как Вы. Повторюсь, тёмной темы нет на хабре)
И в Facebook там старый удобный дизайн
А он там когда-то был?
Извините, не удержался.
Интересно, сколько на вашей древней опере уязвимостей накопилось.
Из фич можно добавить лог кто ставит какие отметки.
Спасибо за оценку! Насчёт реверса, я сидел и разбирал исходные чанки на странице, чтобы найти как генерируется токен. Ничего, собственно я не нашёл, кроме загадочного значения token внутри самого приложения.
Есть идея делать одноразовый запрос со страницы хабра, а потом вставлять значения токенов (из request headers) в моё приложение, как то так
csrf-token — это токен защиты от подделки запросов (Wikipedia)
Он создается на сервере и вживляется в форму. Т.е. по факту его можно получить только если скачать страницу с формой и достать его из html. Это если говорить про web. Как оно работает в мобильных приложениях я не знаю. Не сталкивался.
Глянул сейчас форму авторизации хабра в web-версии — там нет csrf токена, но есть какой-то скрытый state. Скорее всего это и есть csrf токен. Либо токен как-то передается в AJAX запросы напрямую или через cookies. В общем тут тупиковый вариант скорее всего.
Без официального API вероятно не получится нормально реализовать авторизацию. Да и потом — после авторизации нужно будет узнать какие запросы и куда отправлять чтобы получить нужные данные.
Ну, как сказать, если бы можно это было запихнуть в React Native, было бы круто, но к сожалению я этим не занимался. Уже есть тикет насчёт манифеста приложения, который позволит добавлять сайт как аппу андроида. Пока, в Хроме можно сделать так: зайти на сайт -> три точки -> Добавить на домашний экран
А так, проект абсолютно открытый, создаёте форк и делаете и себе, и людям хорошо!
Cordova, не?
Мне сами по себе гибриды не нравятся. Уж лучше я либо поставлю сайт как PWA, либо буду просто на сайт заходить. Гибрид, случаем, не добавляет кучу саппортящих библиотек, чтобы приложение запускалось?
В итоге хорошо сделаая cordova всё же приятнее чем просто браузер.
Этот проект удобнее, чем официальная версия. Работает шустрее.
А зачем плодить сущности?
PWA с манифестом и так отлично работает
А кешем пусть занимается браузер
github.com/LencoDigitexer/habraAndroid
Если приложение действительно даст возможность убрать эти задержки, это весьма полезно! Но буду пока следить, подожду, может всё-таки авторизация появится.
Каюсь, немного приукрасил работоспособность комментариев: в итоге всё равно будет в DOM'е висеть 2к компонентов, НО — большое но — есть разные ситуации, когда у тебя уже есть dom, и когда его нужно за раз построить. Надо бы серьёзную виртуализацию через react-window например, но там встает вопрос о вычислении высот — надо в невидимом диве отрендерить все комментарии, чтобы потом знать какой делать отступ сверху и снизу (минус скорость).
Насчёт авторизации, было бы очень круто, если бы кто-нибудь из Хабра обратил на всё это внимание и дал какие-нибудь подсказки. Пока жду.
UPD. на Redmi Note 8 Pro (ram 6GB) хром один раз умер. Ну это хром.
Работа проделан классная! На вид гораздо симпатичнее чем другой подобный проект, который тут постили несколько месяцев назад. Что ещё раз подтверждает мою мысль что древовидная структура дом не нужна.
Я думаю что высоту знать не надо, просто UX с прогресс баром уже изжил себя. Достаточно чтобы кастомный прогресс бар просто показывал примерное положение на странице по номеру комментария. Тем более на мобилке никто не целится в этот прогресс бар — достаточно кнопок для перехода между ветками.
Если очень хочется, то у меня была идея как cделать прогресс бар ещё умнее. Локально мы отрендерили комментарии и знаем их размер, так что локально он ведёт себя как обычно. Глобально мы знаем положение лишь примерно (по номеру комментария + кэш уже отрендеренных ранее при прокрутке) поэтому прогресс бар должен тоже вести себя примерно. Остается придумать какую-то хитрую нелинейную функцию, которая будет склеивать эти два решения.
Пока не было времени это сделать, и я к сожалению мало знаю про нужные апи браузера для виртуального скрола.
А зачем склеивать два решения, когда можно сделать точно:
- есть высота всех комментариев вместе
- есть clientHeight — высота текущего скролла относительно начала комментариев
Вычитаем из первой величины clientHeight и переводим в проценты. Или просто брать номер самого верхнего комментария в текущем viewport, тогда у прогресс бара, максимальным значением будет кол-во комментариев, а текущим значением — номер комментария.
Выглядит круто, я сам пару месяцев назад загорелся похожей идеей мобильного приложения на Flutter, но вы опередили.
Если интересно то вот: https://github.com/avdosev/habr_app
Правда, особых фишек в нем и нет, кроме кеширования статей
https://habra.js.org/all/p/1 > 404 после обновления. Видимо нужна кастомная 404 которая подгрузит необходимые скрипты и отобразит контент.
Если зарегестрирован service worker, то страница работает. Вам нужно сначала на главную страницу зайти (/), а потом все будет работать.
404 страничку сделать надо у github pages, спасибо что сказали.
Я service worker кажись вырубил. Ещё неплохо было бы показывать текст до ката хотябы по кнопке а то заголовок мало что говорит иногда.
А мне вот не хватало всех подряд постов в канале телеграмм и я сделал свой)
https://t.me/habr_all
В будущем адаптирую интерфейс под планшеты. Обещаю. Если экзамены сдам
Отдельное спасибо от пользователей не очень популярных у разработчиков устройств. Мой старый планшетик новостью доволен.
Успехов в сдаче экзаменов!
Что бы не читать все подряд, а только нужное.
Конечно должно отключаться.
Как то делал себе такой скрипт
Для начала нужно подумать, откуда эти посты брать, потому что раздел "Все подряд" обновляется Возможно, нужно делать небольшой бекэндик, который будет сортировать из этого раздела все посты и фильтровать те, которые прошли в "Лучшее". А потом выдавать их где нибудь в ленте, помечая тегом.
Если будете пилить эту фичу, то лучше сделать полностью настраиваемый фильтр по всем возможном параметрам статей и авторов, а не какие-то отдельные захардкоженные фильтры. Крайне ценно было бы, уже сколько раз просили разработчиков..
Все выглядит круто, шустро… но вот что с нагрузочнвм тестированием?
Сравнивать скопость отдачи сайта без нагрузки с хабром с нагрузкой — это ни о чем.
Запустить лоадимпакт (там бесплатно 10 тестов) на стресс с хотя бы на 10 vu и посмотреть что и как, а потом уже рассказать об успехах
Я написал о проблемах отображения комментариев — это никак с нагрузкой на сайт не связано. Сам Vue с кучей компонентов работает помедленней, и т.п. Не думаю, что Github Pages справятся с дикой многомилионной нагрузкой, но и, с другой стороны, будет ли здесь такой наплыв пользователей?
(холивары на тему Vue и фреймворков поднимать не надо)
UPD:
Вы о чём, это же статический сайт на github pages который на стороне браузера по json апи забирает данные с хабра. Нету сервера который надо тестировать.
выглядит интересно, единственное, что кнопки мигают, поставь --webkit-tap-highlight-color
Смахивает на вкусовщину: у хабра тоже мигают
вкусовщина, как никак под нативное закос с material ui, поэтому не хотелось бы видеть резкие мигания
Эта настройка позволяет получить app-like experience.
Также, помнится, несколько лет назад был хак, чтобы убрать небольшую задержку в 100ms перед тем, как клик распознается браузером. Это сделано для распознавания лонг-тача и прочих альтернативных моментов.
По issues: 404 not found по open link in new tab
Пофиксил.
Привет!
Тебе нужно зарегестрировать одну вещь — специального воркера, который будет обрабатывать твои запросы.
Для этого нужно всего лишь зайти на коренной путь — habra.js.org или нажать сюда
Ни переход по линку и открытие habra.js.org в новой вкладке не возымеют действа, всегда показывается эта плашка с урлом открываемой статьи в адресной строке (блокировщиков нет)
Уфф, сервис воркеры включены? Попробуйте очистить данные у сайта.
Так стоп. Вы действовали так, как сказано на странице? Т.е. заходили на (/) и у вас была видна лента или же у Вас на любой урл идёт эта табличка?
Именно так, была лента, а при открытии статьи в новой вкладке, вот эта плашка. Для чистоты эксперимента и в другом браузере открывал.
Однако, все это не важно и я должен извиниться, ибо не упомянул небольшую, но дюже важную деталь. А именно, суровый энтерпрайз с ни менее суровой политикой безопасности.
Перед уходом в глаза бросились JS ошибки в консоли, т.е. воркеры не смогли :(
Посему, не обращайте на предыдущий комментарий внимание. Вне конторы все супер.
Если браузер устройства не поддерживает Service Worker, то эта страница всегда будет отображаться. Ну и при первом открытии пользователи всегда будут видеть 404 страницу.
Эта проблема (context root'а или pathname) исправляется простыми двумя скриптами в 404.html и index.html.
Вообще это не единственная проблема с Service Worker, но у вас вроде отдельный домен, поэтому не должно больше вызывать сложностей.
Хабру нужно допиливать фичи, к примеру, загрузка всех комментариев за один раз — это довольно позорно в 2020 году.
Как подгружаются тоже важно так как на медленном канале фаерфокс через некоторое время показывает ошибку вместо загруженной части страницы. Если бы API хабра умело отдавать коменты по частям. Или хотябы при помощи Range запросов ответ API можно было бы забрать по частям то эту ошибку можно было бы обойти.
Если бы API хабра умело отдавать коменты по частям. Или хотябы при помощи Range запросов ответ API можно было бы забрать по частям то эту ошибку можно было бы обойти.Можно просто загружать ответ как стрим, если вас проблема ручного парсинга частичных данных не останавливает: свойство responseText у XMLHttpRequest обновляется всё время загрузки (пока readyState == 3).
Подгрузку можно сделать как "infinite scroll", по мере листания вниз комменты грузятся сами. Тем более, на беке же очень просто сделать пагинацию.
Для древовидных комментариев не так просто.
Согласен, но тогда хотя бы пагинацию по корневым комментариям. К примеру, по 20 корневых + все их дети, если они есть. Все же лучше, чем один запрос на все.
Допустим, первый комментарий был вчера, а сегодня 2 минуты назад появился к нему ответ. На первой странице будет первый и последний по времени комментарий, то есть надо все равно достать все комментарии из базы и построить в нужном порядке. Или в базе как-то по-особому хранить. То есть даже на бэке это будет не так уж и просто.
Я говорил про слова "Тем более, на беке же очень просто сделать пагинацию". Можно, да, но это будет сложнее, чем стандартный offset/limit.
Ну так я и написал "надо как-то по особому хранить") Все равно надо это специально продумывать, alter table делать, то есть есть отличия от стандартной пагинации существующих сущностей.
skip 100000 take 10
это значит что будет прочитано 100010 элементов.
Все это знают. Оптимизация этого: where datetime > lastelement take 10. Но в варианте котором ты описываешь такое условие невозможно выполнить.
Ну, так деревья всё равно хранить нужно же как-то, не так, как не-деревья.
Да. А чтобы ваш вариант заработал, надо дополнительно добавить путь и заполнять его определенным образом. Я это и имел в виду, когда сказал "не так просто".
А пагинация от других сущностей не отличается вообще никак
Пагинация не отличается, а возможность ее применения отличается. Список произвольных сущностей можно вывести постранично через limit/offset, независимо от того, какие поля в них есть, а произвольное дерево нельзя.
Она случилась с первыми выходцами из России, приехавшими жить в Христианию (квартал-коммуна хиппи-анархистов, в одном из районов Копенгагена). Их наняли пилить дрова для общественной бани. И тут произошло столкновение культур. Парни бодро взялись за работу и за три часа перепилили, накололи и сложили в поленницу все имеющиеся в распоряжении доски. После чего поспешили сообщить работодателям об успешно выполненном задании. Однако результатам их труда совершенно не обрадовались, а, наоборот, ужасно разозлились. Из-за плохого знания английского, парни далеко не сразу поняли, в чём же дело. Оказывается, crazy Russians за три часа сделали полуторамесячный объём работ, оставив без заработка не только себя, но и еще десяток коренных жителей. Можно сказать, подорвали экономику страны. Дело в том, что оплата в Христиании почасовая. Это значит, что работать следует не торопясь, без надрыва.
А если без сарказма, то это действительно похвальная работа, наконец-то у хабра появится достойное приложение под мобилки. И чем-то твоя работа даже вдохновляет, аж снова появилась воля к разработке своих никому ненужных игр.
Спасибо за работу. Очень прикольно. Продолжайте развиваться) Интересно увидеть проект на финалочке.
А такой вопрос: а что насчет тем для десктопов? Вот на данный момент пришу с приложения и тут настроек темной темы нет. Или надо открывать этот сайт их хрома (отрывал из под еджа).
SPA он и есть SPA, там по дефолту будет service-worker, который кэширует файлы.Не вижу связи между SPA и service-worker.
Может вместо SPA имели ввиду PWA?
Будет удобный инструмент для написания своих для первых приложений
Как идея для повышения популярности?



Однако, придираться можно вечно, но в целом — отличная работа, учитывая возраст ) Круто, продолжай!
Реализация комментариев радует. И скорость отображения выше, и прокручиваются без рывков.
Рассматривается ли вами переход на Preact? Это даст более маленький бандл и возможные ускорения в работе с DOM. Конечно некоторые фичи там отсутсвтуют, но их убрали потому что ими вроде и так никто не пользуется.
Сам я не разработчик реакт, мне скорее интересно мнение по этой теме если таковое имеется.
Достаточно фронту отдавать плоский список с отступами (уровень вложенности), а на бэке хранить дерево в таблице с материализованными путями — это даст вставку в 1 INSERT (c 1 вложенным SELECT'ом для получения пути и уровны родителя) и выборку всего списка в 1 SELECT с ORDER BY по этому пути, без рекурсии и джоинов таблицы на саму себя.
Хабр, договоритесь с автором на умеренную ставку, и пусть он пилит альтернативный клиент для Хабра в своё удовольствие, сам поддерживает связь с сообществом и т.п.
А вы ему только апишки откройте как надо, чтобы авторизация работала, и всё такое.
Очень уж мне понравился этот клиент! Вообще не охота открывать оригинальную мобильную версию....
Тот случай когда "школьник" уделал весь отдел разработчиков крупного ит ресурса )))
Уже разобрались с проблемой получения токенов, конечно, не тех, что хотелось, но всё равно прогресс в сторону добавления функционала для пользователя идёт.
Пока можно только убирать из ленты авторов и компании. Насчет прочитанных постов уже добавил задачу, а вот что вы имеете ввиду под словом "обширные фильтрации"?
Мой совет, не заморачивайтесь с этим. Для фильтрации по разным параметрам вам фактически надо будет хранить у себя всю базу постов Хабра. Сомневаюсь, что это будет законно. Разве что вам администрация официально разрешит в виде какого-то документа.
Те посты что по ППА оплачены автоматом под CC BY 3.0 и их можно копировать. А за остальные авторы решают но думаю врятли много людей будут против этого.
В то же время поисковики ровно тем же и занимаются не спрашивая никакого разрешения.
Кстати Boomburum вы посты под CC BY 3.0 помечаете как то?
Хм, согласен. Но тут кстати другой интересный вопрос появляется. Текст поста допустим принадлежит автору. А все остальные параметры — рейтинг, хабы, количество комментариев, дата размещения — это же результат размещения на площадке, у автора статьи нет прав на эти данные, он не может ими распоряжаться. А идентификаторы, ники и имена авторов это персональные данные, и если они буду кешироватся в приложении, то это уже хранение персональных данных. В общем я хотел сказать, что это слишком большая работа с неизвестным правовым статусом, и может получиться так, что она будет сделана впустую.
4pda.ru/forum/index.php?showtopic=632943 (темная тема, КПДВ из поста в ленте)
4pda.ru/forum/index.php?showtopic=566249 (портянки текста без картинок в ленте, зато офф приложение)
2. Я правильно понял, что столь быстрая скорость загрузки обеспечивается, в том числе, ещё и полностью выпиленной аналитикой (метрика, гугл, etc)?
Второе, официальное. GeekHabr сейчас вполне неплох, хоть и устарел.
Да, из метрики собираюсь вводить только viewcount или вообще без неё. К тому же, на хабре все аналитики загружаются асинхронно, поэтому не мешают начальной отрисовке приложения.
- Увы, GeekHabr не умеет галереи, gif, контейнеры с видео, спойлеры. Те норм отображает только сразу видимый текст и картинки с mothership "habr".
Три. Лучи добра вам за тёмную тему и норм отображение комментов "из коробки"
Четыре. Ждём авторизацию и порт на андроид=)
Зы. Буквами — тк хабр "чинит" нумерацию на свой лад.
Сидел тут в Adobe XD, наваял вот это:
Кроме редизайна, сейчас пилю и режу авторизацию, уже сейчас можно логиниться и заходить на свою страницу.
Мама, я сделал Хабр