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

Говнокод

Код, за который должно быть стыдно

Сначала показывать
Порог рейтинга
Уровень сложности

Низкий порог входа, высокий риск — как уязвимость в Lovable открыла данные тысяч пользователей

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров606

Платформа Lovable, позиционируемая как low‑code решение для создания веб-приложений и сайтов, где основное взаимодействие с системой происходит через чат с искусственным интеллектом, столкнулась с критической уязвимостью, связанной с RLS-политиками. Она позволила получать и изменять данные без аутентификации — сотни проектов оказались под угрозой.

Читать далее

Новости

Как я писала DSL

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров7.8K

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

Меня давно интересуют инструменты для обеспечения работы языков программирования - лексеры, парсеры, интерпретаторы, компиляторы и всякое такое. Настолько интересуют, что уже в конце первого курса я решила, что в конце обучения буду защищать свой маленький язык программирования. Увы, создание собственного языка оказалось делом довольно сложным, из-за чего пришлось искать новую тему. Примерно на третьем курсе мы изучали в университете Kotlin, который быстро запал мне в душу и стал моим любимцем (после Lua). Мне захотелось написать дипломную именно на нём, поэтому я стала думать, что бы такое написать. Так как меня интересовал геймдев, я подумала: "Почему бы не создать свой движок для текстовых квестов как альтернативу Ren'Py?". Подумала и написала простой движок. Увы, в нём не было научной новизны, да и писать под него было неудобно, ну хоть получила опыт создания язычков, когда дала жизнь своему Av, про который писала в прошлой статье.

В университете мне сказали, что подобная тема совершенно не подходит для защиты, после чего я снова задумалась, что бы написать. Вспомнила, что довольно неплохо знакома с ANTLR, и решила написать DSL, который позволит превращать классы, которые сгенерировал ANTLR, в AST Kotlin. Эта мысль возникла довольно внезапно, но мне быстро стало интересно, во что она может превратиться. Как писать такой DSL, а главное, зачем? Как я объясняла нашей завкафедрой, подобный инструмент позволит автоматически переводить кодовые базы с разных языков на один - мой любимый Котлин. Кроме того, это поможет поддержать авторов новых языков программирования, поскольку он позволяет не писать свой рантайм, а положиться на уже существующий JVM, ведь Котлин исполняется на нём.

Читать далее

Kubernetes на кончиках пальцев

Уровень сложностиПростой
Время на прочтение9 мин
Количество просмотров3.1K

Привет, на CKA курсе туторы нарочито вдалбливают последовательность действи: set the cluster, set the namespace, set the pod... И все это происходит в консоли, используя kubectl - консольная утилита для управления k8s кластерами. Мне настолько это вдолбилось что я решил это автоматизировать. У меня уже был интересный проект автоматизации ssh подключений (sshto), не долго думая, я взял его за основу и написал kui. Это bash скрипт, dialog обёртка для kubectl. У диалога есть приятная фича присваивать горячку каждому пункту меню по первому символу. Это очень удобно, в результате весь k8s кластер оказывается у вас на кончиках пальцев.

что там на пальцах

Как я oauth proxy навайбокодил

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров2.3K

Чем хорош TRMNL — так это возможностью выводить что-то своё за считанные минуты.

Но сервер позволяет только простые GET и POST запросы, то есть в лоб OAuth2 не реализуешь. Оно и понятно: они не очень хотят хранить данные авторизации для всех.

Но всегда можно обойтись малой кровью: например, бесплатным CloudFlare.

Только повайбкодить придётся

CMake: Подключение riscv-arch-test для тестирования имплементации rv32

Время на прочтение6 мин
Количество просмотров981

При написании своей VM для RISC-V возникла необходимость в тестировании.
Сначала я пытался писать юнит-тесты самостоятельно, но выходило, что я просто копирую логику из основной.

И по сути тестирую не соответствие спецификации, а соответствие моему пониманию.
Через некоторое время я наткнулся на официальный набор тестов для RISC-V и решил их использовать.

Это помогло найти несколько багов в моём коде.

Что ж.

Путеводитель C++ программиста по неопределённому поведению

Уровень сложностиСложный
Время на прочтение3 мин
Количество просмотров13K

Путеводитель C\+\+\ программиста по неопределённому поведению


Вашему вниманию предлагается полный список разделов электронной книги (12 из 11 :)), посвящённой неопределённому поведению. Книга не является учебным пособием и рассчитана на тех, кто уже хорошо знаком с программированием на C++. Это своего рода путеводитель C++ программиста по неопределённому поведению, причём по самым его тайным и экзотическим местам. Автор книги — Дмитрий Свиридкин, редактор — Андрей Карпов.

Читать дальше →

Как я собственный язык на КуМире писал

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров7.1K

Привет, Хабр!

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

(картинка позаимствована с одного из официальных туториалов)

Читать далее

Интересный case

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров1.3K

Ковыряясь в скриптах наткнулся на интересный case. Чё тут интересного то? Подсказка, это не цикл. Да, вот эти вот break'и выглядят тут совершенно инородно. Возможно когда-то этот кусок эм, кода работал в цикле и break каким-то боком был нужен? Но сейчас цикла нет а brake есть. Бомбит? Бомбит до такой степени что я решился писнуть небольшую статейку про case.
На 100%-ю полноту освещения не претендую, все мои эксперименты лишь очень поверхностные но несколько точек постараюсь расставить.

Рассмотрим case

1С: Дичь (лучшее из моей коллекции)

Уровень сложностиПростой
Время на прочтение2 мин
Количество просмотров67K

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

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

Много лет назад, когда во мне горел юношеский абсолютизм, я реагировал на "плохой код" резко и негативно. Всё какие-то стандарты изучал и пропагандировал. В нашей среде стандартом код разработчиков из самой 1С обычно считается. А одна из высших оценок качества кода - если он не отличим от написанного вендором. Ну вот и я такой был.

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

Да, что ещё совершенно точно: при сильно изменившихся стандартах не сильно изменился результат, т.е. продукт :)

Так, отвлёкся... Переболел я "правильными стандартами", надеюсь больше мне это не грозит, пусть молодёжь тешится. И отношение моё к чужому коду сразу изменилось - он стал мне интересен. Как диалекты одного и того же языка, фольклор народов мира и, в конце концов, жизненные истории (да, в небольшом куске кода иногда целую историю увидеть можно).

Ну и коллекционировать эти куски кода начал. Чтобы не потерять - канал в телеге создал. Иногда там и мой код бывает, за который мне стыдно (порой).

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

Смотреть картинки

«У нас кончились столбцы» — Лучшая, худшая кодовая база

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров3.1K

Оу, таблица merchants2? Ну, у нас кончились столбцы в merchants, так что мы сделали merchants2.

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

Читать далее

Этот код не то, чем кажется: что творится на мониторе в фильмах и сериалах

Уровень сложностиПростой
Время на прочтение8 мин
Количество просмотров7.6K

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

Впрочем, даже в дремучие с этой точки зрения времена кинопроизводства 2000-х и 2010-х находились режиссеры, которые заботились об аутентичности и функциональной адекватности строчек кода, которые мелькали на экране порой всего на долю секунды. Такие фильмы снискали заслуженное уважение настоящих IT-специалистов.

В этой статье мы рассмотрим все три типа кода, который появляется в фильмах: бессмысленный, странный и адекватный рабочий.

Читать далее

Когда устал от алгоритмов: Ревью кода на собеседовании

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров12K

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

Читать далее

Эзотерические языки программирования: панорамный обзор

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров8.7K

Несмотря на то, что программирование прочно вошло в нашу жизнь, многим оно до сих пор кажется какой-то совершенно непонятной магией. Что уж говорить о прежних временах, когда даже простой процесс хакинга в кино изображали с разными психоделическими спецэффектами, чтобы достичь «вау-эффекта».

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

Прыгнуть в бездну

Ближайшие события

Вычисляем миллиардное число Фибоначчи менее чем за 7 секунд

Время на прочтение3 мин
Количество просмотров23K

Мы будем считать 1000,000,000 число Фибоначчи со всеми цифрами. Для этого я буду использовать продвинутый алгоритм для поиска чисел Фибоначчи. Тут не будет базовых алгоритмов на подобии матричного возведения в степень и проще. Но эта статья будет понятна и школьнику :-)

Читать далее

Как я писал простой язык конфигурации и в итоге перемудрил

Уровень сложностиПростой
Время на прочтение24 мин
Количество просмотров6K

Статья о том, как я во время каникул писал-писал язык для описания конфигураций, да и переборщил с объёмом

Читать далее

Новый убийца Си опроверг арифметику

Уровень сложностиПростой
Время на прочтение16 мин
Количество просмотров44K

Что Вы знаете про эзотерические языки программирования? Они кажутся вам странными? Смешными? Интересными? Этот язык не из таких – он не эзотерический. Если смех действительно продливает жизнь, то после этой статьи Вы станете бессмертным.

Продлить жизнь

Enlarge your BASHUI for free! Как увеличить потенциал производительности?

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров1.6K

Выдалась свободная минутка и я решил потрогать немного свой bashui. Там еще трогать не перетрогать но обо всем по порядку. Тех кто не знаком с bashui прошу сюда. А в этой статье я решил затронуть злободневную тему повышения потенциала производительности на примере своего bashui.

Увеличить потенциал

Рефакторинг — это как весенняя уборка: никто не хочет её начинать, но все ценят чистоту и порядок после её завершения

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров3.6K

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

Итак, что я имею сейчас? Что стало с кодом, который не рефакторили год? Вопрос риторический, и так понятно, что он превратился в легаси.

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

Читать далее

Бобры-п[р]огромисты

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров15K

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

Бобер-HRобер: я увидела как грызете дерево в соседнем лесу, не хотите перебраться к нам? У нас деревья синие и потолще ваших, зеленые деревья нынче не в моде.
Бобер-погромист: хм, наверное нет, толщина текущих деревьeв меня устраивает.

Бобер-HRобер: ну вы всё-таки приходите, мы заложили пару делянок, где самые опытные бобры будут распиливать очень старую монолитную сосну с ветками длиной 98 см, на доски очень модной нынче длины 23 см, а еще у вас также будет возможность повлиять на толщину досок длиной 26 см.
Бобер-погромист: а вот это интересно, отправляйте соловья.

Через неделю, на комфортабельной полянке где-то в синем лесу.

Senior-Бобер: Итак, вы считаете себя хорошим бобром?
Бобер-погромист: Всё верно. Грызу деревья разной толщины уже лет двадцать.

Lead-Бобер: А ветки какой длины предпочитаете?
Бобер-погромист: Ветки 17см самые вкусные

Бобры идут, бобрам дорогу!

Почему проверять результат вызова malloc c помощью assert плохая идея

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров8.9K

malloc и assert


Указатель, который вернула функция malloc, необходимо проверить перед использованием. Неправильным решением будет использовать для этого макрос assert. В этой статье мы разберём, почему это является антипаттерном.

Читать дальше →
1
23 ...