Перейти к публикации
  • Сейчас на странице   Всего пользователей: 0   (0 пользователей, 0 гостей)

Rooster

Программирование, т. 8

  

315 пользователей проголосовало

У вас нет прав на голосование в этом опросе, или на просмотр результатов опроса. Пожалуйста, войдите или зарегистрируйтесь для голосования в опросе.

Рекомендованные сообщения

ты тестировать должен свой код, а не чужую интеграцию.

неа

 

йоу мужики мужичеллы мужланы

 

нормальный ли паттерн хранить в таблице маркер "занятости" записи или это как-то иначе, по-взрослому, решается? база постгре

 

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

 

сейчас у меня есть поле-булеан "being_processed", которое ставится в тру перед началом обработки записи и в фолс по освобождению и уважается всеми остальными желающими поработать с нею, но я вижу в этом потенциальные проблемы (навсегда остаться в состоянии being_processed в случае какого фейла, например) и вообще есть душок говнокодерства, но вроде пока обеспечивает то, что от него требуется

у скл сервера optimistic concurrency делается через колонку типа timestamp которая рефрешится склсервером при каждом изменении строки и ормка имеет возможность упасть, если видит, что между чтением и записью кто-то поменял строку (верней технически оно обновляет строку с фильтром не только по айди, а еще и по таймстемпу, а потом смотрит, сколько строк обновилось. Если база ответила, что 0, значит кто-то либо удалил твою строку, либо апдейтнул до тебя)

гугл говорит, что у постгре на это вроде используют xmin, xmax

https://www.postgresql.org/docs/9.1/ddl-system-columns.html

 

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

 

если без орм использовать sql то как в ms сделать даный оптимистик лок? как будет выглядеть запрос?


 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение
(изменено)

 

Воу, до парня дошло, что писать без бесконечных классов/интерфейсов гораздо проще и качественнее  :ohpalevo: . Норм. Мб еще лет через 5 дойдет, что можно и типы не описывать, а писать на божественном js'e c динамической типизацией и код от этого только выйграет.

 

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

 

то что энтерпрайз софт это overengineered хрень это понятно и такое не всегда особо интересно писать, но у него такая мерзкая кодбаза не потому что его классами и интерфейсам раздули до такого размера, а потому что они сука огромные и классы с интерфейсами (а как результат и типы тут абсолютная необходимость) устанавливают правила взаимодействия разных компонентов большой системы, где эти компоненты ещё и пишутся разными людьми, люди эти ротируются постоянно, и ты ещё и таким образом делаешь определённые заделы на будущее тк не знаешь что куда приклеют через день/месяц/год

поэтому каждый чих описывают интерфейсом или подобным чтоб на уровне компилятора невозможно было отправить куда-то совсем уж полную хуйню, поэтому энтерпрайз юзает только типизированые языки (в частности 90% это джава или сшарп) чтоб свести до минимума кол-во тестов в рантайме чтоб у тебя большинство ошибок подсветилось в ИДЕ сразу же, поэтому документируют каждую функцию и переменную даже если и так очевидно что оно делает/принимает/отдаёт, поэтому даже отчасти прижилась идея исключений которые ты обязан обрабатывать в джаве не смотря на то что это довольно тупорылая затея

 

грубо говоря, ты по-другому его толком не сделаешь. строго описаные классы нужны для ОРМ-ок, интерфейсы для гарантированой совместимости разных компонентов которые выполняют одну задачу по-разному или просто похожие задачи. тестировать большие системы куда сложнее и поэтому языки берутся такие чтоб у тебя компилятор и статический анализ по максимуму отлавливали всякой хуйни чтоб максимально уменьшить потенциальные падения прода из-за рантайм ошибок которые как это любят описывать в бизнесе "1мин простоя стоит много кккк"

 

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

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

это не говоря уже о том насколько очевидно здравомыслящим людям чисто из размышлений в вакууме что например функция cache() не должна выполнять три разных задачи трёх разных типов: достать объект, чтение и запись. если не из-за безопасности выполнения, то как минимум из-за читаемости кода, потому что какой-нибудь поиск всех вставок в словарь должен осуществляться или через ctrl+f "insert" или если интересуют все файлы то через "Find All Usages" на этой самой функции вставки чтоб тебе такие поиски не выплюнули 20 мусорных вызовов для чтения, но это уже так, лирическое отсутпление


Изменено пользователем TheDeadSkin

Поделиться сообщением


Ссылка на сообщение

короче, прочитав все написанное, я так понял, что в конкретно моем практическом случае (django+postgre) наилучшим решением будет использование select-for-update. может кто-то подтвердить?

sonac понравилось это

Поделиться сообщением


Ссылка на сообщение

чет вы как-то все переусложняете по поводу локов в таблице, есть же просто row-level лок в постгре, просто в каждой транзакции лочишь и остальные будут ждать, пока ты отпустишь, собсна: https://www.postgresql.org/docs/11/explicit-locking.html

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

13.3.4 по твоей же ссылке

 

это не значит что это не подходит, просто тут тоже явно не тривиальная задача

Поделиться сообщением


Ссылка на сообщение

чет вы как-то все переусложняете по поводу локов в таблице, есть же просто row-level лок в постгре, просто в каждой транзакции лочишь и остальные будут ждать, пока ты отпустишь, собсна: https://www.postgresql.org/docs/11/explicit-locking.html

не следующей странице скидываю я

Поделиться сообщением


Ссылка на сообщение

 

ты тестировать должен свой код, а не чужую интеграцию.

неа

 

йоу мужики мужичеллы мужланы

 

нормальный ли паттерн хранить в таблице маркер "занятости" записи или это как-то иначе, по-взрослому, решается? база постгре

 

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

 

сейчас у меня есть поле-булеан "being_processed", которое ставится в тру перед началом обработки записи и в фолс по освобождению и уважается всеми остальными желающими поработать с нею, но я вижу в этом потенциальные проблемы (навсегда остаться в состоянии being_processed в случае какого фейла, например) и вообще есть душок говнокодерства, но вроде пока обеспечивает то, что от него требуется

у скл сервера optimistic concurrency делается через колонку типа timestamp которая рефрешится склсервером при каждом изменении строки и ормка имеет возможность упасть, если видит, что между чтением и записью кто-то поменял строку (верней технически оно обновляет строку с фильтром не только по айди, а еще и по таймстемпу, а потом смотрит, сколько строк обновилось. Если база ответила, что 0, значит кто-то либо удалил твою строку, либо апдейтнул до тебя)

гугл говорит, что у постгре на это вроде используют xmin, xmax

https://www.postgresql.org/docs/9.1/ddl-system-columns.html

 

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

 

если без орм использовать sql то как в ms сделать даный оптимистик лок? как будет выглядеть запрос?

 

у тебя таблица допустим

User (Id bigint, Label tamestamp, Login nvarchar(100))

хочешь поменять юзеру логин. Селектишь его целиком, получаешь свой объект юзера (с таймстемпом на моменет чтения) пусть в переменную u

дальше происходит что угодно, ты базу не держишь

 

когда ты собрался его сохранять, ты пишешь склку вида

update User
set Login = {u.Login}
where Id = {u.Id} and Label = {u.Label}

select @@rowcount

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

если ты получил 1, значит всё прошло ок, таймстемп не поменялся

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

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

 

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


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

Поделиться сообщением


Ссылка на сообщение
(изменено)

Хватит уже про cache() :trollface: , думаю при желании такую можно и на шарпе написать. 

 

 

 

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

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

 

 

 

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

Ну и сказки про гарантии это такое. Вот статья где про это пишется.

https://medium.com/javascript-scene/the-shocking-secret-about-static-types-514d39bf30a3

Ну и вывод, типа норм ребята тесты юзают, а не статику.

"You want to reduce bugs? Use TDD. You want useful code intelligence tools? Use static types."

 

Вообще мне немного лень реально прям спорить


Изменено пользователем .felix

Поделиться сообщением


Ссылка на сообщение

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

 

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


 

 

 

с названия статьи орнул. ШОКИРУЮЩАЯ ПРАВДА О СТАТИЧЕСКИХ ТИПАХ. реально был в шоке узнать, что даже со статик тайпами бывают баги. я думал ща поставлю двоеточие и стринг - и все, багов больше не будет. 

Поделиться сообщением


Ссылка на сообщение

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

TemplateRef, ElementRef, FormGroup, ITableDTO, Response<T> 

шокеч


have courage and be kind

  😈🫀💋 🩸👣🤌🏿🦄 🐝 ☄️❣️ 💕 💞❤️😈

 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖

220941652_Annotation2021-03-20123345.jpg.23dcff343d6a377badf433b20f5271fd.jpg

💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 💖 

Поделиться сообщением


Ссылка на сообщение
(изменено)
божественная динамическая типизация для любой системы такого рода это божественное говно из жопы

 

 

Не надоело каждый раз расписывать стены про динамическую типизацию? Психологическая травма чтоли?)

 

P.S. cache()  топчик  :trollface:   , когда нибудь ты это поймешь)


Изменено пользователем fessnik

Поделиться сообщением


Ссылка на сообщение

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

тут например 150к за год https://geekbrains.ru/geek_university/python

а тут 45к за 4 месяца https://skillbox.ru/python/

мб у кого то был опыт платных курсов? подскажите что нибудь. в 1 посте про платные курсы ничего не нашел.

Поделиться сообщением


Ссылка на сообщение

 

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

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

 

во-первых котлин императивен, скала функциональная

во-вторых у тебя какие-то мисконцепции о функциональщине по-моему, или же я не так понял что ты имел ввиду

 

функциональщина (хаскел, фшарп, скала) ОЧЕНЬ строгая и ОЧЕНЬ статическая

все эти языки знают абсолютно все типы на этапе компиляции

 

максимум не совсем статического с т.з. написания кода что там есть это аналоги var/auto, которые есть и в джаве/сшарпе

мало того не знаю как в джаве, но в шарпе много чего можно без типов писать, например лямбды в формате "x => a + b", но только если типы очевидны из контекста, тоесть

var lmbd = x => a + b; // хуй

Func<int, int, int> = x => a + b; // норм

Func<double, int, double> = x => a + b; // тоже норм

Func<double, int, int> = x => a + b; // хуй ибо неявное приведение дробного числа к целому

Func<double, int, int> = x => (int)(a + b); // норм

List<double> list = ...;

var list2 = list.Select(x => 2 * x); // тоже норм. входной тип подтягивается из list. int * double -> double даёт нам тип возвращаемый лямбдой; как результат list2 детектится как IEnumerable<double> и определяетя var-ом при компиляции

 

но эти фичи это определённые упрощения, а не отказ от статической типизации как таковой

ты всё ещё не можешь в функцию принимать что-угодно

 

Ну и сказки про гарантии это такое. Вот статья где про это пишется.

https://medium.com/javascript-scene/the-shocking-secret-about-static-types-514d39bf30a3

Ну и вывод, типа норм ребята тесты юзают, а не статику.

"You want to reduce bugs? Use TDD. You want useful code intelligence tools? Use static types."

 

Вообще мне немного лень реально прям спорить

статьи подобные не особо показательные, их замеры говно

1) они ничего не меряют в самом процессе написания кода т.к. багрепорты идут по готовому продукту и ничего не понятно с процессом написания/дебаггинга

2) 100+ звёздочек такой себе показатель для фильтра, куда актуальнее размер проекта. ставлю левую булку что 100* проекты на джаве или с++ в среднем намного больше чем в среднем такие же жс проекты

3) делать тесты в статике никто не запрещает, схуяли это подаётся как альтернатива? тесты нужны в обоих случаях.

4) один хуй по голой стате фп >> ип, а статик >> динамик, и это даже не смотря на то что №1 по кол-ву багов это ебучий монстр С++ который вместе с С надо выбрасывать из всех подобных сравнений т.к. они не есть виабельными альтернативами джавам или джаваскриптам для 99% задач где ты думаешь о нормальных языках как кандидатах

 

а про гарантии это не сказки. вот все говорят о тестах типа

загвоздка в том что в динамике сложнее тестить типы нежели нажать кнопку компиляции. тебе надо тестить типы в добавок к тому что ты тестишь ту самую "program correctness"

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

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

Поделиться сообщением


Ссылка на сообщение

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

тут например 150к за год https://geekbrains.ru/geek_university/python

а тут 45к за 4 месяца https://skillbox.ru/python/

мб у кого то был опыт платных курсов? подскажите что нибудь. в 1 посте про платные курсы ничего не нашел.

Тебе сначала нужны основы программирования выучить. Выучить язык тебе ничего не даст. Это как не уметь разговаривать и при этом учить английский. Выучиваешь основы для начала, потом язык чтобы знать правила по которым он работает. И идешь делать велосипеды или повторяешь как обезьяна проекты. Потом пробуй в этих проектах что нибудь изменить и посмотреть что произойдет. Платные курсы, что первые, что вторые лежат на торрентах, можешь скачать посмотреть. Но они как правило научат тебя делать только те вещи, которые показывают на курсах, но как только захочешь сделать шаг влево или вправо у тебя будет ступор и полное незнание что делать. Во вторых что именно ты хочешь делать на питоне? Бекенд, ботов писать или обучать искусственный интеллект?

Tpyna4ek понравилось это

 

Жиза для любопытных

Чекнул = пидор

 

Поделиться сообщением


Ссылка на сообщение

Психологическая травма чтоли?)

не без этого

 

после работы с пхп5, питоном, матлабом (который кстати самый норм из этого сброда) и немного жс, я ебал в рот динамику потому что её невозможно нормально дебажить даже имея утилки для этого

да даже ебаный с++ проще дебажить тк ты никогда не чекаешь что какого типы и ищешь только проблемы в логике

 

cache() топчик :trollface: , когда нибудь ты это поймешь)

когда-нибудь тебе надо будет найти три вызова вставки в кеш а вместо этого ты будешь перебирать через 50 вызовов чтения

Поделиться сообщением


Ссылка на сообщение

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

Поделиться сообщением


Ссылка на сообщение

короче, прочитав все написанное, я так понял, что в конкретно моем практическом случае (django+postgre) наилучшим решением будет использование select-for-update. может кто-то подтвердить?

всегда это по дефолтну для данной проблемы используем

 

 

ты тестировать должен свой код, а не чужую интеграцию.

неа

 

йоу мужики мужичеллы мужланы

 

нормальный ли паттерн хранить в таблице маркер "занятости" записи или это как-то иначе, по-взрослому, решается? база постгре

 

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

 

сейчас у меня есть поле-булеан "being_processed", которое ставится в тру перед началом обработки записи и в фолс по освобождению и уважается всеми остальными желающими поработать с нею, но я вижу в этом потенциальные проблемы (навсегда остаться в состоянии being_processed в случае какого фейла, например) и вообще есть душок говнокодерства, но вроде пока обеспечивает то, что от него требуется

у скл сервера optimistic concurrency делается через колонку типа timestamp которая рефрешится склсервером при каждом изменении строки и ормка имеет возможность упасть, если видит, что между чтением и записью кто-то поменял строку (верней технически оно обновляет строку с фильтром не только по айди, а еще и по таймстемпу, а потом смотрит, сколько строк обновилось. Если база ответила, что 0, значит кто-то либо удалил твою строку, либо апдейтнул до тебя)

гугл говорит, что у постгре на это вроде используют xmin, xmax

https://www.postgresql.org/docs/9.1/ddl-system-columns.html

 

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

 

если без орм использовать sql то как в ms сделать даный оптимистик лок? как будет выглядеть запрос?

 

у тебя таблица допустим

User (Id bigint, Label tamestamp, Login nvarchar(100))

хочешь поменять юзеру логин. Селектишь его целиком, получаешь свой объект юзера (с таймстемпом на моменет чтения) пусть в переменную u

дальше происходит что угодно, ты базу не держишь

 

когда ты собрался его сохранять, ты пишешь склку вида

update User
set Login = {u.Login}
where Id = {u.Id} and Label = {u.Label}

select @@rowcount

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

если ты получил 1, значит всё прошло ок, таймстемп не поменялся

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

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

 

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

 

всё, понял, крутяк

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

 

тут я отвечу - чтобы не писать как в джаве ВСЁ, даже то что тривиальное

как в скале имплиситы - чтобы в некоторых случаях делать код читаемее.

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

это трейдофф - абсолютный контроль над всем который требует этот контроль прописать

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

 

плохо когда одна магия

плохо когда один контроль

хорошо когда баланс

 

PS: все больше понимаю насколько ахуенная скала. щас вот еще третью версию через 3-5 лет запилят и вообще кайфушки будут


 

очень крутые котейки

RqvSzvr.png


Кому-то пизды дал - нужно сделать скрин обязательно. (с) Solo

Поделиться сообщением


Ссылка на сообщение

125/100


Shaman.png.0cdd33d48561cd068bb3c5ee78289381.png Anna.jpeg.03c9b49363298ceec256500a5d522f7d.jpeg Nigga.jpg.f807f2556bdbf68452292a9301494591.jpg

 

Поделиться сообщением


Ссылка на сообщение

плохо когда одна магия

плохо когда один контроль

хорошо когда баланс

 

ты физ дпс забыл, дебик

`KV понравилось это

Поделиться сообщением


Ссылка на сообщение

Украл тут Ультимейт идею для практики в EE (хотя по идее нашему универу по студакам должны давать) перенес настройки с комьюнити на пару месяцев отставшей хуе мое

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

https://i.imgur.com/ZaB6fUT.png

 

инбифо очередной срач по цветовой схеме

 

Поделиться сообщением


Ссылка на сообщение

не смог прочитать код, так как ослеп от светлой темы

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...