Программирование

Ответить в тред Ответить в тред
Check this out!
Костылей и велосипедов тред Аноним 30/08/20 Вск 10:23:45 17924521
DE7CE755-AEEE-4[...].png 26Кб, 371x439
371x439
Бывало такое, что вы писали код сами, а потом обнаруживали какую-то супер годноту, которая делает всё тоже самое, но лучше?

Приведу некоторые примеры из своего опыта

1. Долго думал, как настроить связь между двумя приложениями, написанными на разных языках, сделал адовый пиздец через Linux Pipe файлы, лол. Потом узнал, что существуют MQ сервисы, но потом просто взял и переписал всё, используя Redis и pub/sub

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

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

Не хотел использовать тесты, потому что лень их писать.

Теперь пишу простой тест, который вызывает функцию при нажатии на кнопку, и проверяет что она не выдала никаких ошибок, и вместо нажатия кнопки запускаю тест из консоли. ЭТО ОХУЕННО, АНОН! Практически без затрат усилий я резко повысил стабильность приложения.

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

3. Не знал, что можно использовать json поля в postgres и для каждого юзера создавал отдельные таблицы типа settings. Теперь всё это храню по возможности в одном json/jsonb поле.
Аноним 30/08/20 Вск 10:51:28 17924602
.
Аноним 30/08/20 Вск 12:43:25 17925613
>>1792452 (OP)
Бывает наоборот. Трудную задачу решаешь старательно и ОЧЕНЬ долго. Результат довольно сложный, но хороший. Смотришь, ну так на всякий случай, что уже сделано по этой теме: "Неужели никто не сделал это лучше и продуманней?". И видишь такой трэшь, что кровь из глаз брызжет. Теряешь веру в человечество. А веры в грёбанное ИТ никогда и не было
Аноним 30/08/20 Вск 12:49:08 17925664
>>1792561
А что ты делал из подобного?
Аноним 30/08/20 Вск 18:56:38 17928865
>>1792452 (OP)
Было много подобных случаев, но конкретно вспомнить почти ничего не могу.
Запомнился один, как в универе нужно было написать курсач-сайт, и я решил его делать на питоне, который начал тогда недавно учить. На тот момент из вебни знал только немного голого пхп без фреймворков (в основном дрочил плюсы), и решил, что на питоне на голом cgi с дикой связкой с плюсами тоже так можно. Я с нуля изобрёл роутинг и шаблонизаторы, всё было очень лохматым и было кое-как связано, а правки вносить было очень больно, ну и MVC там не пахло. А затем я наткнулся на Flask и чуть не обкончался от того, несколько простой бывает жизнь.
Аноним 31/08/20 Пнд 14:16:08 17936786
>>1792452 (OP)
>можно использовать json поля в postgres и для каждого юзера создавал отдельные таблицы типа settings
Зачем? Почему не создать 1 таблицу user_settings и по айдишникам не хранить там настройки для каждого пользователя? И зачем их в жсон паковать?
Аноним 31/08/20 Пнд 15:46:22 17938257
>Долго думал, как настроить связь между двумя приложениями, написанными на разных языках, сделал адовый пиздец через Linux Pipe файлы, лол. Потом узнал, что существуют MQ сервисы, но потом просто взял и переписал всё, используя Redis и pub/sub

Что за приложения?
Аноним 31/08/20 Пнд 20:50:04 17941118
>>1792452 (OP)
>Теперь пишу простой тест, который вызывает функцию при нажатии на кнопку, и проверяет что она не выдала никаких ошибок, и вместо нажатия кнопки запускаю тест из консоли.
Потом хуяришь в продакшен и получаешь по ебалу, так как юзер жмёт кнопку и нихуя не происходит, а потом оказывается, что кнопка не к тому методу приколоченв или ещё что. И ты такой, но...я же тестировал...тесты, ряяя
Аноним 01/09/20 Втр 01:58:46 17943019
>>1792452 (OP)
Я писал графическую библиотеку для иксов года 23 тому назад. Затем увидел Gnome и Qt и... бросил. Но тогда я был пацаном с небольшим опытом и не очень понимал как правильно обрабатывать очередь сообщений от X-сервера. Сейчас бы я конечно нагнул и Qt и тем более Gnome. Но интерес и задор угасли с тех пор. Есть и более интересные задачи.
Аноним 01/09/20 Втр 03:12:43 179431810
Аноним 01/09/20 Втр 03:17:03 179432111
>>1793678
> Тред костылей и велосипедов
> Зачем нужны костыли и велосипеды?
ЗАТЕМ
Аноним 01/09/20 Втр 03:24:35 179432712
>>1794318
Я писал графическую библиотеку 25 лет назад для работы в паскале в 256-ти цветном режиме и соответствующий ей графический редактор, потому что интернета не было и я даже не знал что
в этот момент драйвер bgi уже существовал.

У меня хотя бы оправдание есть. А у вас?
Аноним 01/09/20 Втр 04:38:42 179435713
>>1794327
>оправдываться на ссаче в 2k21 году
Дядь, плиз. Тогда время другое было. Был ты, твой БК 'Байт' и мануал по бейсику, который шел с ним в комплете. Всё. Кто-то штудировал этот мануал, потел и развивался, а кто-то, как я, ходил в подвал к местному барыге записывать игоры на кассеты. В результате ты 25 лет назад писал либу, а я в 2k21 питаюсь вкатиться в хуйти.
Аноним 01/09/20 Втр 04:58:50 179437314
>>1792452 (OP)
в 2000х постоянно изобретал очереди: в БД, отдельно в программе, как отдельный сервис

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

Ещё в сосничестве пилил свой транслятор ассемблера. Потратил с полгода времени вникуда.
Аноним 01/09/20 Втр 04:59:09 179437415
>>1794111
Вот, пожалуйста, полюбуйтесь - последователи слабой динамической типизации и интепретируемых языков.
Аноним 01/09/20 Втр 04:59:58 179437716
>>1792452 (OP)
>3. Не знал, что можно использовать json поля в postgres и для каждого юзера создавал отдельные таблицы типа settings. Теперь всё это храню по возможности в одном json/jsonb поле.

Неправильный подход. Лучше храни таблицу типа (username, setting_name, value)
Аноним 01/09/20 Втр 05:37:00 179439417
>>1792452 (OP)
Я когда-то сделал прогрессбар для краулера в виде сервера и хтмл страницы с аяксом. Потом когда в пыху таки завезли консольку знатно ахуел сколько ж я глупой ненужной работы сделал.
Аноним 01/09/20 Втр 05:44:12 179439818
>>1794377
Лучше для чего? Можешь аргументировать?
Аноним 01/09/20 Втр 06:30:18 179441719
>>1794398
>Лучше для чего?

Для обработки средствами RDBMS. Соответственно, если эти данные ТОЧНО не надо обрабатывать то похуй, хоть в блобе храни
Аноним 01/09/20 Втр 06:36:52 179442020
>>1794417
В постгре уже давно есть средства обработки жсонов. Можешь хоть индекс по полю в жсоне построить.
Аноним 01/09/20 Втр 06:38:23 179442221
>>1794420
Так, да не так.

JSONB устроен так что он не сильно быстр, по сравнению с классическими полями.
Аноним 01/09/20 Втр 06:41:43 179442422
>>1794422
Не быстр на каких операциях?
Аноним 01/09/20 Втр 07:45:48 179443723
>>1794374
Долбоебушка, это ты? На wpf как нехуй делать опечататься в названии команды и все соберётся на похуе или шарп у нас теперь с динамической типизацией?
Аноним 01/09/20 Втр 07:53:13 179444124
Аноним 01/09/20 Втр 08:00:08 179444325
>>1794441
Причём здесь третья нормальная форма? У каждого пользователя свои уникальные настройки. Превращение в табличку (username, setting_name, value) вообще ничего не даст кроме ебли с типом value.
Аноним 01/09/20 Втр 08:12:03 179444726
>>1794424
>Не быстр на каких операциях?

На любых. JSONB это простая текстовая строка + маркеры оффсетов для ускорения доступа, по типу как в полях protobuf.
Всё это всё равно медленнее чем простое поле таблицы.

>>1794443
>У каждого пользователя свои уникальные настройки.

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

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

Всё равно респект тебе за то что не скатываешься в полный mongo-дебилизм.
Аноним 01/09/20 Втр 08:27:05 179445127
Аноним 01/09/20 Втр 08:28:15 179445228
>>1794447
> медленнее чем простое поле таблицы
Почти всегда ну по крайней мере я так делал тебе нужно достать этот жсон полностью как он есть в базе. Редактировать? Ну может быть, но опять же, смотря в каком случае. Если у тебя каталог товаров, где у каждого товара десятки атрибутов, и эти атрибуты бывают уникальными для отдельных товаров, то жсон заборет любое EAV, даже по скорости.
> чем лазать за ним в json
А, ну вот, главное условие для применимости жсона — это его чтение целиком в большинстве случаев. Постоянно ковырять оттуда части то ещё удовольствие.
Аноним 01/09/20 Втр 08:36:11 179445529
>>1794321
ОП хранение в json подаёт как годноту, а не как костыль.
>вы писали код сами, а потом обнаруживали какую-то супер годноту, которая делает всё тоже самое, но лучше?

Вот я и спрашиваю - нах так делать, если можно потратить неделю и изучить работу с базами данных и как их правильно проектировать, а не писать то, за что потом по рукам надают более старшие коллеги?
Аноним 01/09/20 Втр 08:50:09 179445930
>>1794451
>бамп
>в тематике
Я хуею с этой дуры
Аноним 01/09/20 Втр 09:44:15 179447731
>>1794459
бамп вопросу, не рвись
Аноним 01/09/20 Втр 10:18:48 179449332
>>1794417
> Для обработки средствами RDBMS.

Зачем обрабатывать настройки?
Аноним 01/09/20 Втр 10:20:04 179449433
>>1794377
> >3. Не знал, что можно использовать json поля в postgres и для каждого юзера создавал отдельные таблицы типа settings. Теперь всё это храню по возможности в одном json/jsonb поле.

> Неправильный подход. Лучше храни таблицу типа (username, setting_name, value)

И добавить один лишний запрос на каждое обращение к настройкам?

Это только увеличит оверхед
Аноним 01/09/20 Втр 10:36:00 179450434
>>1794373
>Ещё в сосничестве пилил свой транслятор ассемблера. Потратил с полгода времени вникуда.

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

И не так давно, лет пять назад, написал ещё один транслятор ассемблера. Для очень экзотической архитектуры. Писал его на С+. Это не опчатка, это жуткий диалект где-то посередине между Си и С++.
Аноним 01/09/20 Втр 12:53:41 179466535
>>1794504
>в детстве
А в мамкиной утробе тумблерами не щелкал?
Аноним 02/09/20 Срд 13:33:45 179539536
>>1794493
>Зачем обрабатывать настройки?
Ну а вдруг ты захочешь узнать сколько на сайте у тебя Олегов и выводить это в реальном времени?
Аноним 03/09/20 Чтв 21:28:27 179674437
>>1795395
Если для каждого "а вдруг" писать код, то продукт никогда не допилишь
Аноним 03/09/20 Чтв 21:42:20 179675338
>>1796744
А если для каждого "зачем" искать ответ, то и не начнёшь его пилить.
Аноним 03/09/20 Чтв 22:56:37 179681039
>>1796744
>>1796753
Классическая теорема Эскобара. Или притча о двух стульях.
Аноним 04/09/20 Птн 01:46:06 179691240
>>1795395
Выделяешь имя в отдельную колонку, пишешь миграцию, ставишь индекс. Рутина рутинная. Ох уж эти жсонфобы.
Аноним 04/09/20 Птн 02:00:01 179691741
>>1796912
> Выделяешь имя в отдельную колонку, пишешь миграцию, ставишь индекс
И опять всё свелось к тому, что если данные будут обрабатываться, то надо сразу всё делать в рамках реляционной модели, никаких json.
Аноним 04/09/20 Птн 02:39:04 179693142
>>1796917
Json все равно придётся оставить для остальных полей, чтобы на каждое новое поле не пилить миграцию с добавлением очередной ебучей колонки, заполненной у десяти тысяч строк из десяти миллионов
Аноним 04/09/20 Птн 03:49:46 179693643
>>1796917
Ты явно не понимаешь ни посыл моего поста, ни реляционную модель как таковую. Мой пост был о том, что менять формат хранения это рутина, и этого не нужно бояться: довольно легко как выкатиться из жсона, так и обратно вкатиться. Реляционные БД хранят данные в виде кортежей, там тоже есть определённый оверхед на поиск значения внутри кортежа. Индекс можно проставить даже по полю внутри жсона, как и по любому другому экспрешену, можешь там хоть площадь треугольника проиндексировать имея в колонках только размеры сторон. Сортировать ты всё равно будешь по индексу, не заглядывая в кортежи. Вообще "обрабатывать" это очень мутное слово, то ли ты про INSERT/UPDATE/DELETE, то ли про сложные агрегации.

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

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

>>1796931
> заполненной у десяти тысяч строк из десяти миллионов

Кстати это тоже абсолютно похуй. Нуллы в нормальных БД не хранятся внутри кортежа. Именно поэтому ALTER TABLE ADD COLUMN DEFAULT NULL безопасен для продакшена, так как не переписывает всю таблицу.
Аноним 04/09/20 Птн 23:09:47 179767044
image.png 288Кб, 2240x1105
2240x1105
>>1796936
как там у реляционных петушков с маштабируемостью? хоть обоссаный миллион транзакций в секунду осилили?
Аноним 04/09/20 Птн 23:33:46 179767945
>>1797670
> транзакций
Это те, что mongodb появились только пару лет назад? Визги "ряяя нинужна" не утихают до сих пор, кто-то тут вообще доказывал, что концепция транзакций несостоятельна. Вам, наверное, и in-memory хватит, с сохранением бекапа раз в час.
Аноним 05/09/20 Суб 01:45:53 179775346
>>1797670
> обоссаный миллион транзакций в секунду
Нет. Потому что durability, всё пишется на диск. Там бай дизайн не будет миллионов транзакций, если у тебя только сторадж не сверхскоростной. Хотя с партицированием или полной изоляцией инстансов почему бы и нет.

А для чего тебе миллион транзакций в секунду, позволь поинтересоваться?
Аноним 05/09/20 Суб 01:53:50 179775747
>>1797670
И да, уточни, транзакции на чтение и таки на запись? На чтение наверное можно потюнить и читать из кэша. Там любая репликация позволит эластично масштабироваться, если почти все транзакции это чтение. Ещё неясно, какова сложность транзакций. Если вытащить одну запись по праймари ключу, то это хуйня. Если джойны с агрегациями, то будет похуже. Короче тут вопросов очень уж дохуя, и о реляционности/нереляционности где-то в конце списка будут.
Аноним 05/09/20 Суб 20:00:32 179819848
>>1792566
Наследование прямоугольника от квадрата
Аноним 05/09/20 Суб 22:17:39 179835149
>>1797753
>Потому что durability
>бай дизайн
>сторадж
>с партицированием
>изоляцией инстансов
Ты специально пишешь как уебан или с детства контуженный?
Аноним 05/09/20 Суб 22:35:09 179836350
Аноним 05/09/20 Суб 22:50:56 179837651
>>1798363
Я мимокрок - он не со мной спорит.
Писать такую хуйню это то же самое, что и транслит в стиле tovary или ostatok. К нормальным людям с таким не ходят.
Аноним 05/09/20 Суб 22:55:52 179838052
Аноним 06/09/20 Вск 03:31:12 179846353
94529original.jpg 142Кб, 858x664
858x664
>>1798351
Специально. Чтобы ты пришёл и написал этот пост. Пост-магнит для душнил.
Аноним 06/09/20 Вск 10:46:33 179852754
>>1798463
>для душнил
Ты ещё напиши, что я не смешной.
Ведёшь себя как школота.
Аноним 06/09/20 Вск 11:27:55 179854855
>>1798527
Несмешной тупой токсичный эйджист и зануда.
Аноним 06/09/20 Вск 22:10:52 179908156
>>1798351
Дед, ты ёбнутый? Там из всего можно только к байдизайн придраться, остальное - технологические непереводимые термины. Съеби, не воняй.
Мимошел
Аноним 06/09/20 Вск 22:53:49 179910857
>>1799081
Сторадж, дурабилити неперводимые по твоему?
тоже мимо шел
Аноним 08/09/20 Втр 12:58:50 180048958
>>1797670
желаю тебе чтобы твоё счёт в сбербанке переехал в монгу
Аноним 13/09/20 Вск 16:45:52 180531759
>>1794318
Не такой уж и олд. Бывают и старше.
Настройки X
Ответить в тред X
15000
Макс объем: 40Mб, макс кол-во файлов: 4
Кликни/брось файл/ctrl-v
Стикеры X
Избранное / Топ тредов