|
|
|
Почему все так сложно?10.05.2018, 20:13. Показов 8265. Ответов 160
Метки нет (Все метки)
Здравствуйте! Почему все так сложно в мире программирования, казалось бы простом?
Например, чтобы написать приложение на vue нужно выдумывать подключение к api которое нужно писать на django (например) и у которого десятки файлов с "кодом" с моделями, вьюхами, урлами, подключением к postgresql дальше нужно настраивать синхронизацию, потом писать разрешения и в vue и в django... Или на php - пишем код, потом берем фронтенд, более менее приличный, получается только на angular, vue, react пишем отдельно код на php потом пишем структуру базы данных , схему, саму базу формируем и создаем потом описываем подключение хорошо, если программист знает, что нужно сразу писать api к которому подключаться любым фронтом, а если нет... тогда или tpl-ки клепать, или придумывать php+html в котром тоже, гемор еще тот ... почему до 2010 года был линукс, мягко говоря, "консольный"... и пока до них дошло, что система должна быть визуальной - как windows - зато теперь красота! ubuntu 18 - почти идеальна! Также и с программированием! Зачем все эти сложности? Теоретически, ведь можно взять принцип моделей от django, которые простым python3 manage.py makemigrations + migrate делает всю работу по моделированию базы данных... но! Встает вопрос - а как потом работать? Нужно что-то похожее на vue, но только в ЖЕСТКОЙ связке с api с моделями! Обсудим? Какие есть решения? Добавлено через 27 минут по сути, это должно быть простым CRUD приложением но с возможностью подключения к базе данных
0
|
|
| 10.05.2018, 20:13 | |
|
Ответы с готовыми решениями:
160
Zend Framework - почему всё так сложно? Почему так сложно? Делегаты "почему так сложно а ?:(" |
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||||
| 18.05.2018, 02:57 | |||||||||
|
Добавлено через 13 минут Главный момент всего этого дела - возможность изменения данных - неотъемлимая возможность как машины Поста так и машины Тюринга. Без этой возможности они теряют вычислимость. В 50-х с лектронной ОЗУ было напряжно. Сваповать можно было только на перфоленту а это устройство однократной записи. Соответственно пришлось изобретать эмуляцию изменений путем копирования с внесением изменений. Любая эмуляция имеет квадратичное время. Вы же тепрь пытаетесь эмулировать еще и копирование. Получите экспоненциальное время и прочие накладные расходы. Вопрос - и какие такие коврижки несет неизменяемость данных чтобы ради нее иметь столько геммороя? Добавлено через 25 минут Так кстати о птичках - хеш-таблица это всего лишь способ ужатия табличного индекса словаря. При этом хеш это далеко не O(1), это не хуже амортизированного Log(n). В небольших словарях когда количество возможных значений ключей сильно ограниченно можно и без ужатия. Матрица это не ужатая таблица. Добавлено через 6 минут Добавлено через 46 секунд Добавлено через 7 минут Добавлено через 3 минуты Добавлено через 1 час 14 минут
1
|
|||||||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||||||
| 18.05.2018, 11:33 | ||||||
|
Не знаю, что Вы подразумеваете под "данными". Я говорю про неизменяемые переменные. Например, функция, добавляющая узел в дерево, не изменяет исходное дерево, а создаёт и возвращает новое. Не знаю, что Вы подразумеваете под "копированием". Если физическое копирование памяти, то при создании нового дерева на основе исходного (в функции замены одного узла из предыдущего абзаца) в этом нет необходимости. Накладные расходы обычно не существенны. Даже если Вы в своём шахматном алгоритме вдруг решите при каждом изменении матрицы копировать её целиком (то есть, всю память, которую она занимает), Вы не заметите разницы. На каждое копирование памяти (сотые доли микросекунды) у Вас будет 2 (для коня) или 3 (для ферзя) вложенных цикла с плохо предсказуемым ифом внутри каждого из вложенных циклов. В одном месте - что можно сделать проверку занятости клетки на доске. При этом я не обещал, что используемая структура данных будет неизменяемой. В другом месте - что можно сделать независимую копию объекта. При этом раз пять повторил, что копирование и изменение - это разные операции.
0
|
||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||
| 18.05.2018, 12:09 | ||||||
|
Но вопрос не в этом - как вы собираетесь в эту хеш таблицу вносить изменения если она неизменяемая копия? Добавлено через 36 секунд Добавлено через 2 минуты Добавлено через 4 минуты Добавлено через 14 минут Вообще команду в САПР можно представить в виде функции Fn([Cn],Mn-1)->Mn. Cn- ветор параметров команды Mn - описание модели после выполнения n-ой команды. При этом Сn может содержать ссылки на элементы Mn-1. Сответсвенно всю ленту редактирования можно представить в виде Fn(C[Cn],Fn-1([Cn-1,]..F1[C1],M0)) M0 - пустая модель. При этом пользователь может изменять как параметры в любом из векторов Сi так и в ограниченных пределах порядок вложенности команд (вектор параметра команд может содержать ссылки только на элементы уже созданные предыдущими командами). Дальнейшим вышестоящим алгоритмам нужна именно Mn, а не список Fn, поскольку каждая из команд имеет полиномиальное время имплементации. Теперь представьте что пользователь поменял что то в векторе С5. Кому нафиг нужна неизменяемая копия модели M1000 если все начиная с M5 стало неактуальным?
0
|
||||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
|||||||
| 18.05.2018, 12:36 | |||||||
|
Вы написали: "В алгоритме построения списков ходов наиболее используемая и вообще единственная операция связанна непосредственно с моделью - определение занятости клетки, при этом других операций там практически нет. За O(1) эта операция выполняется только по матрице. " Я ответил: "2) за O(1) она выполняется не только на матрице." Где здесь я написал про изменение? Предположим, что в переменной содержалось значение "ноль". Эта операция не изменяет этот "ноль", а заменяет его на "единицу". Вы опять:
0
|
|||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||
| 18.05.2018, 12:54 | ||||||
|
Добавлено через 4 минуты Добавлено через 6 минут Добавлено через 1 минуту
0
|
||||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||||||
| 18.05.2018, 13:26 | ||||||
|
Я могу свой пример придумать. Есть дерево из 1000 элементов, каждый по 100 байт. Я передаю его в функцию. Функции может потребоваться внести в него изменения. Если используются только изменяемые типы данных, то ей придётся делать для этого глубокую копию всего дерева (скопировать 1000 узлов и 1000 элементов в узлах). Если используются только неизменяемые типы данных, то она создаёт новое дерево на основе текущего. Для этого ей придётся создать около 10 узлов (пусть 20, если потребовалась балансировка) и 1 элемент. Для не изменившихся элементов (все, кроме одного) и не изменившихся узлов (все, кроме предков изменившегося узла) будет совместно использоваться та же память. Добавлено через 23 минуты Что касается списка, который я использовал для тестирования времени выполнения одной итерации, то да, разница в занимаемой памяти не существенна. Более того, разницы вообще не видно. Добавлено через 2 минуты
0
|
||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||||
| 18.05.2018, 14:29 | ||||||||
|
Добавлено через 1 минуту Добавлено через 3 минуты Добавлено через 13 минут Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 59 секунд
0
|
||||||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
|||
| 18.05.2018, 14:31 | |||
|
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 18.05.2018, 14:43 | ||||
|
Добавлено через 1 минуту Добавлено через 4 минуты
0
|
||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||||||
| 18.05.2018, 14:56 | ||||||
|
Я не говорил, что изменять вредно. Я говорил, что можно использовать неизменяемые переменные. И я не говорил, что использовать неизменяемые переменные вредно. Разные задачи - разные способы решения.
0
|
||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 18.05.2018, 14:59 | |||
|
Добавлено через 1 минуту
1
|
|||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||||||
| 18.05.2018, 15:07 | ||||||
|
Добавлено через 3 минуты
0
|
||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 18.05.2018, 15:31 | ||||
|
Добавлено через 9 минут Вот поэтому такая потокобезопасность и не нужна. Либо она вообще ни к селу ни к городу, потому что параллелить нужно совсем в другом месте, либо полностью ложила на такое понятие как актуальность данных. В том смысле что пофиг что данные стали неактуальны, пусть дальше по неактуальным молотит. Так жить нельзя. А то совсем непонятно на кой ляд калькулятору виндовскому потоков нужно больше чем кнопок (аж 25) и 50 метров памяти. Вот это показатель эффективности гуглеров из майкрософта. Добавлено через 5 минут
1
|
||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||||||
| 18.05.2018, 16:27 | ||||||
|
Добавлено через 1 минуту
1
|
||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||
| 18.05.2018, 17:00 | |||
|
Потому что параллелить нужно пересчет данных для изменения состояния (то что параллелится - пачка уравнений пересечения кривой с поверхностью - параллелится в режиме разделения ресурсов).т.е. на момент непосредственно изменения других потоков просто не существует ибо нефиг. И так очень много с чем. Потому что подавляющее большинство простых численных методов либо не параллелится в принципе, либо векторится лучше чем параллелится. А вот сложные которые под капотом имеют пачку вычислений простыми - либо параллелятся либо векторятся просто абсолютно.
1
|
|||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
|||
| 18.05.2018, 17:45 | |||
|
Основное преимущество неизменяемых данных - использование чистых функций.
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 18.05.2018, 18:57 | ||||
|
Вообще все мифы о проблемах с состояниями именно в том что всеми этими делами гуглеры занимаются. А им даже такое состояние как счетчик цикла давать опасно потому как препады их курсов цикл с двойным счетчиком осилить не в состоянии. А от них хотят параллелизма, причем на хеллоувердах (менеджеры не лучше одним словом). На самом деле автомат состояний без изменения состояний - это даже не смешно. Поэтому там где нет состояний их на самом деле приходится эмулировать. Миф о эффективности эмуляции состояний - это тоже не смешно. А вот неутихающие попытки "эффективных" менеджеров по привлечению масс гуглеров к созданию сложных технических систем путем создания компилятора который за них типа ошибок не допускает, не смотря на полную несостоятельность такой идеи доказанную Пентагоном еще в 80-ых - ну это вообще плачевно. Потому что дело не в состояниях и не в компиляторах. Дело в недопонимании такими горе-программистами задачи. Это никакой компилятор и никакая парадигма не лечит. А ученые (бакалавр и магистр - это научные степени) для таких корпораций как Гугл получается не по карману. Добавлено через 19 минут Shamil1, Он банально - смотрим сколько тем "как распарсить хтмл-ку регэкспом"? Потом им скорости не хватает потом им параллелить... Добавлено через 10 минут Добавлено через 16 минут Shamil1, Т.е. банально - зачем пытаться параллеллить reduce который в принципе не параллелится в общем случае, если можно распараллелить map , содержащий пачку этих reduce, который параллелится абсолютно всегда? Вообще такое впечатление что ФП-никам ядра девать некуда. Так там где их девать некуда на самом деле не параллелится а векторится.
1
|
||||
|
Модератор
3138 / 2286 / 469
Регистрация: 26.03.2015
Сообщений: 8,894
|
||||
| 18.05.2018, 19:19 | ||||
|
Чистые функции гораздо проще отлаживать. И код получается гораздо более читаемым.
0
|
||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 18.05.2018, 19:49 | ||||
|
Добавлено через 7 минут Добавлено через 12 минут Добавлено через 5 минут Shamil1, кстати так о птичках противопоставлять декларативно-императивно - сапоги в смятку. любая подпрограмма декларативна по отношению к нижестоящей подпрограмме и императивна по отношению к вызывающей надпрограмме. А вообще круть получается когда объектно-ориентированный кот декларативно параметризируется. Для этого правда нужны классы и полноценный механизм шаблонов.
2
|
||||
|
Alvin Seville
|
||
| 29.06.2018, 20:58 | ||
|
0
|
||
| 29.06.2018, 20:58 | |
|
Если с CMS все так просто, то почему сайты все еще делают в блокнотах? Почему так всё и все изменились за последние 15 лет? Почему все так громоздко? Почему все так не любят tkinter? Почему все так не любят Delphi Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Программа для com-порта
Uhbif79 05.06.2026
Всем привет, давно хотел изучить Qt, начинал, бросал, потом снова начинал. И сейчас вот смог написать свою первую программу.
До этого имел опыт программирования микроконтроллеров, писал прошивки на. . .
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|