Telegram Web Link
🇳🇱 Привет из Нидерландов!

Сегодня ровно две недели, как я прилетел в эту замечательную страну. Дел и активностей было настолько много, что я почти полностью выпал из интернетной жизни, за исключением пары чатиков с друзьями. Но теперь я более-менее обжился и готов поделиться новостями с вами.

Почему я тут? Я поступил на программу Software Engineering в университет Saxion и в идеале останусь здесь надолго. Занятия только-только начались, поэтому я пока не готов рассказывать про отличия местного образования от российского. Но на первый взгляд тут нравится гораздо больше.

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

Несмотря на то, что машин тут немало (они действительно есть у значительного числа семей), по городу комфортно перемещаться на велосипеде или пешком. Я никогда не видел такого количества велодорожек, островков безопасности, круговых движений. А центр города — это одна большая пешеходная зона с очень милыми домиками и огромным количеством всевозможных магазинчиков, кафешек и прочих заведений. И это всё в городке с населением чуть больше ста тысяч человек. Я бы никогда не подумал, что такой небольшой город может быть настолько живым. В России всё ужасно централизованно, всё интересное располагается в более крупных городах (будь то Москва или Питер), а окружают их унылые «города — спальные районы». Тут же всё не так, даже маленькие города имеют свой шарм.

У меня накопилась ещё много впечатлений, но место в посте уже заканчивается. Так что продолжение следует...
This media is not supported in your browser
VIEW IN TELEGRAM
Об окружающей среде в Нидерландах принято заботиться (ну или усиленно делать вид)

1. Абсолютно нигде не встретишь одноразовые пластиковые трубочки. Ни в кофейнях, ни в магазинах. Вместо них — многоразовые пластиковые или бумажные (которые уже всех достали)

2. За одноразовые стаканчики в кофейнях тоже часто приходится доплачивать €0.05–0.20, хоть они по большей части тоже не пластиковые, а бумажные. Российская система, когда за кофе в свою чашку предлагают скидку, мне нравится гораздо больше.

3. А за напитки в пластиковых бутылках и жестяных банках действует залоговая система. При покупке в чек добавляется дополнительная плата (€0.15–0.25) за каждую тару, а потом тару можно вернуть и получить деньги обратно. Пункты сбора есть почти в каждом супермаркете. Видимо, собранную тару прямо там же сортируют и готовят к отправке на переработку. В России я видел такое буквально один раз (в Глобусе) и это было какой-то диковинкой.
Впервые за долгое время решил запустить стимдек и поиграть
В итоге 2.5 часа потратил на то, чтобы поставить что-нибудь новенькое.

Сначала хотел скачать на сам стимдек торрент-клиент, арч по неведомым причинам не хотел ставить зависимости, я забил
Потом решил скачать игру на маке, полчаса боролся с тем, что местный вайфай как-то очень хитро отказывается качать торренты. Скачал, окей.
Потом ещё час с лишним пытался перекинуть файлы на стимдек. Самый простой способ — через ssh (scp), тем более я уже делал это раньше. Но не тут-то было, почему-то мак перестал подключаться по ssh к стимдеку, коннект просто не проходил. Понятно что проблема в вайфае, но никакие танцы с бубнами не помогали.
Я попробовал использовать DeckMTP, плагин, позволяющий подключать стимдек к компьютеру по протоколу MTP. Тем более что он уже был у меня установлен, хоть я его и не трогал. Пришлось зайти в биос, включить поддержку Dual Mode USB. Но в итоге я так и не смог его завести, потому что макбук отказывался видеть стимдек. Нативной поддержки протокола в макоси нет, а Android File Transfer отказывался работать.
Короче, я просто раздал вайфай с телефона и за две минуты всё перекинул.

Я надеюсь, игра оправдает потраченное на неё время, иначе… 🤬🔪
Окей, я прошёл Melatonin

Melatonin — это ритм-игра. Она состоит из 16 мини-игр, каждая из которых отличается своей собственной геймплейной механикой. Но их всех объединяет то, что для набора очков нужно нажимать на кнопки точно в ритм, обращая внимание на звуковые и визуальные подсказки.

Собственно, контента тут немного. Каждая мини-игра — это один музыкальный трек длиной 1-2 минуты. У каждой игры есть обычный и усложнённый режим. Плюс к этому есть ещё 5 уровней, где объединены несколько мини-игр в одном треке. В итоге чтобы дойти до конца мне потребовалось около 4 часов. В игре есть режим редактора, в котором можно создавать свои уровни, но я пока не знаю, можно ли вообще находить и играть в чужие уровни.

Я уже давно начал замечать, что у меня плохое чувство ритма. Я предпочитаю ориентироваться на визуальные подсказки и очень легко теряю темп, если мне не на что опираться глазами. В Beat Saber или Geometry Dash это обычно и не требуется (хотя иногда и бывает полезным), а здесь же несколько мини-игр основаны буквально на этом. Сначала у меня получалось не очень, но спустя 10-15 минут попыток мне удавалось натренироваться. В общем, пришлось немного попотеть. Хотя мне кажется, что тем, кто умеет играть в «настоящие» ритм-игры (по типу osu!/mania), Melatonin не вызовет трудностей.

Кстати, моя самая любимая мини-игра — офис, а нелюбимая — прыжки по телефонам.

В общем, интересная игрушка с приятной атмосферой. Художникам и композиторам респект, получилось действительно красиво. Советую попробовать.
Media is too big
VIEW IN TELEGRAM
После недолгого периода игры в Risk of Rain меня опять потянуло на ритм-игры, и я решил попробовать A Dance of Fire and Ice.

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

Как я уже говорил, у меня довольно специфический скиллсет в ритм-играх. Я бы назвал его «мышечная память + визуальная калибровка». То есть я запоминаю паттерны, вырабатывая на них мышечную память, а при игре полагаюсь на визуальные подсказки, чтобы контролировать темп. Если убрать одну из частей уравнения, мой скилл падает до уровня воробушка. Собственно, такая тактика работает и в Geometry Dash, и в Beat Saber, и до определенной степени тут. А вот с чем у меня ещё хуже, так это с координацией движений. Использовать несколько пальцев или несколько рук, чтобы прожимать какие-то более быстрые/сложные паттерны, для меня просто чёрная магия. И такое чувство, что я уже начинаю упираться в потолок своих возможностей.

На видео прогресс за ~4.5 часа игры (простите за плохой звук) (как видите, на длинных прямых участках я изо всех сил стараюсь не сбиться с темпа, при этом я смотрю на кружочки и делаю микроподстройки темпа нажатий). Ритм-геймеры, есть советы, как тренироваться, чтобы стать лучше? Пишите в комменты
Geometry Dash — отличный таймкиллер

Если зайти в мою библиотеку в стиме, то можно увидеть, что в Geometry Dash у меня наиграно больше 5000 часов. Но это не совсем так.

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

У Geometry Dash есть какой-то свой шарм, который заставляет тебя возвращаться к игре снова и снова. Динамичный, но при этом когнитивно лёгкий геймплей (не нужно погружаться в атмосферу, не нужно решать какие-то головоломки). Возможность прерваться почти в любой момент.

P. S. обновление 2.2 уже в этом месяце! не ждём, а готовимся
This media is not supported in your browser
VIEW IN TELEGRAM
Мы с товарищем обсуждали модели данных, а он их накидывал и связывал в каком-то редакторе. Выглядело это очень наглядно: вот таблица А, вот таблица Б, вот связи черз какие-то колонки и так далее. А потом коллега сгенеририровал на основе всего этого SQL и развернул всю эту красоту в PostgreSQL. Потрясающе! Конечно, схема была всем зашарина и досконально изучена. И что это за редактор такой!? Все просто: CodePen/JSFiddle от мира баз данных — dbdiagram.io. Для персонального использования бесплатен, можно импортировать/экспортировать SQL и генерировать картинки. Мне понравилось и вам советую ☺️
#db #sql #data

IT НИГИЛИЗМ 📘 TWITTER
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Experimental chill
Contest

Пописал тут контест от телеграма https://www.tg-me.com/contest/330. В целом задача -- всё, что написано в markup code в телеге -- определить, код ли это и какого языка программирования из 100 самых популярных. Как обычно, ни данных, ни условий тестирования не дали, классический телеграм.

Из уже существующий решений есть

* VSCode'овский https://github.com/yoeo/guesslang, прилагающий к нему https://github.com/yoeo/guesslangtools. Из хорошего, 55 языков поддерживает c 90%+ качеством, из плохого работает на больших кусках кода.

* Какая-то статья https://github.com/aliostad/deep-learning-lang-detection, утверждают 99%+ качества. Обучение у них на слишком хороших данных.

* Какие-то регексовские вещи, которые очевидно никогда не наберут 90%+ качества

Вторую я покрутил, повертел и получил тоже ~90% качества на средненьких таких данных.

Как брать данные

* https://libraries.io/
* https://huggingface.co/datasets/bigcode/the-stack
* https://sourcegraph.com/search -> Actions -> Export Results

В эпоху LLM, на hugging face собрали неплохой датасет, который я почему-то нашёл только в последние пару дней, чутка оттуда покачал, но особо много это не дало, а кластера для терабайтов у меня не было. В итоге использовал libraries.io и sourcegraph.

Собрал я 5M файлов, качал я это дело на 5TB машинке пару дней, github отдавал разным машинам в районе 50-100MB/s в зависимости проснулись ли прогеры из Сан Франциско :), много тротлили, но я их переиграл. Суммарно после дедупликации получилось 100GB кода.

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

.hh -> C++ и Hack

.p -> Gnuplot и OpenEdgeABL

.fs -> Forth и F#

У гитхаба есть неплохой алгоритм детекции таких disputes: heuristics.yml на регулярных выражениях. Целый день я сидел и фильтровал данные, помимо добавлял языки программирования, которых Github не знает.

Например, FunC и FIFT. В целом видна человеческая рука здесь по добавлению 2 языков программирования от уважаемого Николая. По всему интернету файлов существует в районе 1000 и спасибо sourcegraph, который смог это всё найти. Но мусора в расширениях .fc и .fift было предостаточно, выфильтровали :)

Далее обучение. Я взял guesslang и чутка крутил batchsize, hidden dnn layers и получил в среднем 88% аккуратности и 92.5% на топ50 самых популярных языках

В конце начинается самое интересное, а собственно, как достать markup comments телеграма? К сожалению, датасетов почти нет, tgstat.ru не сохраняет информацию об этом. Я покачал каких-то прогерских community и докручивал на маленьких данных.

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

Ещё, конечно, не забывайте, что любой текст это Markdown, поэтому чтобы различить одно от другого надо постараться. Докручивали уже disputes какими-то регекспами из heuristics.yml и логикой, мол, если строк мало, то вряд ли это эзотерический язык. Всё равно люди компилируют C код как C++, а Hack почти в природе нет, кроме как у Meta.

Самое сложное в конце было найти баланс, а что в общем-то авторы, хотят, что они вообще будут тестировать и какое распределение у всего и вся. Скорее всего будет 95% не языков программирования.

Последние полдня потратил на то, чтобы собрать tensorflow C++ с нуля и вкомпилить в .so, потому что принимать ничего другого они не хотят. Ну что ж, значит tensorflow. Скомпилировал. Отправил 600Mb .so файл.

Зато более менее работает, 2-3 ms на 4kb.

Делал я это дело 7-8 дней, из которых 3 полных часов по 10, ещё часа по 3-4 вечерами в оставшиеся дни.

Что будет, то будет. Ради фана и узнать что-то новое делал. Узнал о многих языках программирования вроде Raku, ICON, Keyman, LOGO.

И получайте почти красивую картинку confusion matrix.
Bottles — лучший способ запуска windows-игр на стимдеке

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

Очевидный вариант — использовать встроенный в SteamOS инструмент под названием Proton. Он позволяет запускать exe-файлы буквально в несколько кликов, достаточно просто добавить этот файл в steam как non-steam game и затем запустить его из библиотеки. Для простых кейсов работает очень даже хорошо.

Но как быть, если сборка игры не портативная, а предполагает запуск установщика? В таком случае Proton может доставить массу проблем. Дело в том, что Wine (который используется протоном под капотом) для запуска exe-файлов использует виртуальные окружения (виртуальные файловые структуры, виртуальные реестры и так далее), которые называются Wine Prefixes. Они позволяют изолировать окружения примерно так же, как это делает докер или гипервизор виртуальных машин (но немножко на другом уровне). Так вот, Proton настроен так, что в нём каждый запущенный файл создаёт и использует свой wine prefix. Из-за этого алгоритм установки игр с установщиком выглядит примерно так: возьми установщик, добавь его в стим, запусти, проведи установку, найди установленный exe-шник с игрой где-то в недрах wine, добавь его в стим, запусти. В итоге получается, что в стим добавлен и установщик, и сама игра. Причём удалять установщик из стима нельзя, ведь иначе удалится wine prefix и все файлы игры вместе с ним.

Bottles — это тоже обёртка над Wine. Но, в отличие от Proton, она даёт пользователю больше контроля над wine prefixes, при этом не теряя в простоте использования. Установить программу можно через встроенный магазин приложений на стимдеке Discover или с официального сайта. Здесь виртуальные окружения полностью отвязаны от exe-файлов, которые внутри них будут запускаться. Поэтому сначала нужно создать новое окружение (которое тут называют Bottle). После этого путём нехитрых мунипуляций запускаем установщик, используя созданную бутылочку. И вуаля, игра установлена. Теперь остаётся только добавить exe-шник для запуска игры в стим и наслаждаться. Ещё одно преимущество такой изоляции в том, что внутри существующей бутылочки можно запускать и другие exe-файлы, например установщики модов или DLC. Ну и всегда приятно осознавать, что окружение с файлами игры никуда не денется само по себе.
3 новых и необычных уровня в Geometry Dash

Floating Outskirts — это платформер внутри Geometry Dash. Кастомная физика, кастомные коллизии, десять уровней с атмосферными декорациями и интересными механиками (двойной прыжок, движущиеся объекты, подводные уровни, подбираемые объекты и много чего ещё). Если бы я не знал, что это всё в Geometry Dash, я бы даже и не подумал об этом. Но как автору удалось реализовать управление персонажем, если в игре доступно только 2 инпута? Используется хитрая система обработки нажатий: например, если держать нажатой кнопку влево, то кнопка вправо будет отвечать за прыжок (и наоборот). Сначала пришлось привыкать к такому, но я был удивлён, насколько интуитивным оказалось управление. Я попробовал сыграть уровень в Practice Mode и за час прошёл только ~60% (а потом у меня вылетела игра). Кстати, для прохождения уровня надо пройти все 10 этапов без единой смерти. Поэтому автор утверждает, что Floating Outskirts войдёт в топ-100 самых сложных демонов.

Piano Man — уровень, который завязан на ритмичность. В уровне используется 2-player mode, 2 кнопки соответствуют двум мелодиям в музыке. Требует отличной координации движений. Очень оригинальный концепт, мне зашёл. Играть не пробовал, я думаю не потяну. P.S. без декораций уровень выглядит вот так.

WHAT — уровень, почти полностью состоящий из 3д-анимаций, которые Spu7nix создавал в Blender-е и переносил в Geometry Dash покадрово с помощью самописного скрипта. Автор уже несколько лет расширяет представления о том, что возможно реализовать в Geometry Dash.
This media is not supported in your browser
VIEW IN TELEGRAM
Метрогенератор

Сетка представляет свой первый спецпроект.

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

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

Метрогенератор: setka.design/metro.

🕸 Сетка
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Яндекс
Media is too big
VIEW IN TELEGRAM
Зачем в Яндекс Карты добавили разметку? 🗺

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

🔴 Что ещё появилось? Например, 3D‑здания вдоль маршрута и новая камера, которая следует за курсором. Теперь она показывает больше дороги и дорожных событий впереди. Всё это поможет ориентироваться и на обычных перекрёстках, и на сложных развязках.

🔴 Где работает?
В пределах ТТК, на МКАД и крупных магистралях в Москве, а также в центральных районах и на основных магистралях Уфы, в центрах Петербурга, Волгограда, Екатеринбурга и Нижнего Новгорода.

Подписывайтесь 👉 @yandex
Please open Telegram to view this post
VIEW IN TELEGRAM
У Beat Saber существует две версии: для Windows (ПК) и для Oculus Quest («нативная»). С точки зрения моддинга это были совсем разные игры, моды от одной версии не подходили для другой. Исторически нативная версия значительно уступала ПК-версии по функциональности, но за последние год-полтора моддеры для нативной версии неплохо так сократили отставание.

Например:
- Сделали поддержку загрузки треков на ходу (раньше это можно было делать только с перезапуском всей игры). Это позволило портировать моды, скачивающие треки прямо не выходя из игры
- Сделали поддержку кастомного мультиплеера, в том числе и кросс-плей между нативной версией и ПК
- Сделали поддержку кастомных лидербордов (сейчас поддерживаются и BeatLeader, и ScoreSaber). Некоторым игрокам (например, мне) это важно для поддержания интереса: просто так бесконечно не поиграешь.
- Портировали несколько полезных модов для про-игроков, но которых останавливаться не буду.
- Портировали ReeSabers, мод для кастомизации сабель. Такой красоты нативная версия ещё не видела.
- Ну и наконец, сделали поддержку просмотра и записи реплеев. Если раньше из нативной версии нельзя было выжать ничего лучше трясущейся записи экрана с кривым FOV, то теперь качество видео практически не уступает записям с ПК. Абсолютно поразительный прогресс, раньше такое было сложно даже представить.

Да, это видео было полностью сделано на нативной версии игры
youtube.com/watch?v=6Eg5vQZNM40
Поднял VPN между своими компьютерами и стимдеком. Теперь я могу перекидывать файлы на стимдек и обратно, даже если они находятся в разных сетях.

Для этого я решил использовать Tailscale. Наверное, можно было использовать и другие решения, но я не умею их настраивать, а Tailscale мне советовали как юзер-френдли.

Вместо проприетарного встроенного сервера Tailscale я использовал опенсорсную альтернативу под названием Headscale, которую развернул в докере на одном из своих серверов. В принципе, ничего особо сложного в процессе установки не встретилось, но потупить часик в консольку всё равно пришлось. Особенно с тем, как разрешить подключение по SSH.

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

Теперь у меня есть одна общая виртуальная сеть на все мои устройства. С её помощью я могу зайти на стимдек по SSH или передать на него файлы по SFTP. Очень удобно для перекидывания скачанных игр на стимдек и забирания скриншотов / записей экрана обратно.

Процесс установки прошёл несложно и увлекательно, я считаю что не зря потратил несколько часов. Если захотите сделать так же, то рекомендую. Но при условии, что есть сервер где это всё поднимать и есть желание стать девопсом на час.
🎂 Сегодня у этого канала день рождения! Ровно 4 года назад (21 ноября 2019 года) я создал этот канал и написал первый пост.

Всего в канале сейчас больше тысячи постов (я не считал точно, но id у этого поста 1326). Я пролистал старые посты и прямо окунулся в те времена, это было прикольное ощущение. Наверное, для меня в них хранится гораздо больше ценности, чем для вас, мои подписчики, но, может быть, вам тоже будет интересно посмотреть мой старый контент (осторожно, местами кринж)

Со временем контент на канале менялся. Начинался он с типичного техно-шитпоста, но по мере роста количества подписчиков я всё больше уходил в «серьёзные посты». Возможно, потому, что мне казалось, что мои шитпосты слишком локальные и нишевые для 4400 подписчиков (именно столько их было на пике в сентябре 2020).

Поэтому в прошлом году я создал ещё один канал @LoskirsLive, в котором планка качества постов опущена почти до нуля. Зацените, оцените, подпишитесь если контент нравится (внимание: не подписывайтесь, если не нравится)

В общем, поздравляю всех нас!
Сравнил налог на доход в России и Нидерландах. В России шкала практически прямая, лишь превышение 5 млн в год облагается 15% вместо 13%. В Нидерландах же шкала прогрессивная и в пике достигает 52% (скорее стремится к ним). Нидерландский налог равен российскому на отметке ~€2550/mo, а при более низком доходе налог оказывается даже меньше.

30% ruling — это программа поддержки иностранных специалистов, которая уменьшает taxable income на 30%. Она начинает работать только с определенного уровня дохода, но и дает значительные льготы. Я ещё не изучал её подробнее, но определенно стоит.

Гугл-табличка тут, при построении я использовал npm-пакет dutch-tax-income-calculator
Недавно в университете у нас начался курс по базам данных. И это уже третий раз, когда я прохожу такой курс. До этого я уже изучал базы данных в Вышке и ИТМО.

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

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

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

Если у вас появились другие вопросы про учёбу в Нидерландах, то пишите их в комментариях, постараюсь ответить.
Вчера в универе прошёл CTF-ивент, это было невероятно круто.

Фактически это был мой первый CTF. Реверс-инжиниринг и другие подобные задачки меня интересовали уже давно, но никак не доводилось поучаствовать в ивентах.

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

Из интересных челленджей могу выделить несколько штук.
• В одном был дан PHP-сайт, который позволял загружать PNG картинки на сервер и давал на них ссылку. Флаг был спрятан на сервере в /etc/flag. Я обнаружил, что проверка типа файла реализована не по расширению, а по заголовку файла. Я сделал PHP-файл с PNG-заголовком (дописал в конец картинки <?php ?> и переименовал в .php), который успешно загрузил на сервер, а при переходе по ссылке код в нём запустился и выдал мне флаг.
• В другом был дан сайт, в котором нужно было быстро нажимать на подсвеченный квадратик на страничке. Таймаут на каждое нажатие был меньше секунды, так что было понятно, что руками тут тыкать бесполезно. Сначала я изучил протокол взаимодействия с сервером, он был реализован хорошо, с JWT подписями, так что скипнуть не получилось. Потом я решил написать серверный скрипт, который бы отправлял на сервер запросы в нужном формате, но потом мне пришла идея получше. Я просто написал в консоли скрипт, который эмулирует клики setInterval(() => document.querySelector('.red').click(), 10) 🤓
• Ещё в одном был дан дамп shell-сессии. Доставанием занимался сокомандник, я в это особо не вникал, но помню что юзался Wireshark. В дампе было запечатлено, как пользователь на сервере выводит в консоль публичный и приватный ключи, а потом питоновским скриптом шифрует флаг и выводит результат в консоль. От нас требовалось написать обратный скрипт, который берет зашифрованный текст и расшифровывает его приватным ключом.
• Было несколько ИРЛ-челленджей, но я в них не участвовал. В одном из них надо было взломать замок (отмычками), в другом — расшифровать текст шифром Виженера, подсказки к которому надо было найти на этаже.
• Ещё был челлендж на эксплуатацию Race condition, который давал больше всего очков. Я хотел его сделать, но в итоге руки не дошли. На самом деле было много челленджей, которые в принципе несложные, но на которые просто не хватило времени. За 5 минут до конца я весь дёрганый приступил к реализации очередного челленджа в отчаянной попытке не вылететь из топ-3 в последний момент, но опоздал с решением на полторы минуты 🙅‍♂️

После основной части был финал, в котором топ-3 командам было дано полчаса, чтобы взломать сайт и подменить страничку на свою. На сайте был развернут инстанс Monitorr, задумка была в том, чтобы найти в интернете информацию об уязвимости и правильно её проэксплуатировать. Этот кусок программы оказался настолько дырявым, что я пытался эксплуатировать две неправильные уязвимости, а до нужной даже не добрался 🧃
Но в итоге никто не успел взломать сайт, и места распределились по количеству очков.

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

В общем, всё вышло гораздо круче, чем я себе мог даже представлять. Если идёте на CTF, то обязательно зовите! (особенно ИРЛ, но тут как получится ☔️)
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/07/08 01:27:18
Back to Top
HTML Embed Code: