Истории с тегом: веб-разработка

Всего историй: 342

11789

Единая система монетизации фрустрации

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

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

Скажите, зачем при малейшем чихе обращаться к ЕСИА? На всякий случай, чтобы ваша поделка не забыла об авторизованном пользователе?

Юзабилити? Не, не слышали.

Использование левых браузеров? Нет, верстаем только под «ишака».

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

11734

Йух-23, моё альтер-эго

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

Выбрал дату, выбрал мероприятие, выбрал время. Пока всё хорошо. Дошло до выбора места в зале. Вижу список рядов, где есть свободные места и указано, сколько именно. Ряды, где свободных мест нет, скрыты. Какой хороший сайт, однако! Тыкаю мышкой в нужный ряд. Открывается окошко с выбором мест. Внизу окошка — кнопочка «Положить в корзину».

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

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

Нажимаю «Оформить заказ». Вижу список мест, итоговую сумму, но теперь нигде не написаны ни дата, ни время, ни название концерта. Перекрестившись, указываю свои контакты и нажимаю «Подтвердить».

Итак, у меня есть корзина с билетами и открывшееся окошко «Личный кабинет — изменение данных» с заполненными полями контактов, заполненным полем логина «as;iUh23» и пустыми полями для пароля. Меняю логин на Ivanoff, задаю пароль, подтверждаю пароль и… попадаю в свой личный кабинет с пустой корзиной. Телепатическим образом понимаю, что корзина кабинета Ivanoff пуста, потому что он ничего не заказывал. А заказывал билеты тот самый as;iUh23, но я не знаю его пароля.

Лезу в почту. Вижу два письма о создании двух кабинетов: as;iUh23, а потом Ivanoff. С паролями. Радостно пытаюсь зайти в личный кабинет as;iUh23, указывая присланный пароль. Неудача. Комментарий: «Пользователь as;iUh23 указал e-mail, который уже используется другим пользователем».

Закрываю страничку интернет-кассы, открываю IT happens.

11671

Всё тлен в конце программы

Приглючилось мне, будто среди веб-дизайнеров пошла мода на короткоживущие объекты. Типа, крона дерева из одной картинки — это прошлый век. Создадим для каждого листочка свой JavaScript-объект — пусть отрисовывается, движется по своим законам и в конце самоуничтожается. Или конвертируется в объект «грязь». А поскольку дело было во сне, то обрабатывать всю эту орду объектов пришлось мне же, грешному. Проснулся в холодном поту, когда понял, что моих двух ядер (известно каких) не хватает для отрисовки даже простейшей табуретки…

11579

Заметьте, никаких веществ

Как-то на работе искал какую-то информацию в интернете. В своих странствиях по паутине вышел на простенький на вид сайт: серый фон, чёрный Arial, просто пачка статей на какую-то тему. Но глаза не могут сосредоточиться на тексте. Присматриваюсь и вижу, что фон куда-то ползёт. Проморгался. Теперь плывут какие-то пятна. Хотя нет. Вы видели анимацию амёбы? Стоп. Нет. Скорее лёгкий шум какой-то. Опять нет… Теперь опять плывёт. Да что за хрень!

Отвожу глаза к окну (обычному, в стене которое) на пару минут. Смотрю на монитор — опять чертовщина. Открываю другой сайт — нормально. Опять этот. Плывёт! Открываю код. Ничего необычного, ни скриптов, ни графики. Стоп! Фоновая картинка, на стол её! Открываю в Пейнте (другого ничего нет) — плывёт! Обычный JPEG. А на фига серый квадрат сажать в картинку?.. Увеличиваю. Вот он, корень зла!

Дезигнер (по-другому не скажешь) сварганил для сайта фон из вертикальных чередующихся чёрных и белых полос толщиной в один пиксель, вместе сливающихся в почти ровный серый цвет. А у нас стоят старенькие ЖК, подключённые VGA-кабелем. Ну, вы поняли? Двойное преобразование плюс какие-то наводки на цвет или синхро — и такая картинка становится идеальным средством для расшатывания душевного здоровья пользователя.

11535

Беру деньги!

Коллеги-фрилансеры, берите предоплату! Хотя бы потому, что она вас дисциплинирует и заставит чувствовать себя кому-то должным, не переваливая за дедлайны. Тем самым вы сами себя поставите в рамки, которые наверняка оговорены с заказчиком.

Если этот абзац нашептал мне капитан Очевидность, то вот жизненная история. Где-то в июле знакомый предложил мне перевести сайт небольшой компании с проприетарного движка на CMS с открытым исходным кодом. Мотивировано было тем, что разработчик в столице, на всякие контакты с вопросом о доработке детища идёт не очень охотно и просит денег. (Последнее особенно странно, да?) Войдя в положение и оценив объём работ — довольно простой сайт с небольшим каталогом товаров, — я встретился с менеджментом организации и приступил к работе, получив аванс примерно в треть от суммы сделки.

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

— Беру деньги!

Но я так не сделал и сейчас являюсь героем этой истории.

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

Как говорится, «чем дальше в лес, тем толще партизаны». Тут у организации совершенно внезапно происходит ребрендинг. Один из менеджеров довольно долго промывал мне уши, что они поработали с бизнес-консультантами, и теперь все будет по-другому: новые стратегии, новые горизонты… и новое оформление сайта.

Вот тут мне точно стоило бы остановиться и взять хотя бы деньги за то, что я уже сделал. Но нет, я же тот ещё добряк. Подумал: «Ну, всякое бывает…» Дождался, пока на почту упадёт новый макет. Увидел и понял, что мне не просто придётся доработать существующий шаблон, а вообще с нуля написать ещё один.

Дальше началась какая-то ромашка. Когда шаблон был написан, прошло несколько стадий доработок в духе: «Вот тут переделай! А, нет, оставь старый вариант! Нет! Верни новый!..» Всё это время я терпеливо, хоть и периодически скрипя зубами, выполнял хотелки заказчика. Раз взялся, надо же доделать…

Прошло уже практически четыре месяца. Хоть я и работал по вечерам с кофейком и не особо торопливо, но это вечера моего времени, которое я мог бы потратить на что-то другое.

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

— не везде начисто выставлены отступы (ничего, что я полночи переделывал всё под ваши хотелки, отчего кое-что и уползло, а сделать красиво я уже не мог, потому что спать хотелось?);

— тот и этот элементы оформления не нравятся (стоп! Вы сами сказали, что они должны быть такие!);

— и вообще, а что это вы так долго всё делаете (а вы зачем уже раза три кардинально изменили ТЗ?)

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

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

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

11470

Кривые руки на высшем уровне

Я уже давно начал думать о том, что программисты, кодеры, патчеры и «все эти люди» ушли в теорию слишком глубоко. Об этом говорит не только лента новостей с сайта с клубком нитей на логотипе, но и количество багов, которое я периодически нахожу, а также места их обитания.

Начнём с простого. Главная страница правительства США. Не-ет, я не преувеличиваю — usa.gov на главной странице имеет глупый баг. Есть секция новостей. Там должно быть три новости. Есть стрелочки влево-вправо, переключатель новостей внизу на три позиции. А вот новости всего две. Если мы нажимаем на третью позицию переключателя, тот показывает нам пустоту и не позволяет вернуться каким-либо способом, кроме F5. О, а как замечательно отрисовывается этот переключатель в трёх браузерах! Один рисует сразу три состояния кнопки, другие два рисуют картиночку со смещением. Вот уж действительно — сократили бюджет страны, денег даже на хорошего веб-программиста или тестера не нашлось.

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

В связи с этим у меня возникает целый ворох вопросов. В чём причина такой жести? Кривое ТЗ? Узкие сроки? Или просто повсеместная скорость внедрения «принципиально новых технолагий» в продукт? Или просто концентрация криворуких?

11462

Как русская «с»

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

Обратились к нам с несложным заданием: написать новый шаблон для интернет-магазина и продвинуть несколько категорий хотя бы на пятую страницу Яндекса. Заказчик — дамочка, которая живёт этим магазином, холит и лелеет его. Сайту три года, в поисковой выдаче его редко где найдёшь, разве что по некоторым запросам на тридцатой-сороковой странице.

За работу взялись с энтузиазмом. За неделю нарисовали симпатичный шаблон и начали продвигать сайт. Обещали за два-три месяца результат по заказанным категориям, а остальные поднимутся в поисковой выдаче автоматически.

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

Раньше таких проблем не было. В шоке перерыли всё, но ничего не отыскали. Я написал скриптик для проверки страницы, метатегов и контента, который искал ключевые слова и выдавал процент соответствия. Скрипт сообщил, что ключевое слово не совпадает с названием страницы и названием товара. Зашёл вручную, проверил — всё окей…</p><p>Через неделю оказалось, что менеджер клиента умеет добавлять товары, категории, информационные страницы, но вот изменить порядок сортировки не способна. В движке категории и товары по умолчанию сортируются по алфавиту. Чтобы нужный ей товар (или категория) находился выше всех, она меняла кириллические символы на латинские.</p><p>Мы были в шоке. Теперь в софте появилась новая проверка.</p> </div> <div class='actions'> <div class='button-group like'> <button class='button vote-btn' data-story-id="11462" onclick="vote(this)"> <i class='fas fa-thumbs-up'></i> <div class='rating'>1042</div> </button> </div> </div> </div> <div class='story' id='story-11455' itemscope='' itemtype='http://schema.org/Article'> <div class='id'> <span>11455</span> </div> <h2 itemprop="headline"><a href="/story/11455.html">Грядёт новая школота</a></h2> <div class='meta'> <time class='date-time' datetime='2013-09-30T07:15:02Z' itemprop='datePublished'>30 сентября 2013, 07:15</time> <div class='tags'> <i class='fas fa-tags'></i> <ul> <li><a href="/tag/webdev.html" itemprop="about">веб-разработка</a></li> </ul> </div> </div> <div class='text' itemprop='articleBody'> <p>Раз уж пошёл холивар про олдскул, добавлю свои пять копеек. Скажу сразу: я такой, что олдскульнее сейчас редко бывает. Много ли из вас помнят перфокарты? А у меня в голове до сих пор сидит Фортран и «GO.SYSIN DD *», хотя я уже стал забывать, что это такое.</p><p>Недавно представитель новоявленных айтишников упирал на то, что <a href="/story/11439.html">главное — результат</a>. Мне есть что рассказать по этому поводу.</p><p>Два года назад форум нашей фирмы переехал на другой сервер, и поменялись ссылки. Было <i>www.companyname.ru/productname/forum</i>, стало <i>productname.company.ru/forum</i>. Старые ссылки на форум не работают. Ну, те, что на наших сайтах, поменять не сложно, а вот те, что по всему инету торчат, — хрен поправишь. Цитируемый у нас форум. Хоть и редко, но будет случаться. Нужен редирект. Бригада разработчиков сайта на охренеть каком «дотнете» просит три недели на исправление ошибки. В какой-то XML правила прописать, потестить, подумать… Я, хоть от инет-разработок отошёл, статус 302 помню, поэтому взрываюсь как бомба, ибо нефиг конопатить мозги. Спрашиваю, есть ли у них скрипт, который вызывается при запросе несуществующей страницы. Естественно, есть. На голом Си пишу CGI-прогу, смысл которой — с помощью <b>scanf</b> считать строку, проверить, заменить одну подстроку на другую и обычным <b>printf</b>выдать:</p><p><i>HTTP/1.1 302<br></br>Location: blah-blah-blah</i></p><p>Любопытные могут RFC почитать. Попробовал — работает. Дальше — юмор. Тимлид этих .NET-разработчиков не понял, о чем идёт речь. Решение отклонили и пошли своим путём. Я до сих пор не знаю, битые у нас ссылки или нет.</p><p>Задачка одна, школы разные. Поэтому пути решения различаются.</p><p>Ребята «новой школы»! Я не осуждаю ваше желание зарабатывать деньги. Я даже ратую за то, чтоб <a href="/story/890.html">беречь работу до пенсии</a>. Только не трогайте «работу на результат». Это мы могли во вред себе (одна перфокарта — один рубль) оптимизировать программу, а для вас результат — зарплата. Так что не смешите.</p> </div> <div class='actions'> <div class='button-group like'> <button class='button vote-btn' data-story-id="11455" onclick="vote(this)"> <i class='fas fa-thumbs-up'></i> <div class='rating'>555</div> </button> </div> </div> </div> <div class='story' id='story-11427' itemscope='' itemtype='http://schema.org/Article'> <div class='id'> <span>11427</span> </div> <h2 itemprop="headline"><a href="/story/11427.html">Лицом к людям</a></h2> <div class='meta'> <time class='date-time' datetime='2013-09-22T07:15:00Z' itemprop='datePublished'>22 сентября 2013, 07:15</time> <div class='tags'> <i class='fas fa-tags'></i> <ul> <li><a href="/tag/webdev.html" itemprop="about">веб-разработка</a></li> </ul> </div> </div> <div class='text' itemprop='articleBody'> <p>На некоторых сайтах при отсутствии у пользователя аватара отображается что-нибудь неприглядное. Например, страшная рожа или фраза «как лох без аватарки». Бывает, даже мат. Думаете, это приводит к увеличению процента пользователей с аватарами? Отнюдь. А если у кого аватары и есть, то такие же страшные.</p><p>На других сайтах при отсутствии аватара вместо него отображается что-нибудь красивое — например, приятная улыбка. И заменить эту улыбку на другую картинку, ещё более красивую, спешат практически все.</p><p>Будьте добрее, и люди к вам потянутся.</p> </div> <div class='actions'> <div class='button-group like'> <button class='button vote-btn' data-story-id="11427" onclick="vote(this)"> <i class='fas fa-thumbs-up'></i> <div class='rating'>568</div> </button> </div> </div> </div> <div class='story' id='story-11414' itemscope='' itemtype='http://schema.org/Article'> <div class='id'> <span>11414</span> </div> <h2 itemprop="headline"><a href="/story/11414.html">ЭйчтитипиГорТранс</a></h2> <div class='meta'> <time class='date-time' datetime='2013-09-18T07:15:00Z' itemprop='datePublished'>18 сентября 2013, 07:15</time> <div class='tags'> <i class='fas fa-tags'></i> <ul> <li><a href="/tag/webdev.html" itemprop="about">веб-разработка</a></li> </ul> </div> </div> <div class='text' itemprop='articleBody'> <p>Работаю я недалеко от центра города, а живу на окраине. На работу добираться либо с пересадками, либо на трёх маршрутках с номерами 200, 404 и 500. Я не знаю, имеет ли владелец этих машин какое-то отношение к IT, но:</p><p>Маршрутка номер 200 — чистенький, уютный «форд», ни разу не сломалась, а водитель никогда не нарушает правил.</p><p>Маршрутка номер 404 — чисто, уютно, но водитель никак не может запомнить маршрут. Постоянно спрашивает дорогу у пассажиров или коллег по телефону. Пару раз завозил не туда.</p><p>Маршрутка номер 500 — грязная, ушатанная «газелька». Постоянно ломается, частенько приходится дозаправляться прямо на маршруте. А ещё у неё сложный маршрут, поэтому она всегда переполнена. Стоит ли говорить, что на ПДД водила (водителем <i>это</i> назвать не получается) внимания не обращает?</p><p>А ещё есть 304-я. Никогда не ней не езжу, потому как приходится пересаживаться на полдороги.</p><p>Третий год пытаюсь понять, случайность или нет.</p> </div> <div class='actions'> <div class='button-group like'> <button class='button vote-btn' data-story-id="11414" onclick="vote(this)"> <i class='fas fa-thumbs-up'></i> <div class='rating'>737</div> </button> </div> </div> </div> <div class='nav nav-bottom'> <div class="nav-common"> <ul> <li class="prev"><a href="/tag/webdev.html?page=3">Назад</a></li> <li class="current">4</li> <li class="next"><a href="/tag/webdev.html?page=5">5</a></li> <li class="secondary"><a href="/tag/webdev.html?page=6">6</a></li> <li class="secondary"><a href="/tag/webdev.html?page=7">7</a></li> <li class="last"><a href="/tag/webdev.html?page=35"><span>В конец</span></a></li> </ul> </div> </div> </div> <div class='sidebar'> <div class='section'> <h3><a href="/tags">Темы историй</a></h3> <ul class='cloud' id='cloud'> <li class="tag7" data-count="1216"><a href="/tag/hardware.html">железо</a></li> <li class="tag7" data-count="1116"><a href="/tag/sysadminish.html">сисадминское</a></li> <li class="tag7" data-count="1102"><a href="/tag/lulsers.html">юзвери</a></li> <li class="tag7" data-count="970"><a href="/tag/women.html">прекрасный пол</a></li> <li class="tag7" data-count="900"><a href="/tag/programmism.html">программизмы</a></li> <li class="tag7" data-count="862"><a href="/tag/nonenlightened.html">неспециалисты</a></li> <li class="tag7" data-count="856"><a href="/tag/windows.html">windows</a></li> <li class="tag7" data-count="832"><a href="/tag/thoughts.html">мысли о вечном</a></li> <li class="tag7" data-count="808"><a href="/tag/fuckups.html">факапы</a></li> <li class="tag7" data-count="796"><a href="/tag/software.html">программы</a></li> <li class="tag7" data-count="725"><a href="/tag/education.html">образование</a></li> <li class="tag7" data-count="704"><a href="/tag/support.html">саппорт</a></li> <li class="tag7" data-count="634"><a href="/tag/misunderstanding.html">взаимонепонимание</a></li> <li class="tag7" data-count="615"><a href="/tag/internet.html">интернет</a></li> <li class="tag7" data-count="612"><a href="/tag/strangetech.html">чудеса техники</a></li> <li class="tag7" data-count="607"><a href="/tag/linux.html">linux</a></li> <li class="tag7" data-count="587"><a href="/tag/pranks.html">розыгрыши</a></li> <li class="tag7" data-count="557"><a href="/tag/longago.html">давным-давно</a></li> <li class="tag7" data-count="555"><a href="/tag/providers.html">провайдеры</a></li> <li class="tag7" data-count="520"><a href="/tag/games.html">игры</a></li> <li class="tag7" data-count="508"><a href="/tag/network.html">сеть</a></li> <li class="tag7" data-count="483"><a href="/tag/service.html">техсервис</a></li> <li class="tag7" data-count="478"><a href="/tag/boss.html">начальство</a></li> <li class="tag7" data-count="454"><a href="/tag/datastorage.html">носители данных</a></li> <li class="tag7" data-count="406"><a href="/tag/idiots.html">идиоты</a></li> <li class="tag7" data-count="393"><a href="/tag/cables.html">кабели</a></li> <li class="tag7" data-count="377"><a href="/tag/officetech.html">оргтехника</a></li> <li class="tag7" data-count="342"><a href="/tag/security.html">безопасность</a></li> <li class="tag7" data-count="342"><a href="/tag/webdev.html">веб-разработка</a></li> <li class="tag7" data-count="339"><a href="/tag/only-in-russia.html">только в России</a></li> <li class="tag7" data-count="310"><a href="/tag/servers.html">серверы</a></li> <li class="tag7" data-count="297"><a href="/tag/buh.html">бухгалтерия</a></li> <li class="tag7" data-count="267"><a href="/tag/kids.html">дети</a></li> <li class="tag7" data-count="264"><a href="/tag/riggers.html">монтажники</a></li> <li class="tag7" data-count="259"><a href="/tag/virii.html">вирусы</a></li> <li class="tag7" data-count="246"><a href="/tag/retail.html">розница</a></li> <li class="tag7" data-count="243"><a href="/tag/greatpeople.html">великие люди</a></li> <li class="tag7" data-count="240"><a href="/tag/email.html">почта</a></li> <li class="tag7" data-count="235"><a href="/tag/keyboard.html">клавиатуры</a></li> <li class="tag7" data-count="219"><a href="/tag/displays.html">мониторы</a></li> <li class="tag7" data-count="219"><a href="/tag/telecom.html">связь</a></li> <li class="tag7" data-count="209"><a href="/tag/government.html">госконторы</a></li> <li class="tag7" data-count="192"><a href="/tag/indiancode.html">индийский код</a></li> <li class="tag7" data-count="187"><a href="/tag/compmice.html">мышки компьютерные</a></li> <li class="tag7" data-count="185"><a href="/tag/animals.html">животные</a></li> <li class="tag7" data-count="184"><a href="/tag/antivirus.html">антивирус</a></li> <li class="tag7" data-count="171"><a href="/tag/1c.html">1с</a></li> <li class="tag7" data-count="163"><a href="/tag/remoteadmin.html">удаленное администрирование</a></li> <li class="tag7" data-count="159"><a href="/tag/foreigners.html">иностранцы</a></li> <li class="tag7" data-count="154"><a href="/tag/db.html">базы данных</a></li> <li class="tag7" data-count="129"><a href="/tag/mac.html">mac</a></li> <li class="tag7" data-count="90"><a href="/tag/ups.html">ИБП</a></li> <li class="tag7" data-count="89"><a href="/tag/electricians.html">электрики</a></li> <li class="tag7" data-count="87"><a href="/tag/smarttech.html">умная техника</a></li> <li class="tag7" data-count="81"><a href="/tag/jamshooting.html">джамшутинг</a></li> <li class="tag7" data-count="75"><a href="/tag/banks.html">банки</a></li> <li class="tag6" data-count="33"><a href="/tag/unix.html">unix</a></li> <li class="tag5" data-count="25"><a href="/tag/freebsd.html">freebsd</a></li> <li class="tag5" data-count="22"><a href="/tag/immortal.html">классика</a></li> <li class="tag5" data-count="16"><a href="/tag/manuals.html">документация</a></li> </ul> </div> </div> </div> </div> <div class='footer'> <div class='wrapper'> <p> <span class='rated-18'>18+</span> </p> <p> <span><a href="/rss"><i class="fas fa-rss"></i> RSS</a></span> <span><a href="/about.html">О проекте</a></span> </p> </div> </div> <script src="/static/js/theme.js"></script> <script src="/static/js/like.js"></script> <script src="/static/js/nav.js"></script> <script> document.getElementById('submit-story-btn')?.addEventListener('click', function(){ var w = window.open('/submit', 'submit', 'width=600,height=700,scrollbars=yes'); if (!w) { location.href = '/submit'; } }); </script> </body> </html>