- 1
- 2
- 3
- 4
...
{ok, {attribute, _, BH, Behavior}} when BH =:= behavior; BH =:= behaviour ->
process_attributes(OrigFile, EPP, [{behavior, Behavior} | Acc]);
...
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
...
{ok, {attribute, _, BH, Behavior}} when BH =:= behavior; BH =:= behaviour ->
process_attributes(OrigFile, EPP, [{behavior, Behavior} | Acc]);
...
Oi mate
Это история про дискаверабилити еще
А ещё вечные grey и gray, centre и center, слова на -our и -or (не только colour и color, их много), thru вместо through, слова на -ise/isation и -ize/ization, thrash и trash.
Если в ЯП есть какие-то типы, и на основе них что-то тайпчекается, то надо чтоб горячая замена требовала соответствие типов меняемой хуйни при этой замене? Т.е. если была допустим функция
То горяче-заменить ее можно только функцией с такой же сигнатурой, типа
А в чем проблема-то?
> То горяче-заменить ее можно только функцией с такой же сигнатурой
потом надо поменять код всех функций, которые вызывают этот shit(), чтоб там вызывалось shit2(), потом можно старую функцию shit() тупо выпилить вообще (ну, когда оттуда уйдет поток управления от необновленных функций)...
Хотя тут все еще зависит от того, насколько всё сильно типизировано...
Всякая там горячая замена кода только в ФП-мирке может нормально работать, а то вот допустим есть массив структур как в Си, которая находится в shared memory и ее долбят куча процессов параллельно, договариваясь через какую-то хуйню в духе "я вот себе блокирую этот диапазон адресов, тут я меняю байтики, так что сюда не лезть", и ты хочешь поменять эту структуру, докидав новых полей, то как это вообще можно реализовать нормально?
Нет, понятно, что можно написать код, который такие замены делает.
Вопрос в том, как ты в тайп-чекер поместишь информацию о том, что процесс Px на ноде X переходит из версии кода N в версию кода N+1, в то время как процесс Py на удалённой ноде Y может находиться на версии кода N или N+1 (ты этого знать не можешь, т.к. сеть асинхронная), и при этом обменивается сообщениями с Px. При этом версия кода N может не знать о новых типах из N+1.
...И эту задачу тебе нужно решить в общем случае.
Ну это вроде можно решить. В каждую структуру с сообщением пихать некий UUID, и если процесс на ноде не обновился до новой версии, он это сообщение закинет во временное хранилище, а как прилетит обновление, сразу его обработает. А если из старого процесса прилетает сообщение в новый, там должна быть функция перевода из типа N-1 в новый тип N (ну или какие-то deprecated функции будут, которые обрабатывают тип N-1, но про тип N-2 оно уже ничего знать не будет, так что супер частые горячие замены делать нельзя)
Какая CORBA )))
А так конечно UUID интерфейсов и компонентов были в коме, но вроде были и нормальные имена (через реестр регистрировались), давно это было. Ты можешь еще и про тред апартменты помнишь?
Нет, к счастью, не помню, и мне, к счастью, намного меньше. Просто смешалось два говна в голове: UUIDы из классов в древних дельфях и ORB, который пришлось однажды немного потыкать в одной легаси-системе. Вообще, странно, что в CORBA до UUIDов не додумались, прекрасно бы дополнило картину.
P.S. В той системе, кстати, тоже был "COM", который тоже был для связи разнородных компонентов, но при этом не имел никакого отношения к мелкомягким. Вот багор-то был, когда я для её изучения начал было читать не те мануалы.
— А вот документация по COM...
— Какая ещё документация?!!
CORBA это кросс-платформенное RPC (такой дедушкин REST/JSON, SOAP или gRPC), а смысл COM (еще до DCOM) был в том, чтоб Петух1 написал компонент, а Петух2 его юзал.
Это такой доведенный до экстаза ООП, где ты работаешь не со структурами, а создаешь объект, кастишь его в нужный интерфейс, и дергаешь методы.
Сам объект может жить в твоем адресном пространстве, а может и в своем. Это очень хорошо легло на идею разделения труда, когда С++ер писал сложный компонент, а VB (или VBA) программист дергал его методы из функции OnClick на своей формочке.
Так вот, в отсутствии единого репозитория, нужно было избежать коллизий (они наелись уже тогда DLL хелом).
Именно потому уникальные в пространстве и времени GUIDы.
Можно было решить проблему неймспейсами от доменного имени (как завещал Сан жаваёбам), но тогда сайтов у программистов под PC особо не было.
Можно было сделать иерархию Страна/Штат/Город/Улица/Компания (как сделали в X.500), но вероятно они экономили место: за окном стоял 93й год, и всё это говно должно было работать на 486-м с 8 мегабайтами памяти.
В каком-то смысле Поцтеринг переизобрет это своим D-Busом спустя много лет.
Это как если бы развитие индустрии требовало, что все программисты пишут на одном языке, решают одну задачу, говорят на одном языке и являются однояйцевыми питухами близнецами.
В итоге, для прикладного уровня ни GUIDы, ни IDL, ни XML схемы, ожидаемо, не прижились, а в 89.322% случаев используются доменные имена вроде randomshit.com и JSON, который не сильно ушёл от потока байтов.
В линуксах всё просто: мейнтейнер в при сборке пакета указывает правильный путь libroost, в винде, где репозиториев нет, приложения обычно всё своё таскают с собой, а исключения вроде MS Visual Studio Redist редки.
Впрочем, винду я не трогал много лет, можете меня факт-чекать на здоровье.
Не программу, а инсталляцию операционной систему.
Ты ставишь COM объект на винду.
Вот ты написал petuzik.dll и у него интерфейс IPetuzable, и GUID 234234234234-HUI.
Ты этот гуид выдал мне как в своем SDK (.h файле), и вот Юзер2 поставил твой .dll и моу прогу на свой комп в чулане
И я такой: А подать сюда 234234234234-HUI, я у него метод Petuzit() вызвать изволю.
В остальном ты прав, потом еще более развернуто отвечу
Это прекрасно, но что делать, если нужного интерфейса в системе не оказалось?
1) Показать пользователю ошибку 234234234234-HUI не найден
2) Показать ему ошибку скачай с интернета купи на радиорынке диск с petuzik.dll. И тут, внезапно, ты уже используешь не UUID, а строковую константу "petuzik". Упс.
Конечно, вореант 1 тоже можно выбрать, пользователь забьёт ошибку в гугл... Но если у него есть гугл, то он не на 486-м Office 97 использует, и лишний мегабат для копии petuzik.dll в памяти у него найдётся.
https://help.developer.intuit.com/s/question/0D54R00009nK5ABSA0/how-to-resolve-retrieving-the-com-class-factory-for-component-with-clsid-issue
или вот
https://i.postimg.cc/FzPR3d7B/image.png
как-то так
Q:
помогите
Retrieving the COM class factory for component with CLSID {51271FB0-43CE-46C0-97E0-F1205E99C594} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
A: ведь это же очевидно что делать
Go to project properties -> compilation -> unmark 32 bits prefered. That worked for me
(немного напоминает алхимию: как излечиться от проказы? нужно сварить мочу молодого поросенка безлунной ночью)
это надо знать, если ты учился в шестом училище
попал на SO
I am waiting for UUID v100 which is just all random bytes. Here is your PHP implementation $code=bin2hex(random_bytes(16));$code=su bstr($code,0,8).'-'.substr($code,8,4).'-'.substr($code,12,4).'-'.substr($code,16,4).'-'.substr($code,20,12);. Have fun, don't forget to tip your bartenders. –
William Entriken
CommentedMar 9, 2023 at 5:41
уебал компьютер топором
Мне пришлось ему рассказывать, что:
1. Размер плавающего питуха не зависит от маркетинговой разрядности процессора, на 16-битном и на 32-битном плавпитух одинаковый (углубляться в то, что у x86 ещё куча хуёвин, разрядность которых не совпадает с маркетинговой разрядностью, я не стал).
2. В моей программе используются типы фиксированного размера, которые не изменятся оттого, что я возьму другой конпелятор.
Мне кажется, он всё равно нихуя не понял.
Специальность была неайтишная, если что.
Там даже лежит 32rtm.exe для запуска 32-битного винконсольного кода из-под голого DOS через 32-битный DPMI, который до кучи мумулирует несколько самых важных функций винсосноли (из advapi32.dll, kernel32.dll, user32.dll).
(FAR из-под 32rtm не запускается, мумулируемых функций не хватает, но уже в 2000-е годы вышел HXRT, из-под которого даже FAR можно запустить)
И во всякой питушне той эпохи вроде Watcom C тоже должен быть.
но dos.h там точно
и прерываний
и фар поинтеров
и размер массива там не int измеря..
Можно вызывать прерывания, если собираешься положить хуй на совместимость с винконсолью и всегда вызывать программу через 32rtm, но прерывания там не совсем, как в 16-битном коде для DOS: во-первых, DPMI пробрасывает не все прерывания DOS, а только часть; во-вторых, там указатели на память будут flat, а не 16+16. Будут страшные глюки с распидорашиванием памяти, если нормально не портируешь.
Фар поинтеров опять же нет из-за модели flat.
А вот с интами надо разбираться, там не всё очевидно. Но что массивы по умолчанию ограничены 4 гигами вместо смешных 64 кило, факт. Я знаю про модель huge, в которой можно больше 64 к, но это адский костыль, к которому редко прибегали. Только если прижмёт писать именно под реальный режим с большими массивами.
Кстати, 16 бит — это не только ДОС, но и Win 3.x. Там тоже много возни с портированием на 32 бита, куча функций по-другому называется и ожидает других аргументов. Вот на 64 бита с 32 портировать проще.
Я в тот экстендер даже баг когда-то зарепортил https://github.com/Baron-von-Riedesel/HX/issues/4
Интересно, можно ли такой же экстендер сделать, но чтоб 64 бит?
Вменяемый способ скрестить DOS с длинным режимом — навернуть мумулятор инструкций реального режима и посадить DOS в мумулятор. Переключаться на каждый чих «длиннный-короткий» не вариант.
Я писал про неофициальный проект NTVDMx64. Там автор спёр у MS мумулятор Soft PC (он исторически был нужен MS, чтобы в Windows на SPARC грузить биосы железок, ибо слоты в материнке там такие же, как у IBM PC, а вот процессор другой).
В линуксах (и в юниксах вообще) принято ставить софт из репозитория.
На винде же в то время юзер на диске купил ком компонент для проигрывания mp3, и плеер к нему скачал с интернета. Поставил всё это сам, и оно должно работать.
> приложения обычно всё своё таскают с собой,
Во времена .dll hell -- разумеется. Сейчас у .NET есть gasm, а у обычных людей SxS: у каждого .dll есть свой уникальный ID (из хеша и подписи и пр) и ты зависишь на имя и на версию и на этот ID.
C редист смешно, кстати: его раскусили на собссно CRT (libc) и специфичные костыли компайлера
CRT теперь идет с виндой (как libc на юниксе) а костыли компайлера -- да -- через редист (хотя и их можно слинковать статически)
Да, это романтическое представление из конца 90-х. Тогда же были всякие попытки сделать универсальный веб, каждой сущности дай свой ID, отсюда и (как ты верно заметил) XML.
Гейтс тогда говорил, что юзер должен мыслить не в терминах файлов, а в терминах документов.
Вот у меня есть таблица эксель. Я хочу чтобы любая программа могла ее читать. Как она это сделает? Через ком, в котором будут буквально те же команды, что и в экселе: Open, Read итд.
Но да: не взлетело
...Пользователи Сетунь будут немного недовольны.
Потом такой "блядь ну я же сетевой петух" и исправил на "октетов"
Но вот наконец и с битами начались проблемы
Там была аутентификация (в случае домена даже централизованная), возможность лениво активировать компоненты внутри служб других компов и всякое такое
Потом добавили координатор распределенных транзакиций (привет Файк) и message queue (так появился COM+).
Винда стала платформой распределенных приложений, как в книжке про кабана, только это 99-й год и W2K.
Но всё было дыряво (MS-RPC проприетраный и дырявый) и порт-маппер его использовал для TCP случайный порт доволя админов файрволов до исступления эмоций
В итоге даже MS в .NET (начало нулевых) стало советовать SOAP (XML over HTTP) потому что он лучше проходит через прокси, и от него отделяется HTTPS (тогда его часто делали хардварно) в итоге всё накрылось медным тазом
Идея интересная, но пиздец переусложненная.
картинка https://i.postimg.cc/QMBptDYm/image.png
Конечно, можно поспорить, что можно использовать протоколы, которые таких ситуаций не допускают. Тогда, конечно, можно использовать языки, которые не умеют такие проблемы решать. Их, естественно, проще типизировать. Но если не уметь такие проблемы решать, то сложнее делать апгрейды, не теряя соединения и т.д.
Для сайта на PHP эта проблема, конечно, иррелевантна.
Стат типизация лично мне нужнее для ловли тупых ошибок а не для перформанса
Есть ещё несколько альтернативных внешних утилит, к примеру, f***book написал чекер для gradual typing, но я им не пользовался.
Потому что грубо говоря в таких языках как (девушки, заткните уши) TypeScript и питухоне-с-тайпхинтами в рантайме тоже хуй да нихуя (кроме разве что пайдантика в питоне который чото там пытается) но тем не менее они как-бы статтипизированы (особенно TS)
P.S. Можно писать программы так, чтобы Dialyzer больше ловил, но это уже скилл программиста, а не какая-то статическая типизация.
Неправильно выразился. "Когда может доказать, что некий путь исполнения программы ведёт к пустому множеству допустимых выходных значений, при вводе, ограниченном пересечением пользовательской спецификации типа и результатом data/control flow анализа".
downloads 88M
а говорят, что никто не пишет
Weekly Downloads
152,987
И это называется экосистема?
https://www.npmjs.com/package/is-number-object
70 миллионов пер вик
(зависит на другой популярный пакет https://www.npmjs.com/package/has-tostringtag)
Отдельный пакет с .d файлом (это для стат типизации)
https://www.npmjs.com/package/@types/is-number
заметил, что они самые большие поборники ЫЫ. привыкли, что Nan is undefined и I don't know what `this` is, теперь тащат свои ОХУЕННЫЕ практики всюду
нормально обезьян наебали, да?
спорю, что ты совершенно другую цифру собирался скопировать
написана одна цифра, а копируется другая))
Надо в нашем продукте сделать такую фичу, например суппортеру говорят: покажи логи
он копирует логи, пейстит их в чат, а там напсано "Игра «Каменное лицо». Это когда участники садятся за стол без штанов, а кто-нибудь залезает под стол и делает всем по очереди минет. Задача игроков — по лицу угадать, кто именно сейчас подвергается оральной атаке. Игра особенно интересна, когда в ней всего двое участников"
– девушки в игре не предусмотрены?
Там можно писать что-то типа [a: b, c: c] вместо [{a, b}, {c, d}], очень ценно.
У кого-нибудь есть воцап смотрящего за Elixir?
При том, что proplist (т.е. список кортежей из двух элементов) себя давно изжил с появлением нативных мапок. А сахар для них остался. Какой восторг!
Напоминает весь питухон. В питухоне тоже в каждой версии появлятся еще один (на сей раз правильный!) способ сделать что-то. И еще конечно три способа в сторонних либах есть.
Теперь в питухоне всегда есть восемь способов сделать что-либо. Совершенно ебанутый язык.
У меня никакого фронтенда нет, поэтому стоит ли ради этого учить ``Elixir'' я не знаю.
Ещё у них есть свой numpy: https://github.com/elixir-nx/nx
Все эти Ghost GPT, CodeShot AI, ENIGMA AI привели к тому, что единственный способ действительно понять квалификацию человека — пригласить его в офис. С одной стороны, мы получили инструмент, который снижает уровень стресса: помощника, способного подсказать и поддержать в нужный момент. С другой — человек из условного Усть-Дальневска уже вряд ли сможет пройти собеседование в Москве на хорошую позицию и достойную зарплату, потому что, похоже, скоро компании начнут массово возвращаться к офлайн-собеседованиям. Лично у меня уровень доверия к онлайн-интервью сейчас где-то на уровне плинтуса.
Микрот сам не умеет в vless, но он умеет в докер (там прыщи внутри) и есть полу-официальное руководство как запустить там контейнер с флесом
Только вот микротик считает контейнеры небезопасными, и требует физической перезагрузки в знак подтвреждения. В течение пяти минут после включения докера!
Какой багор ))