Loading...
Normal, Gallery, Tree

Новостей, фичреквестов и багрепортов тред #7

Шестой: >>12338
Replies: >>16207
Предлагаю сделать так, чтобы треды старше года автоматически помещались в архив. А то висят себе, в них неспешно постят (я в том числе).
Replies: >>14647
Подрефакторил немного шаблон поста, расставил там комменты. Теперь картинку поста можно вставить в любой шаблон одним методом.
Если я придумаю, что делать с формой, можно организовать добавление к одному посту нескольких картинок. Но пока идей нет.
Replies: >>14636
>>14635
Также теперь время смерти треда показывается только в ОП, а не в каждом посте как было раньше. Не вижу смысла дублировать эту информацию.
В ближайшее время собираюсь подрефакторить всё, расставить комментарии и докстроки. Буду делать code harmonization :3
>>14634
Зачем? Чем они тебе мешают? Или, по-твоему, будет лучше, если вместо ушедшего в архив треда расплодятся новые?
Replies: >>14648
>>14647
Или, по-твоему, будет лучше, если вместо ушедшего в архив треда расплодятся новые?
Возможно. У меня нет единого мнения по этому вопросу, поэтому я задаю его здесь. Высказывайте свои proc & cons.
Replies: >>14681
>>14648
Высказывайте свои proc & cons.
Не надо. Некоторые треды живут и развиваются годами и никому это не мешает.
Если тебя так раздражают старые треды, запили /limbo/, откуда можно вернуть старый тред, введя капчу. И чтобы в поиске отображалось "тред попал чистилище"
Replies: >>14682
>>14681
Если тебя так раздражают старые треды, запили /limbo/, откуда можно вернуть старый тред, введя капчу. И чтобы в поиске отображалось "тред попал чистилище"
Это даже для меня слишком извращенно. К тому же лень прикручивать капчу. Пусть остаётся как есть.
Реквестую
Replies: >>14690, >>14692, >>14919
>>14689
Все борды этим дерьмом забили, зачем это здесь?
>>14689
У меня сервер не резиновый, чтобы туда видео складывать.
Replies: >>14919
Предупреждаю. У нас тут появился гадёныш, который вставляет искажённые новости. Банить мне его не хочется, так как формально борда это свободное общение, а никаких законов он не нарушает.
Replies: >>14749, >>61984
>>14748
У нас тут появился гадёныш, который вставляет искажённые новости.
Ой, да ладно. Много ты в жизни видел неискаженных новостей?
Replies: >>14752
>>14749
Гадить-то зачем?
Я там в белой теме когда-то обещал что-то сделать. Не напомните, что именно?
Replies: >>14794, >>14796
>>14791
Отступы в параграфах?
Replies: >>14795, >>14798
>>14794
Так лучше?
Replies: >>14798
>>14791
Фух. Зашёл проверить светлую тему, чуть глаза не вытекли.
Replies: >>14798
Открыл проект и увидел, что рефакторить в общем-то почти нечего. Ну только сделать иерархию режимов просмотра треда, а то там if-else везде, что не есть хорошо.
>>14795
Перед первой строкой (сразу под строкой с датой) нет отступа. И перед ответами нет, например в >>14794
>>14796
И вылезай уже из подвала :)
Replies: >>14799
>>14798
Перед первой строкой (сразу под строкой с датой) нет отступа. И перед ответами нет
Куда что вставить? Давай код.
Replies: >>14800
Replies: >>14801
>>14800
Код давай!
Я так понимаю, надо для .message или чего-то такого добавить марджины?
Replies: >>14802
>>14801
Как в чёрной добавляешь, так и в белую добавь, совсем обленился :P
.message, .refmap { margin-top: .5em; }
например.
Replies: >>14804, >>14806
>>14802
Как в чёрной добавляешь, так и в белую добавь, совсем обленился :P
Кот бы говорил, ни одного пуллреквеста не сделал.
Replies: >>14808
>>14802
Так?
Replies: >>14807
>>14806
Ага.
>>14804
пуллреквесты
не гит
Нет ты.
Replies: >>14809
>>14808
Тулкитофобам тут не рады.
// хотя кого я обманываю, при отсутствии пользователей и такие сойдут
Replies: >>14810
>>14809
гит
Тулкит
Да ты упоролся!
Replies: >>14811
>>14810
Это устоявшийся термин, а наркоман тут ты.
Replies: >>14813
>>14811
Это устоявшийся термин о тулкитах, прекращай принимать эти грибы :3
Replies: >>14814
>>14813
Ну и сиди в своём гите дальше, а я его изучать не собираюсь.
Replies: >>14815
>>14814
Ну извините, изучать каждую левую vcs мне не интересно.
Replies: >>14816
>>14815
Как и мне.
Хотя на самом деле их аж целых 3, можно было бы и изучить.
Replies: >>14817
>>14816
И одной много. Я у гита то знаю всего несколько команд и больше не хочется :3
Replies: >>14818, >>14819
>>14817
Пей пирацетам, помогает при расстройствах памяти и мышления.
Replies: >>14820
>>14817
И я между прочим меркуриал в плане команд знаю почти весь. А вот как он устроен внутри — хз, пока не приходилось интересоваться. Обывателю достаточно коммитить, пуллить и пушить. Ну и я ещё ветки и теги создаю (и то, ветки только на особо ломающий долгострой, когда предполагаю что придётся его на время забросить и снова работать в главной ветке по мелочам).
>>14818
Нежелание ≠ расстройство, няша.
Replies: >>14821
>>14820
Нежелание сделать действие на 5 минут и представление этого как оправдения == расстройство.
Replies: >>14823
>>14821
они не делают как я хочу, наверное это расстройство
Нет ты.
Replies: >>14824
>>14823
Он вообще никак не делает, даже так как я не хочу.
>>14582
Any ideas?
Оказывается, по умолчанию uwsgi умирает по SIGINT, а по SIGTERM (который использует systemd по умолчанию для остановки демона) только мягко перезапускается. Это обещают пофиксить в 2.1
Replies: >>14836
>>14834
по SIGTERM … перезапускается
Кому это в голову могло прийти?
Replies: >>14837, >>14838
>>14836
Они даже опцию сделали специальную die-on-term. Но в доках пишут, что это вызывало недоумения, и они сделали чтобы убивалось.
>>14836
На самом деле SIGRESTART же нету, а про SIGUSR1 они видимо не подумали :3
В ближайшее время планирую заняться дедупликацией картинок, чтобы вместо запрета загружать ту же картинку несколько раз мы просто линковали новый пост с имеющимся файлом. Я уже знаю как это сделать, нужен только часик свободного времени чтобы это накодить.
Также планируется добавить более детальную информацию для тегов: описание (будет добавлять админ для тех тегов, где это имеет смысл), количество тредов и прочее.
// нека
Replies: >>14843
>>14841
Алл хейл дедупликация!
Replies: >>14859
>>14843
Done. Proof:
>>14857>>14858
Replies: >>14861
>>14859
Правда теперь не узнать, что запощен дубль в тред, ну да и ладно :3
Replies: >>14864
>>14861
Так ведь в том и смысл, что этого не нужно узнавать. Система все делает за тебя.
Replies: >>14868
>>14864
Не, в смысле уникальности картинок в пикчетредах. Впрочем, посмотрим, пощупаем.
Replies: >>14869
>>14868
Ну будешь глазками проверять перед постингом :3
>>14689
>>14692
У меня сервер не резиновый, чтобы туда видео складывать.
Лимит в 3-5M и нет проблем.
Replies: >>14920
>>14919
И что это за видео будет?
Replies: >>14931
Отрефакторил вьюху треда, теперь режимы сделаны подклассами. Можно будет на досуге посмотреть в сторону древовидного (хотя бы отображать, без постинга).
Хромиум так загадочно выделяет. Те div'ы, которые я использую вместо разделителей строк, он выделяет как строки. Но если скопировать текст с ними, копируются они как просто перенос строки.
>>14920
И что это за видео будет?
Да много ли тому webm надо
http://webmshare.com/play/YLdDE
Replies: >>14932
>>14931
Не вижу смысла почтить короткие видео. А длинные не влезут. В общем, пока я против. Но если кто сделает пуллреквест, я подумаю.
Replies: >>14999
>>14932
Не вижу смысла почтить короткие видео.
Может ещё и картинки не нужны?
Replies: >>15003
>>14999
Картинки могут быть и большие. В 8 МиБ, которые позволяет борда, можно овер дофига всего поместить.
А что ты поместишь в 8 метров видео? И главное, зачем оно на борде? Вот хоть один пример контента?
http://habrahabr.ru/post/248507/#comment_8236615
Надо тоже подобное написать.
Начал работу над десктопным клиентом на PyQt. Сделал кривоватое отображение списока тредов, пока без скролла и картинок, везде хардкод.
Replies: >>15006
>>15005
Выложу сорцы, когда можно будет хотя бы читать треды и посты (пусть сначала без настроек и тольо с этой борды).
Полужирное выделение текста не работает.
Replies: >>15030, >>15031, >>15035
>>15029
УМВР. Вижу жирность.
>>15029
А, нека в тёмной теме забыл восстановить жирность на strong и прочих подобных вещах после * { font-weight: inherit; }
Replies: >>15035
Хм, после http://cs6.pikabu.ru/post_img/2015/01/24/5/1422080746_150465390.webm я и правда думаю что можно видео складывать. Но тогда надо будет научиться ещё из него вычленять превьюшку.
Replies: >>15055
Вот здесь без превьюшек реализовано
https://podricing.org/tags/webm
Replies: >>15052
>>15051
А браузер не будет грузить видео, пока ты на него не клацнул?
Алсо, сейчас например у нас на странице показывается превьюшка, а по клику открывается попап с полноразмерной картинкой. Логично сделать так же для видео — на странице превью, при клике открываем видео попапом (только как его закрывать, если клик == пауза?).
Replies: >>15053, >>15057
>>15052
значит нужно с кнопочками делать, чтобы по клику закрывался, а пауза при явном нажатии на паузу.
Replies: >>15054
>>15053
Как-то неинтуитивно.
>>15049
В общем, я над этим подумаю. Как только найду способ сделать это красиво и удобно, постараюсь сделать.
>>15052
Вспомни разговор про <audio>. В <video> вся эта хрень тоже есть.
Replies: >>15058
>>15057
Вспомни разговор про <audio>.
нимагу
Replies: >>15059
>>15058
Он был на борде же. Ищи.
Replies: >>15060
>>15059
Так а что именно искать? Как тег вставить я понимаю, я не понимаю как это сделать красиво и с превью.
Replies: >>15061
Replies: >>15062
>>15061
И как это отвечает на вопрос, как сделать красиво и удобно?
Replies: >>15063
>>15062
Это даёт тебе информацию как сделать. Красиво сам придумаешь.
Replies: >>15064
>>15063
Сделать это как раз не проблема. Проблема понять, как именно сделать.
Вопрос двухпанельного режима тут поднимался?
Replies: >>15067, >>15068
>>15066
Нет, это как?
>>15066
Чтобы треды в две колонки отображались.
Replies: >>15069
>>15068
Нафига? Два треда сразу читать?
Начал работу над загрузкой картинок по ссылке. Делаться это будет на сервере. Как будет в интерфейсе выглядеть этот выбор, пока не знаю. Скорее всего добавится новое поле в полную форму и можно будет либо загрузить картинку как сейчас, либо ввести урл.
Вся сложность состоит в генерации файла картинки, определении расширения и размера, валидации пикчи.
Replies: >>15093
>>15092
Медленный сервер и 100-метровый файл товарищу :3
>>15093
А что мешает сейчас 100-метровый файл загрузить?
>>15093
Я хотел бы обойтись реализацией на JS, но не нахожу похожих примеров.
>>15093
А дай-ка ссылку на супербольшой файл, хочу проверить что будет.
Replies: >>15152
>>15093
Пока я делаю так: сначала отправляю запрос HEAD и спрашиваю content-type и content-length. Если размер подходящий и типа картинка, то делаю уже GET и загружаю. Этого недостаточно и злоумышленник может сформировать сервер-врунишку?
Ну, у кого есть conserns по поводу загрузки картинки на сервере по урлу?
>>15096
http://imgsrc.hubblesite.org/hu/db/images/hs-2015-02-a-full_jpg.jpg — достаточно большой (200 мб)?
Replies: >>15153
>>15152
Достаточно, щас попробую.
Replies: >>15154
>>15153
И работает, и нет. При попытке создать тред пишет ошибку валидации, всё верно. А вот при отправке в тред ошибки не пишет, но и форму не обнуляет. Наверное где-то в коде формы накосячил, что ошибка не туда добавляется.
Replies: >>15156
>>15154
Во, теперь сделал чуть красивее. Ещё потыкаю немножко, подрефакторю, и буду наверное заливать.
Если конечно нет других caveats.
Replies: >>15164
>>15156
Добавлено.
Нашёл один недостаток загрузок картинок по урлу: сервер с картинками может забанить борду, если подумает, что это ддос.
Кто работал с докером? Насколько он жруч и что стоит почитать кроме манов по установке?
Удалил лишнюю связь между тредом и его ответами. Достаточно того, что каждый пост знает свой тред.
Replies: >>15179
>>15177
Также поправил создание тредов, которое было сломано после сабжа из-за кривых импортов между модулями поста и треда.
Ня?
Я придумал, как сделать древовидный режим. Каждому посту назначаем линейный номер в текущем уровне иерархии. Когда отвечаем на пост, добавляем к его уровню ещё один.
Например, у нас пост 1. На него отвечает 1.1. Дальше на 1 отвечает ещё 1.2, и так далее.
Когда хотим это всё отобразить, фильтруем по этим уровням и рисуем подряд, с отступом равным количеству точек в номере.
Тут только непонятно, что делать с постами, которые отвечают сразу на несколько постов. Наверное, этих порядковых номеров может быть много. Вот только делать отдельную модель "многие ко многим" это уже как-то слишком, а если просто писать в строку, то затратно потом делать выборку.
У кого какие идеи?
Ещё есть идея сделать режим галереи всей борды, где картинкам будут присвоены теги тредов, в которых они оказались.
Но это слишком времязатратно, так что позже.
На ЛОР'е ссылочки с https://ru.wikipedia.org/wiki/Лор автоматически преобразовываются в нормальные (т.е. https://ru.wikipedia.org/wiki/%D0%9B%D0%BE%D1%80 –> https://ru.wikipedia.org/wiki/Лор). Предлагаю запилить то же самое на небордочке.
Replies: >>15239, >>15240, >>15242
>>15238
А как?
Найди в сорцах лора алгоритм, тогда попробуем. Ну или готовый пример на питоне.
// хотя можно просто настроить браузер, чтобы он нормально копировал
>>15238
Аррг, вместо первой ссылки должна была быть http://en.wikipedia.org/wiki/Percent-encoding, сорри.
>>15238
Проверяй, должно заработать.
Добавил немного инфы о теге, если открыть его страницу.
Подфиксил загрузку изображений, теперь они загружаются порциями по 100 кб и проверяется, что картинка не больше чем заявлено. Единственный способ подвесить сервер это подсунуть ему очень медленный сервер картинок, так как обрывание загрузки по таймауту пока не реализовано.
P.S. Если когда-нибудь подсунете с виду валидную ссылку, но ответ будет "неверный url", кидайте ссылку сюда, чтобы я проверил, в чём причина. Загрузчик пока сыроват, как и система логгирования ошибок.
Replies: >>15629
Просьба с joyreactor картинки заливать вручную, а не вставкой ссылки. Они как-то детектят, что это делается через сайт, и добавляют свою плашку.
Завтра борда какое-то время (а может и весь день) не будет работать. Не пугайтесь.
It's good to be back!
Replies: >>15347, >>15467
>>15346
Подтвердите плз кто-нибудь, что борда доступна. Я днс обновил, но этого может быть недостаточно…
нормуль. давай поддержку видео.
Replies: >>15349
>>15348
Не, я и так много фич за этот месяц напилил. Теперь буду месяц рефакторить :P
У нас снова кандидат на забан.
Replies: >>15380
>>15378
Done.
Replies: >>15385
>>15380
Сделано-ружьёсделано?
Почему дерево – зло:
При активном постинге все просто продолжают первую ветку, потому что до следующей ещё нужно домотать.
http://4pda.ru/2015/02/01/199774/
Replies: >>15426, >>15428
>>15425
до следующей ещё нужно домотать
Они сворачиваются и разворачиваются. А учитывая ограничения на размер треда, прочитать его полностью не составляет труда.
>>15425
И да, при чём тут ссылка?
Replies: >>15435
>>15428
Там в комментах такое, довольно часто для этого сайта. На опеннете тоже случается нередко.
Replies: >>15436
>>15435
Нормальные комменты, только проблема с максимальной вложенностью остаётся. На пикабу пытались её решить, но получилось вырвиглазное нечто.
Компактная форма показалась мне ненужной, поэтому убрал. С ней и так много проблем.
Replies: >>15453, >>15454
>>15451
Правда теперь неудобно следить за обновлениями треда. Надо подумать, что бы ещё такого сделать с этой формой, чтобы она не занимала весь экран.
>>15451
Алилуйя!
Replies: >>15455
>>15454
Вот не надо тут восхваления всяких НЁХ использовать.
Replies: >>15457
>>15455
Чому бы на НЁХ-борде не… Тогда поблагодарим Оккама, он тут в тему :3
Replies: >>15458
>>15457
Благодарности для нытиков, которые ждут одобрения!
Replies: >>15459
>>15458
You lost me.
Replies: >>15460
>>15459
We're all lost here for a reason.
>>15346
Я уж было подумал, что Неку мобилизировали.
Replies: >>15468
>>15467
Я бы предупредил. Перед мобилизацией дают повестку, и вызов вряд ли на тот же день.
Разреши ридонли для забаненных.
Replies: >>15477
>>15475
Для кого конкретно? Ридонли выключен только для тех, кого забанило автоматом. Скажи IP, и я сделаю Рид или разбаню.
Если у меня блоки располагаются так:
.post-preview > .post-info > .moderator-info
то как прописать последнему атрибут? По .post-preview > .moderator-info не работает.
И да, как предпочтительнее называть классы? С дефисом или подчёркиванием? А то у меня как-то вразброс, надо унифицировать бы.
Replies: >>15489
>>15488
CamelCase?
Replies: >>15490
>>15489
Да ну, нигде такого не видел.
Replies: >>15492
>>15490
Ну тогда подчеркивания как-то логичнее выглядят
Replies: >>15493
>>15492
А я нагуглил, что обычно используют дефисы. Но "официального соглашения" пока не нашёл.
Replies: >>15494
>>15493
Хз, что там обычно используют, я не верстальщик. Просто подчеркивания в коде активно юзают еще со времен изобретения C и не жалуются.
Replies: >>15496
Кстати, почему бы не выпилить кнопку "Вверх" из футера и не зафиксироваиь ее в каком-нибудь углу экрана?
Replies: >>15497
>>15494
Я обычно использую заглавные буквы.
Напр. .superCoolClass
>>15495
Предложи, как это должно выглядеть.
Replies: >>15499
Как доберусь до пк
>>15497
Вот как-то так
Replies: >>15500, >>15502
>>15499
Попробуем.
Replies: >>15501
>>15500
Я сделаю стиль только в тёмной теме, остальные при желании можете апдейтить сами и присылать варианты.
Replies: >>15503
>>15499
Так лучше?
Replies: >>15504
>>15501
А что там апдейтить? В светлой теме только фон перекрасить и тень добавить, в светло-оранжевой обводку бордером подкрасить темно-серым и все.
Replies: >>15505
>>15502
Как-то уж слишком все прямоугольно здесь, но сойдет
Replies: >>15505
>>15504
Вся тёмная тема заточена на прямоугольность. Хочешь круглую — пили единый стиль.
>>15503
А это уже мейнтейнерам тем решать. Пока там останется без фиксированной позиции, специально для ретроградов.
Кстати насчёт кнопочки, у меня была задумка сделать там целую панельку с разными кнопками типа "вверх", "вниз", процентиков и прочего. Ещё можно реализовать по наведению мышки :3
Replies: >>15507
>>15506
Вот да, тоже хотел предложить еще и кнопку "Вниз" туда впилить для длинных тредов
Replies: >>15508
>>15507
Только интересно, зачем она. Вверх нужно двигаться на телефоне, чтобы попасть к ссылкам на теги и на главную. А вниз нафига? Если ты хочешь ответить на какой-то пост в треде, достаточно на его id клацнуть, тебе вставит ссылку и перебросит к форме.
Replies: >>15509
>>15508
Хм, может тогда вообще убрать кнопку "Вверх" и зафиксировать сам хедер у верхней границы экрана?
Replies: >>15510
>>15509
Это плохая идея, потому что на телефоне хедер может быть в несколько строк из-за тегов.
Replies: >>15511
>>15510
Вроде нормально все. 480х320
Replies: >>15512
>>15511
У тебя ни одного избранного тега. Вот так оно выглядит у меня:
Replies: >>15513
>>15512
Да, кривовато. Мог бы подкинуть идею для решения и этой проблемы, но чувствую уже всех задолбал
Replies: >>15514
>>15513
Тут никого нет кроме нас, так что подкидывай :3
Replies: >>15515
>>15514
Для маленьких экранов заменить теги на кнопку, разворачивающую спойлер (или что-то вроде него) с тегами под хедером.
Replies: >>15516
>>15515
Т. е. как бы выпадающее меню с тегами
Replies: >>15517, >>38086
>>15516
Слишком извращённо, я не сторонник наворачивать скрипты.
Replies: >>15518
>>15517
А что там наворачивать? Одна булева переменная да скрипт для управления свойством CSS
Replies: >>15519
>>15518
Как будет выпадающее меню выглядеть?
Replies: >>15520, >>15521
>>15519
Сейчас подумаю что можно сотворить
>>15519
Можно так, можно растянуть на весь экран, можно отцентрировать и добавить отступы слева и справа
Replies: >>15522
>>15521
Мне не нравится, что надо вручную на js ловить размер экрана и делать разную логику для разных размеров. Я изначально пытался этого избежать.
Replies: >>15523
>>15522
Зачем на JS? Есть же @ в CSS
Replies: >>15524
>>15523
Ну допустим. Если запилишь интересный вариант, я подумаю, можно ли его применить и как. Пуллреквесты are welcome.
Replies: >>15525
>>15524
Допустим у нас есть текущий список тегов в хедере (абстрактно обзовем его класс .desktop-tags) и второй список тегов в виде заранее сверстанного фрагмента-блока (как я показал на скрине выше. Назовем его .mobile-tags). Дальше такая лабуда в CSS.
@media handheld {
.desktop-tags {display: none;}
.mobile-tags {display: inherit;}
}
@media screen {
.desktop-tags {display: inherit;}
.mobile-tags {display: none;}
}
Либо подобная логика, но по разрешениям экрана
Replies: >>15527
>>15525
Ну это я понял. Мне бы готовый вариант этих двух списков, и шоб было красиво :3
Replies: >>15528
>>15527
В голос. Просто в голос.
Replies: >>15531
>>15528
Не поверишь, самое сложное в вёрстке это расположить красиво, удобно и оптимально элементы. Технически можно реализовать что угодно.
Replies: >>15533
>>15531
Поверю. Сам перешел с верстки на нормальный код именно из за этого.
Replies: >>15535
>>15533
перешел с верстки на нормальный код
Щито?!
Replies: >>15536
>>15535
Ну я имел в виду что перестал заниматься именно сетевой лабудой (html, css) и занялся обычным программированием java.
Replies: >>15537
>>15536
Я тоже начал десктопный клиент для борды писать, чтоб был Qt вместо этой мерзкой вёрстки. Но вряд ли скоро будет время им заниматься…
Replies: >>15538
>>15537
Вот не поверишь, но тоже проскакивала мысль запилить себе под ведроид что-то вроде клиента чтоб не ползать постоянно в браузер, который тормозит в плане отрисовки страниц. Посты вроде как post-запросом отправляются, так-что после прикручивания списка тредов и постов можно было бы и отправку новых постов прикрутить
Replies: >>15539
>>15538
Клиент хорош ещё тем, что он может кэшировать ответы.
Под ведроид я давно уже начинал клиент писать, и он даже возможно ещё работает (апи ведь не ломалось).
Replies: >>15540
>>15539
Так еще и API есть? Я-то уже собирался связку DOMParser и Jsoup гонять.
Replies: >>15541
>>15540
Есть, но неполное. Заголовки, тексты постов, пикчи можно получить. Теги — не факт, не могу сходу вспомнить. Дифф — тоже не факт, но по-моему можно.
Replies: >>15542
>>15541
Даже на самом деле есть два вида API. Одно клиентское, оно почти с самого начала есть. Другое для синхронизации, оно есть в отдельной ветке репозитория. Там можно запрашивать посты с уникальными ключами и подписанные, чтобы разные сервера могли синхронизироваться между собой и обмениваться постами в один и тот же тред.
Кстати, ещё клиентское апи не умеет показывать, находится ли тред в бамплимите или архиве. Потому что эти два флага были добавлены позже, чем апи создавалось.
Replies: >>15543, >>15546
>>15542
А в каком формате там данные возвращаются? JSON? XML?
Replies: >>15544, >>15545
>>15543
json
>>15542
клиентское апи не умеет показывать, находится ли тред в бамплимите или архиве
Добавил, раз такое дело.
Replies: >>15547
>>15546
Это то, что параметр bumpable?
Replies: >>15548
>>15547
bumpable — можно бампать. archived — в архиве, нельзя в него писать.
Ну понеслась. Правда ничего не обещаю пока.
Replies: >>15552, >>15659
>>15551
Не вырывай мне глаза, вынеси "нет такой страницы" в strings.xml, а магические числа и ссылки в константы.
Replies: >>15553, >>15554
>>15552
Это прототип же. Успеется.
>>15552
Кстати, почему сервер в ответ на запрос несуществующей страницы постов отдает не 404 а 500?
Replies: >>15555
>>15554
В каком смысле несуществующей страницы постов?
Replies: >>15556
>>15555
Ну вот их сейчас 47 штук. Если я запрашиваю несуществующую 49, то вылетает внутренняя ошибка 500
http://neboard.me/page/49/
Replies: >>15557, >>15561
>>15556
Хе, это баг. Я где-то не ловлю эксепшен пагинатора. Как буду у компа, поправлю.
Replies: >>15558
>>15557
Не надо, по этому делу именно и определяю существует ли страница. Пусть хотя бы 404 возвращает, если править будешь.
Replies: >>15559
>>15558
Зачем тебе проверять количество страниц ТАК, когда есть апи? Просто загружай по 10 тредов например, с оффсетом. Когда вернуло меньше 10 или вообще пустой список, треды кончились.
>>15556
Сделал 404.
Ща как раз юниттестов накатаю на апи.
Делаю поддержку "один пост в несколько тредов". Пока только на уровне моделей, само соединение с другими тредами сделаю позже. Надо разобраться, где используется метод get_thread() у поста и как бы его поэлегантнее заменить на get_threads().
Replies: >>15581, >>15583, >>15584
>>15580
Если у кого есть мысли, что это может сломать, то говорите сейчас.
>>15580
Ковыряю сейчас на тестовом сервере. Теперь если ты отвечаешь на мультитредовый пост, твой ответ тоже будет мультитредовым, чтобы цепочку беседы было видно везде целостно. Максимум извращений!
Остаётся вопрос с тем, как определять "основной" тред, например при проверке, является ли пост ОП,
Replies: >>15594
>>15580
Зачем писать один и тот же пост в несколько тредов сразу?
Replies: >>15585
>>15584
Ну например у тебя есть картинка которая подходит и для юри, и для жаббера. Или новость про отношения между Россией и Украиной, а для каждой страны свой тред.
Кнопка "Вверх" ущербна.
Replies: >>15588
>>15587
А как бы ты её сделал, ущербный ты наш?
Replies: >>15592
>>15588
Никак. Для этого на клавиатуре есть кнопка Home.
Replies: >>15593
>>15592
А если у тебя нет клавиатуры?
Replies: >>15595, >>15601
>>15583
Остаётся вопрос с тем, как определять "основной" тред, например при проверке, является ли пост ОП
Пришлось делать отдельным полем. Иначе эту инфу никак не выцепишь.
Как это работает сейчас. Ты пишешь в каком-то треде пост и вставляешь в него ссылки на другие посты. Если хоть один из них в другом треде, этот тред цепляется к новому посту. В каждом треде видно посты, связанные с ним. В остальном пост как бы связан со "своим" тредом, в который его писали: по нему он проверяет, является ли он ОП, и всё такое прочее.
Спрашивайте свои ответы.
Replies: >>15604
>>15593
А если мышки тоже нет?
Replies: >>15596
>>15595
Если нет клавиатуры и мышки - есть тачскрин или какой-нибудь трекпад/джойстик
>>15593
Жесты мышью.
Replies: >>15602, >>15603
>>15601
Или плагин для браузера, добавляющий эту ущербную кнопку всюду.
>>15601
У меня на десктопе жесты есть, а на телефоне нужна кнопка. Плагинов там тоже нет. Да и браузеров нормальных тоже.
>>15594
А что происходит с ответами на такой "множественный" пост? Они дублируются?
Replies: >>15605
>>15604
Никто не дублируется. Просто у поста есть ссылки на все треды, в которые он отписан. При ответе на множественный пост его ответы тоже становятся множественными, но физически и визуально (посмотри на ссылку, которая на id в скобочках) это один пост.
Replies: >>15606
>>15605
Понятно, спасибо.
Добавил во множественные посты ID треда (а точнее ОП) к ID поста. Так будет видно, в каком треде он создан изначально.
Когда можно будет пощупать множественность?
Replies: >>15618
>>15616
Уже. Просто вставляешь ссылку на другой тред, например вот так: >>7341
Replies: >>15621
>>15618
Крутотень!
Replies: >>15622
>>15621
Пока есть минус в том, что состояние bumpable/archived выставляется по разному в зависимости от того, получил ты пост при обновлении треда или при открытии его. Если ты открыл тред, то у всех постов будет одинаковый фоновый цвет. А если пост тебе прилетел как обновление, цвет его будет такой, как у его основного треда.
Replies: >>15629, >>15631, >>15648
>>15628
Посмотрю, когда буду дома. Пока нет идей, в чём может быть проблема.
Replies: >>15655
>>15628
Написано же «неверный». Обрати в веру или удали.
>>15631
Fixed. Какого-то там в content-type кроме самого типа ещё прописано "image/jpeg; charset=UTF-8".
>>15551
Ну что там?
Добавил констрейнт на уникальность для имени тега. Теперь не получится в админке создать такой же тег случайно.
Также добавил индекс на поле required для тега, что должно ускорить сортировку тегов в списке.
Поправил ссылки на множественные посты, также чуть ускорил загрузку треда.
В >>383 что-то странное с порядком сообщений.
Replies: >>15698, >>15699, >>15702
>>15697
Пост про i2pd выше поста про мозиллу, точно так же как и ответ на пост о мозилле выше самого поста.
>>15697
Или неправильный порядок только в отображении треда на главной? Я запутался.
Replies: >>15700
>>15697
Это я хотел оптимизировать доставание последних постов из базы, но не учёл что при этом их порядок меняется.
Как добавлять svg-картинки на страницу? Просто в <img>? И да, все ли браузеры их поддерживают?
Replies: >>15827
>>15749
Просто в <img/>, если у тебя нет каких-либо других причин не делать так. Так то можно и в фон, и встраивать инлайном. Современные браузеры должны уметь, но тут надо аккуратно. Можно мерцающую анимацию вставить, например, впрочем, в гифе тоже можно. Там ещё и скрипты могут быть, их лучше не допускать с неподконтрольных источников.
http://caniuse.com/#feat=svg
Replies: >>15828
>>15827
Круто. Я всё хочу иконочки для количества сообщений и картинок запилить.
Replies: >>15829
>>15828
Ну и, собственно, добавлю, что у img есть текстовый «фэллбек» в виде атрибута alt.
Возможно стоит ограничить размер загружаемых по ссылке изображений до 1-2 МиБ. Я сейчас загружал картинку размером 3 МиБ, шло несколько секунд.
Имеет ли смысл делать "анонимные уведомления для юзеров"? Я это предполагаю так: любой юзер может подписаться на имя, по которому к нему должны обращаться. Например, "username". В постах юзеры могут писать "@username", и этот пост будет добавляться в уведомления. Когда юзер заходит и сообщает серверу что его имя такое-то, он видит новые уведомления. При этом он остаётся анонимным (кто угодно может подписаться на какое угодно имя), но его могут позвать в любой тред.
Replies: >>15980, >>15981, >>16037
>>15979
IMHO, годная идея.
>>15979
Минус в том, что нужно проверять количество уведомлений с каждым открытием страницы. Ну или кэшировать на N минут.
Replies: >>16001
>>16000
Таки не просрали.
Replies: >>16002
>>16001
Могём!
>>15979
Пока выглядит так, циферки вверху.
@mordred, тебе какого вида сделать ссылки кастов типа "@modred" в белой теме? В тёмной я делаю белое штрихованное подчёркивание, например.
Replies: >>16062, >>16064
>>16061
Текущий вариант вот такой.
Replies: >>16063
>>16062
Хотя пожалуй общее количество уведомлений не нужно, только количество новых…
>>16061
Попробуй это:
padding: 0.2em .5ex;
background: #008;
color: #FFF;
Replies: >>16065, >>16066
>>16064
А,
display: inline-block
ещё.
Replies: >>16066
>>16064
>>16065
Сойдёт?
Replies: >>16069
>>16066
Нормально, но подчёркивание неплохо бы убрать.
Replies: >>16070
>>16069
Сестра, код!
Replies: >>16073
>>16070
Ты же сам его поставил где-то, вот и убери :3 У тебя это ссылка или что?
text-decoration: none;
Replies: >>16074, >>16076
>>16073
Ссылка. Атрибут добавлю.
>>16073
Done. Больше пожеланий нет?
Replies: >>16077
>>16076
Пока нет. Попользуем, там и видно будет.
Replies: >>16078
>>16077
Тогда делаю бэкап и накатываю изменения на сервер.
Такс, щас затестим. @neko, уведомления работают.
Если кто на какое-то имя подпишется, скажите, как вас кастовать.
Replies: >>16081, >>16097
>>16080
Тест.
@mordred
Replies: >>16082
>>16081
Ты смотри, работает.
Replies: >>16083
>>16082
И с малиновым вкусом без регистрации и смс!
@neko , добавь уведомления в апишечку, только хотел альфу ридера вбросить, а тут новые функции без которых некошерно
Replies: >>16087, >>16092
>>16086
Не сегодня, я уже достаточно накодил и устал :3
В течение недели или двух постараюсь сделать. Это будет вида /api/notifications?username=<user>[&last=<id>], где id это номер последнего просмотренного поста-уведомления (так оно сейчас работает, юзер хранит в сессии инфу о том что он просмотрел последним, и мы исходим из того что айди постов инкрементальны).
Replies: >>16088
>>16087
значит вброс откладывается на неделю или две + 2-4 дня
Replies: >>16089
>>16088
Что тебе мешает вбросить альфу сейчас, а потом уже добавлять новые фичи?
Replies: >>16090
>>16089
1. Я еще не прогнал тесты (я их еще даже не написал, если по существу)
2. Он еще не умеет постить в треды, но это дело 5 минут
Replies: >>16091
>>16090
Давай-давай, показывай :3
Replies: >>16165
>>16086
Ридер хоть под какую платформу?
Replies: >>16096
>>16092
Ведроид, можно адаптировать под десктоп. Ну или даже под остальные платформы юзая Codename One, но как-то я им не верю и читать их доки лень.
Replies: >>16102
>>16097
Это кто?
Replies: >>16105
>>16102
Это renxi, очевидно же.
Replies: >>16108
>>16105
Чем знаменит и когда его нужно звать?
Replies: >>16109
>>16108
Пока не знаю, да и поля для вставки имени пользователя у нас нет в постах :3
Replies: >>16111
>>16109
поля для вставки имени пользователя у нас нет в постах
По традиции для этого используют заголовок.
А напомните, апи в каком виде возвращает текст постов? По-моему там отрендеренный html, но на самом деле логичнее было бы возвращать сырой bbcode, а клиент уже пусть рендерит его как хочет.
@sorrymak, а почему ты не говоришь, что дизайн кастов ущербен?
Replies: >>16117
>>16116
Он, внезапно, не ущербен. Мне нравится.
Replies: >>16118
>>16117
Странно. Кнопка "вверх" сделана в том же стиле, но она ущербна.
Replies: >>16119
>>16118
У кнопки вверх чёрный фон и голубой текст, а у кастов синий фон и белый текст. Они разные.
Replies: >>16120
>>16119
Я думал, тебе не нравится стиль "прямоугольное в рамке", а не цвета.
Предлагаю добавить на верхнюю панель кнопку для сброса уведомлений. Я могу увидеть каст себя в основной ленте, но мне приходится переходить на страницу уведомлений, чтобы упоминание об уведомлениях исчезло (т.е. == "0 уведомлений"). Нехорошо.
Replies: >>16122
>>16121
А переход на страницу уведомлений это не кнопка сброса? Или ты предлагаешь аяксовую кнопку, которая сбросит без обновления страницы? Это будет выглядеть ущербно.
Replies: >>16123, >>16124
>>16122
Но можно сделать например по клику попап со список уведомлений, чтобы вместо перехода было открытие внутри страницы. Только мне лееень…
>>16122
Или ты предлагаешь аяксовую кнопку, которая сбросит без обновления страницы?
this. Я всегда был против аякса во всех его проявлениях, но здесь он будет реально полезен.
Replies: >>16125
>>16124
Придумай, как это можно сделать красиво.
Replies: >>16126
>>16125
Поставь кнопку и сделай ожагз POST-запрос по клику.
Replies: >>16127
>>16126
Вот я и спрашиваю, как красиво поставить кнопку?
Replies: >>16128, >>16129
>>16127
Это был другой анонимус.
>>16127
Найни с простого:
<button class="reset-notify">сбросить</button>
.reset-notify {
border: none;
background: #DDD;
color: #000;
border-radius: 2px;
padding: 2px 4px;
}
А там посмотришь.
Replies: >>16130
>>16129
button type="button" даже. Хотя если там снаружи формы нет, то пофиг. По дефолту просто button типа сабмит.
Replies: >>16132
>>16130
Почему кнопка а не ссылка например? Всё равно же клик жабаскриптом обрабатывать.
Replies: >>16133
>>16132
Потому что ссылка это ссылка, а у тебя ссылки нет. Если хочешь, чтобы кнопка выглядела как ссылка, можно убрать фон и сделать подчёркивание, но давай лучше не будем превращать UI в говно. Переход — ссылка. Действие без перехода — кнопка.
Replies: >>16134
>>16133
Потому что ссылка это ссылка, а у тебя ссылки нет.
И? Какая юзеру разница, как там оно внутри выглядит?
Переход — ссылка. Действие без перехода — кнопка.
У нас есть кнопкоссылка "вверх" например.
Replies: >>16135
>>16134
Разница в том, что элементы пользовательского интерфейса имеют определённые соглашения.
У нас есть кнопкоссылка "вверх" например.
И это плохо :} Но поскольку там живая ссылка есть, которая приведёт к подобному же эффекту, то пойдёт.
Replies: >>16139
>>16135
И это плохо :}
Чем?
>>16091
Смотри
Replies: >>16166
>>16165
Выглядит слабовато, но возможно там внутре крутая архитектура? :3
У меня на самом деле где-то есть сорцы ведроид-ридера в моём и не только исполнении, но я там чего-то намудрил с кэшированием, и забил на этом. Завтра поищу, они на работе остались.
Replies: >>16167, >>16174
>>16166
Альфа же - сначала отладить до конца надо а потом уже функции навешивать.
Replies: >>16168
>>16167
А, стоп. Это же только заголовки без текста. Возможно поэтому и выглядит слабовато. Есть скрин с текстом поста?
Replies: >>16169
>>16168
Что конкретно ты имеешь в виду под "С текстом поста"?
Replies: >>16170
>>16169
На твоей картинке видно заголовки, номера тредов с картинки. А текст?
Replies: >>16171
>>16170
Текст по клику отдельным окном
Replies: >>16172, >>16173
>>16171
со всеми постами треда вместе. Как на сайте.
>>16171
Покажи.
>>16166
Архитектура простая, и расширяемая. Для начала подойдет.
Replies: >>16175
>>16174
А какое убер-предназначение генерить кучу потоков и складывать их в список?
Replies: >>16176, >>16178
>>16175
Причем тут потоки? Это треды. Названия классов просто совпадают.
Replies: >>16177
>>16176
А, вот оно что…
Replies: >>16179
Replies: >>16179
>>16177
А не проще ли класть в список сами json объекты, а уже в ListView при отрисовке их парсить? Может ты н>>16178
Тебе кстати previewLink не особо нужен, ты можешь грузить полную картинку и потом масштабировать.
Replies: >>16180, >>16181, >>16182
>>16179
Сорри, случайно вставил строку которую уже удалил. Первую строку можно развидеть :3
>>16179
На счет превью линков спорно - с ними меньше расход траффика, без них больше нагрузка на девайс (5 потоков с повышенным приоритетом одновременно будут обжимать графику)
>>16179
Нет, не проще. С обьектами работать удобнее чем с json
Replies: >>16183
>>16182
Я другое имел в виду. Можно достать объекты из json заранее для всех тредов, а можно по мере отображения в onBindView. Но я уже понял, что это неправильно.
Replies: >>16184
>>16183
Именно при подобных подходах юзеры орут что-то вроде "Мама, купи айфон, этот галакси с 800 лагает"
Replies: >>16185
>>16184
Как раз ListView придуман для того, чтобы не лагало. Чтобы расчитывать только то, что ты хочешь увидеть.
Но конкретно треды лучше доставать заранее и кэшировать.
Replies: >>16186
>>16185
ListView с этим не справляется при кривых руках.
У RecyclerView с этим ситуация лучше.
Replies: >>16187
>>16186
У RecyclerView с этим ситуация лучше.
Что там изменилось кроме того что заставили использовать ViewHolder?
Replies: >>16188
>>16187
Сорцы не смотрел, но имхо скролл там поплавнее. ViewHolder и без того всегда использую - от утечек памяти спасает.
Replies: >>16189
>>16188
ViewHolder и без того всегда использую - от утечек памяти спасает.
Каким образом спасает? Если ты достаёшь вью каждый раз в onView (или как его там, я уже забыл), то утекать некому – объекты уничтожаются когда надо. А в холдере они могут висеть сколько угодно.
Replies: >>16190
>>16189
Холдер тоже уничтожается после отработки адаптера. А вот доставать вьюхи каждый раз == лагать из за findViewById.
Лучше холдера, наверное, будет только собирать вьюху кодом без инфлейтеров и разметок, но это мазохизм.
Replies: >>16191
Надо для клиентов наверное отдельный тред завести…
>>16190
Холдер тоже уничтожается после отработки адаптера.
Но адаптер работает, пока виден лист.
А вот доставать вьюхи каждый раз == лагать из за findViewById.
Я про утечки спрашивал, а не про лаги.
Replies: >>16192
>>16191
Но адаптер работает, пока виден лист.
Адаптер работает только при прокрутка листа. Все остальное время он не используется. В такие моменты я просто сбрасываю холдер.
Replies: >>16193
>>16192
В такие моменты я просто сбрасываю холдер.
Как?
Replies: >>16194
>>16193
У меня есть метод для этого, что-то вроде holder = null; System.gc();
Это происходит из onScrollListener. Там же создаётся новый холдер при старте прокрутки и передаётся в адаптер.
Replies: >>16195
>>16194
holder = null; System.gc();
Да ты бог хардкода!
Replies: >>16196
>>16195
Ну не запариваться с рефлекшеном же ради этого. Мазохизмом попахивает.
Replies: >>16197
>>16196
Я к тому, что нужно ограничиваться документированным API, а не такими хаками. Обнулять холдер, который предназначен для долгосрочного хранения данных, это вообще жесть.
Replies: >>16198
>>16197
Ну тут по ситуации. Либо мы хранимых нужные данные долго и отжираем память, либо мы выбрасываемых их когда они не нужны и достаем снова только когда нужны. С картинками в списках ведь то же самое и никто не жалуется.
Replies: >>16199
>>16198
Либо мы хранимых нужные данные долго и отжираем память, либо мы выбрасываемых их когда они не нужны и достаем снова только когда нужны. С картинками в списках ведь то же самое и никто не жалуется.
И где это картинки в списках убивают с вызовом GC? Если у тебя есть какие-то тяжёлые данные и ты боишься, что они расходуют много памяти, то используй LruCache. Код должен быть красивым, а не чередой хаков, костылей и подпорок для оптимизации, которые разнятся от версии к версии и отваливаются с каждым изменением.
Replies: >>16200
>>16199
С LRU часть данных все равно будет исчезать и их нужно будет подгружать снова. Опять лишние вызовы findViewById/addView
Replies: >>16201
>>16200
А когда ты делаешь holder=null никто не исчезает?
Replies: >>16202
>>16201
Оно возвращается при прокрутке списка
Replies: >>16203
>>16202
Откуда возвращается, если ты потерял ссылку, да ещё сборщик мусора прогнал сверху?
Replies: >>16204, >>16205
>>16203
Из Activity. Обьект адаптера и все его данные лежат в ней и загружаются в сам адаптер только при прогоне getView а после него выгружаются оттуда. Т. е. все данные для холдера собираются в самой активити и готовый холдер устанавливается в адаптер отдельным методом в начале getView. Эдакое fifo получается иипамяти не много уходит. Правда в тяжелых списках я это никогда не гонял.
Вышло что-то такое
ViewHolder holder = new ViewHolder();
holder.mainView = inflateListItem();
adapter.setHolder(holder);
>>16203
Ты ведь понимаешь что я подразумеваю и по какому принципу реализую?
Replies: >>16206
>>16205
Нет. Даже пытаться не буду, лучше подожду пока ты выложишь сорцы и посмотрю сам.
Replies: >>16208
>>16206
В сорцах этого не будет. Эта модель для больших списков с большим обьемом данных.
Попробую пояснить.
В Activity у нас грубо говоря есть таблица (HashMap<int, CustomViewGroup> например)
В ней храняться вьюхи отдельных элементов списка уже готовые к установке в список, размер таблицы = размеру списка. Вьюхи храняться там не все сразу, дабы не занимать память, а только n±3 или n±4 штуки где n - первый видимый элемент нашего listview.
Тут же в активити в слушателе скролла списка у нас стоит генератор холдера, который служит лишь контейнером для передачи и вывода вьюх из нашей таблицы. Т. е. холдер это только контейнер, представляющий отдельную запись в таблице и хранящий нашу, уже заранее подготовленную вьюху. Он отправляется в адаптер и там просто рендерится и вставляется в listview.
Плюсы такого метода в том, что подготовить элементы списка можно еще до создания самого списка и адаптера. Адаптер же работает как сервер, лишь принимающий холдер и рендерящий вьюху из него в список и не расчитывая/подготавливая что-либо самостоятельно.
Replies: >>16209
Тред улетает в БАМПЛЯМАТ!
Опять под меня косишь, гадёныш?
Replies: >>16302
>>16249
Какая разница? Вы же все анонимы, коллективный разум.
Replies: >>16312
>>16302
Будь мы Ъ коллетивным разумом, вся борда уже знала бы пароль от админки и творила бесчинства.
Replies: >>16314
>>16312
Пароль от админки известен не анониму, а админу. Он не входит в коллективный разум.