Как стать автором
Обновить
12
0

Пользователь

Отправить сообщение

DDoS атака раньше: использование миллионов IoT в ботнетах с предварительной тренировкой на африканском регионе.

DDoS атака теперь: открыть страницу с фильтром и нажать на кнопку "Поиск" 3 раза подряд.

Toshiba Satellite a100 - лучший ноут! Лет 7 за ним сидел, никаких проблем с петлями. Открытие крышки одной рукой (как в маках). Сколько раз носил в рюкзаке во включенном состоянии - продолжал работать как ни в чем не бывало. Ударопрочность - мое почтение (5 лет пришлись на универ)! Механическое колесико регулировки звука - кайф! Замена/апргейд ОЗУ - открутить один винт. Достать веник - два винта! Батарея отщелкивается.

Как же я был неправ, когда пересел с этой вершины инженерной мысли на шлак под названием Toshiba Satellite 200. Думал, что просто досадное недоразумение, поэтому дальше перешел на Satellite 300 - такой же шлак (и оба из фирменного салона). Не знаю, что случилось, но Тошиба явно повернула не туда, и не удивительно, что в результате и вовсе прекратила производство ноутов.

А что другие марки? Такая же ерунда! Металлические корпуса магнитятся, петли крошатся как сахар, чтобы что-то поменять - нужно разобрать все до винтика (а иногда клава и вовсе припаяна!), на экране появляются какие-то разводы, блоки питания трещат, кулеры как турбины, а корпус все равно перегрет. И это касается не только msi, hp, asus, acer, lenovo, но и Dell тоже!

Спасибо, что выслушали!

Ну хз, Lotus 1-2-3 прекрасно справляется с созданием таблицы из одной колонки, и зачем мне тогда ваши кликхаусы?

Мне нужно больше информации, чтобы сформировать мнение

Да, хорошее решение!

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

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

Ага,  "бешеная Ладья", все верно)

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

Anand vs Ivanchuk - London GP, final play off 1994
Anand vs Ivanchuk - London GP, final play off 1994

В результате Ананд устоял и потом просто "срубил флаг".

В любом случае, спасибо за такую коллекцию матов! Забавные названия! Помню, в средней школе, когда ставили "Мат по последней горизонтали", говорили "сортир" или "толчок", потому что это было похоже на то, что король залез в туалет и так и не успел оттуда вылезть. Наверное, у многих есть свой местный сленг.

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

Кстати, на последнем чемпионате мира по рапиду была очень прикольная партия, где в безвыходном положении белые смогли не проиграть!

Andreikin Dmitry vs Yu Yangyi - FIDE World Rapid Chess Championship 2023
Andreikin Dmitry vs Yu Yangyi - FIDE World Rapid Chess Championship 2023

Ок, не хочу навязывать свое мнение, хотя почему не хочу, хочу) Мне было бы удобно, наоборот, иметь возможность возвращаться к предыдущим позициям через навигацию браузера. То есть, чтобы скрипт не удалял позицию из URL, когда она есть, а добавлял ее туда, когда ее нет, и менял при переходе к следующей задаче (с обновлением истории браузера). Тогда даже спустя некоторое время я смогу открыть историю и найти ту интереснейшую позицию, которая мне попалась (и, конечно, поделится с ней на свою аудиторию в онлифанс).

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

Тогда можно добавить на страницу специальную кнопку "Скопировать ссылку на задачу" где в качестве урл будет packFEN(localStorage.getItem('fen_position')), разумеется, с обновлением при переходе к другой задаче.

Как вам такой компромисс?

Ссылка на сайт вида https://checkmate1move.com/?fen=08001C9D3E440008KJJJRJTJRPJJJPPPR0000

Но при переходе на сам сайт позиция из ссылки удаляется

var fen_url = getURLParameter('fen')
if (fen_url === undefined) {} 
else {
  localStorage.setItem('fen_position', unPackFEN(fen_url) + " 0 1")
  //history.pushState(null, null, '/')
  window.location.href = "https://checkmate1move.com"
}

Для чего так сделано? Ведь в результате нельзя поделится интересной позицией просто скопировав урл страницы :(

Да) Причем сначала втихую пропатчили так, чтобы при попытке использовать уязвимость генерилась сырая ошибка. Затем выпустили официальное обновление, в котором уже возвращался JSON. В описании к релизу был пункт аля "Исправлен формат ответа для некорректных сценариев использования API".

Будет лучше (для меня), если это останется безликой байкой. Как поется в песне: "Я бы мог открыть ответ тот, но йог велел хранить секрет, вот."

Тоже как-то сэкономил компании лям благодаря своим кривым рукам и... Хабрахабру.

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

Оказалось, что пользователь может вывести деньги с чужих кошельков на свои реквизиты всего парой строчек JS.

Дрожащими от предвкушения руками расписал тикет безопасности в техподдержку сервиса. Уже думал, куда поставить феррари, которую мне безусловно вручат за найденную уязвимость. Все-таки даже у нас там было пользовательских кошельков на сумму больше лимона y.e., а ведь были конторы и покрупнее. Но не тут-то было.

Ответили не сразу и без энтузиазма. В максимально сдержанном стиле поблагодарили за подробное описание и сказали, что пофиксят проблему в одном из следующих плановых релизов.

Я выпал в осадок... В течение недели пытался достучаться до них, объясняя всю критичность найденного. Бесполезно. Отвечали медленно, неохотно. Ускорять выход фикса не собирались, давать вознаграждение - тем более.

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

И тогда, просто из вредности, я написал примерно так: "Вопросов нет. Просто не хотел, чтобы ваше руководство удивилось, когда прочтет об этом на Хабре".

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

P.S. Кстати, в то время у меня даже не было аккаунта на Хабре xD

Может быть "панчеры"? Добиваются победы (зависание экрана) ударами джостика по телику.

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

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

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

А Find Window используется как тягач, позволяющий выполнить кропотливую обработку, но без возможности изменить курс. Хотя он тоже красавчик, это точно!

640кб оперативки? Не, это слишком по-богатому. Не забывайте, мы в космосе! В нашем распоряжении бесконечное количество магнитных бобин, но оперативки завезли только на 1к, для просмотра сайтов. Файлы с логами в формате "USER_ID:URL\n" (1 символ - 1 байт). Поэтому

Первый день:

  1. Открываем поток на чтение файла первого дня

  2. Не спеша читаем ид пользователя (пока не дойдем до знака ":")

  3. Проверяем, если файла "1-USER_ID" не существует, то создаем поток на запись этого файла и побайтово записываем туда урл (пока не дойдем до знака "\n")

  4. Если файл есть и он пустой, то пропускаем

  5. Если файл есть и он не пустой, то открываем еще один поток на его чтение и побайтово читаем с двух потоков до первого отличия, и если такое находится - делаем файл пустым.

День второй:

  1. По аналогии читаем файл 2-го дня, получив ид пользователя, проверяем файл "1-USER_ID", если файл есть и он пустой, либо его содержимое не совпадает - то это лояльный пользователь. Удаляем файл 1-USER_ID и мигаем светодиодом два раза.

Это точно!) Я вообще больше рофлил, чем пытался дать ценный совет. Эти "любимые задачки" от глубоко окопавшихся в конторе сансеев всегда обрастают таким искусственным налетом, что сложно их воспринимать как реальные кейсы. Решать с закосом под продакшен или под спортивное программирование? Выбор похож на две чашки с ядом, к которому у собеседующего уже отличный иммунитет.

Если уже идти во все тяжкие оптимизации, то зачем вообще держать множества для страниц?

Можно обойтись простым <userId>: <string>. При этом не пустое значение будет означать, что у пользователем посещена только эта страница. А пустое значение - признак посещения более одной страницы. Т.е.

Первый день:

  1. Если пользователя (ключа) нет в коллекции, то добавить туда вместе со значением страницы

  2. Если пользователь есть, и значение страницы пустое, то пропустить.

  3. Если пользователь есть, и значение страницы не совпадает с текущим, то заменить его на пустоту.

Второй день:

  1. Если пользователь есть, и у него либо пустая строка (признак), либо строка не совпадает - то это лояльный пользователь.

Спасибо, попробую! Вообще, я больше хотел популяризовать ValueResolver, в котором можно самостоятельно вклинится в алгоритм переливания запроса в дто. Если Mapping Request Data обладает такой же гибкостью, то супер!

Мое знакомство с этой штукой было примерно таким:

- Здравствуйте, желаете поговорить об апиплатформ? У нас контроллеры светятся от счастья, но на алтарь пойдут ваши модели, мы нашинкуем их дополнительными атрибутами, эти атрибуты с помощью других атрибутов перемешаем по группам (поверьте, это так удобно!), подсадим на круд-иглу, и политику доступов тоже заберем себе. Интересует?
- Спасибо, но мне бы просто генератор апи интерфейса (которым даже пользоваться будут в основном для экспорта в постмен/инсомнию).

Но теперь на их главной странице красуется ApiResource, без каких-либо обязательств. И я в растерянности) Возможно сам себе навертел это все на мозги.

1

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность