Category: it

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

Океан. Форум. Опросы

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

Вот вам коротенький мануал по новым форумным опросам.

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

Collapse )

Океан. Ссылки на ресурсы

Продолжаем мучить наш сайт.

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

Пожалуй, если стоит о чём-то писать, то о каких-то новых открытиях в области исследования мандел, но и здесь открывать уже особо нечего. Все типичные проявления мандельных аномалий изучены  и остались трагически непонятыми. Количество гипотез уже больше, чем людей на Земле. Движуха есть, толку никакого. Что остаётся простому крестьянину делать? Правильно, программировать сайт. Хоть в этом есть какие-то сдвиги.

Итак, что у нас произошло за последние две недели?

Collapse )

Петиция за переименование Океана

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

Но вернёмся в наши дни. Как вы все знаете, эксперимент по отлавливанию заднеприводных мандел провалился, и сайт стал просто каталогом мандел. Правда, сейчас в связи с разработкой форума намечается тенденция к тому, что он станет некоей полуанонимной социальной сетью для мандельщиков, хотя и весьма скромной, конечно. А, может, и не станет, тогда будет просто ещё один неудавшийся эксперимент. Я считаю, что это не так уж и плохо. Пока все гоняются за каким-то сногшибательным результатом, я для себя открыл, что мне интереснее не результат, а процесс. Но если в итоге получится что-то сногшибательное, тоже не буду против. Словом, экспериментов будет ещё немало, пока мне не надоест эта мандельная тема. Да и сам сайт в отрыве от мандел тоже по сути является моим большим экспериментом в изучении веб-программирования, которым я раньше никогда не занимался. Из-за этого он находится в постоянном недоделанном виде :))

Во что переименовать Океан я пока не знаю. Просто думаю,что пора. Может, вы что-нибудь подскажете. Наличие в названии упоминания Нельсона Холилалавича не обязательно. Если ничего так и не придумается, то пусть остаётся Океаном, хотя я очень надеюсь, что всё-таки придумается.

Касательно форума, который мы так часто вспоминаем. Уже работает минимальная версия этого чуда, можно даже создавать сообщения, но нужно ещё провести несколько критических доработок. В частности, в сообщениях не показывается, кем они были отправлены, а знать это было бы полезно, как вы понимаете :)) И пагинации для сообщений пока нет. Я думал, что сегодня с этим закончу и выкачу в прод, что есть, а потом буду добрабатывать дальше, но что-то день выдался какой-то ленивый, и взамен я просто написал эту статью :))

Океан. Токен

В прошлый раз я писал, что меня от маленького шага человека и большого скачка для всего человечества в развитии сайта останавливают две вещи - отсутствие TypeScript и SSL. Вроде бы всё это уже добавлено, так за чем же дело стало? Ну, на самом деле я вас обманул. Не хватало не двух вещей, а трёх. Третья - это защитить API-сервер от посягательств кулхацкеров. И пока это не было сделано, я не мог спокойно спать. Просыпался среди ночи и терзал себя тревожными мыслями, не взломал ли кто API-сервер? Объясню, в чём суть.

В древние времена, когда по земле ещё бродили динозавры, для работы сайта достаточно было одного веб-сервера, чаще всего какого-нибудь Apache. При помощи Perl, PHP, Ruby или какого-то другого модного языка программирования этот сервер обращался к базе и выдавал данные, перемешанные с HTML-кодом. Сейчас так делают всё реже, потому что появилась масса сервисов, специализированных только на выдаче данных, а кто и как их будет показывать у себя на сайте, это уже не их дело. Классический пример - Google, в котором куда ни сунься, всюду наткнёшься на какое-нибудь API. Это хороший прибыльный бизнес, поэтому появилась несчётное количество сервисов, которые за баблишко или иногда даже просто так отдают какие-нибудь данные. Это и называется API-сервер, то есть этакая хитрожопая разновидность бэкенда. Веб-серверы тоже остались, но претерпели существенные изменения. Теперь это обычно не Apache, а какая-нибудь Node.js, заточенная под разработку фронтенда на JavaScript или TypeScript.

Чтобы не отставать от жизни, я пошёл точно таким же путём. Каркас страницы отображаю при помощи веб-сервера Express, работающего на Node.js, а данные заполняю запросами к API-серверу, который написал на Rust. Стандарта, на чём писать бэкенд, никакого нет, поэтому каждый в этом деле извращается, насколько хватит его фантазии. Насколько извращённой оказалась моя фантазия, вы уже поняли :))

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

Collapse )

Океан. SSL

У меня очень плохая новость для наших врагов. Я зашифровал трафик между браузером и сервером, и теперь будет очень трудно определить, кто что отправляет, и какие данные отдаёт сервер. Для этого понадобилось добавить поддержку SSL, в результате чего адрес сайта поменялся с http://ocean-mandela.info на https://ocean-mandela.info. Если раньше, скажем, в браузере Chrome ссылка выглядела так:

То теперь будет выглядеть вот так:

Collapse )

Океан. Пропущенные опросы

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

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

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

Когда дела с передачей номера страницы через URL наладились, я смог, наконец, сделать пагинацию рейтинга. Теперь в нём показываются все 17 страниц, накопившиеся на сегодняшний день. Также через URL передаётся и тип рейтинга - по манделам или пользователям.

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

Collapse )

Океан. Форум

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

Во-первых, большинство из них платные, а те, что бесплатные, страшные, как ядерная война.

Во-вторых, им для работы нужен PHP и MySQL - традиционная СУБД для форумов. Следовательно, придётся ставить на сервер дополнительный софт и поддерживать две базы данных (одну для мандел, другую для форума), чего мне ну никак не хочется делать.

В-третьих, и это самое главное, на форумах требуется обязательная регистрация через e-mail, а это значит прощай анонимность - наша главная защита от Системы с её маникальной слежкой.

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

Collapse )

Океан. Telegram Bot

Придумал ещё одну очень злую фичу. Теперь можно подписываться на уведомления о добавлении новых мандел на сайте. Поскольку мы упоротые конспирологи, то, понятно, не может быть и речи о том, чтобы собирать о пользователях хоть какую-то инфу. В том числе e-mail, на который можно было бы высылать письма с уведомлениями. Поэтому с самого начала стояла животрепещущая проблема, как, не нарушая анонимности пользователей, отправлять им уведомления. Единственное, что пришло мне в голову - это использовать для этого Telegram. Но сделать это надо было так, чтобы как сервер не имел представления о личностях подписантов, так и сами пользователи не знали о том, кто, кроме них, ещё подписан на рассылку.

Сперва для этой цели я рассматривал обычные Telegram-каналы. Плюс в том, что достаточно отправить одно сообщение, и его получат все. Минус - все, кто подписался на канал, видят других подписавшихся. Я не нашёл  опиции, которая могла бы скрыть от нас этот список, поэтому каналы не подошли.

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

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

Правда, есть ненулевая вероятность, что найдётся среди врагов какой-то аццкий хакер, который догадается, как по этим id определить более подробную инфу о пользователе, но для этого ему нужен будет ещё токен на бота, которого в базе нет, так что не всё так просто. Тем не менее, если ваша фамилия начинается на Пу или Зе, или Лу, или ещё как-нибудь станно, то лучше, конечно, не рисковать, а завести для этой цели какой-то фейковый Telegram-аккаунт.

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

Collapse )

Океан. Новое доменное имя

Возникла подлая подстава с доменным именем ocean-mandela.org. Оно нам больше недоступно и будет таковым оставаться в течение года. Однако не беда! Взамен у нас есть новое доменное имя! Пусть на одну букву длиннее, зато теперь его никто не уведёт. Расскажу, как всё было.

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


Collapse )

Океан. Комментарии

Добавил возможность оставлять комментарии к манделам.

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

Особенно бессмысленной и беспощадной оказалась работа по добавлению диалогов с подтверждением или отменой редактирования и удаления. Модальные диалоги, к которым мы так привыкли на десктопе и мобилках, в вебе ещё не изобрели. Никакого стандарта для их отображения нет, поэтому каждый изобретает свой вилосипед. Кто-то берёт jQuery (уже не берёт), кто-то Bootstrap, а я ничего брать не стал и состаряпал своё собственное поделие.

Также надо было показать количество комментариев у каждой манделы на главной странице. Вот с этого и начнём.

Collapse )