mabu
программирование Все сильно обижаются, когда Я называю раздутый исполняемый файл не программой, а Bloatware.

Сразу же в оправдание идут такие аргументы.

1. «Ускорения разработки». Я правильно понимаю, что теперь с нуля можно написать Excell за неделю?

2. «Жёсткие диски стали терабайтными». Хорошо, теперь Windows 11 требует 265 гигабайтов, копейки какие‐то.

3. «Байтострадание — это прошлый век». Я‐то думал, что в современном мире появились улучшенные алгоритмы, которые уменьшают потребление памяти, места и увеличивают быстродействие. Видимо, улучшение — это когда больше тормозит и больше памяти жрёт.
mabu
программирование Почти везде вижу как ассемблирование и линковку делают через GCC, передавая через него параметры ассемблеру и линковщику. Пример:
$(CXX) $(CXXFLAGS) $(LDFLAGS) -o $(appname) $(objects) $(LDLIBS)

Цепочка инструментов: GCC → Ассемблер → Линковщик
Я лишь вижу недостаток: нельзя взять другой ассемблер или линковщик. Идёт привязка в цепочке инструментов.
Смешно ещё, что тут $(LDFLAGS) — это никакие не флаги для линковщика, это параметры для GCC, которые он должен разбирать и передавать линковщику.

Может быть есть выгода вызывать цепочку инструментов через GCC?
mabu
программирование В makefile есть стандартные переменные для компилятора сиб компилятора, си плас плас, архиватора, ассемблера, компиляторов фортранов, модулов‐2, паскалей.
Но нет переменной для линкера. Дебилизм.
mabu
программирование Всегда присваиваю переменной результат функции, а затем проверяю переменную в условном операторе, вместо того, чтобы прямо в условном операторе вызывать функцию.
mabu
программирование Система не разрешит подключить сетевой диск или зайти на ресурс по Самбе, если время на сервере неактуальное.
Вот у меня старый ноутбук, там батарейка питающая часы в BIOS умерла — при отключении кабеля время сбрасывается. И тогда Windows не разрешает зайти на сетевые ресурсы, говорит, что имя пользователя или пароль недействительны.
Нужно установить правильное время в системе.
mabu
программирование Оказывается, сборка моего вебсервер на линуксе (кто бы мог подумать — виндовый вебсервер на линексе), крошится из‐да двух проблем.

1. make не может найти команду move. Почему? Потому что такого слова в LINUX нет! (всегда высказываю своё фи про эти двухбуквенные сокращения вместо нормальный слов)
Пришлось добавить специальную переменную среды, в которой будет правильное название команды move.

2. Разделитель путей к файлам другой, то есть он не понимает файла «Classes\HttpReader.bas», ему подавай «Classes/HttpReader.bas». Добавил PATH_SEP в настройки среды и заменил все вхождения «\». Теперь путь выглядит как Classes$(PATH_SEP)HttpReader.bas. Безумие.
mabu
программирование Вывожу на консоль весь клиентский буфер. Не только байты, которые клиент отправил, но вообще буфер на всю его Capacity.
И вот там за гранью действительных байт попадается музыкальный мусор. То есть символы с кодом BELL, которые при выводе на консоль звучат и бибикают.
mabu
программирование Разделил объекты в кодовой базе сервера на два типа: постоянные и временные.

Постоянные объекты всегда находятся в памяти, и не будут удаляться. Пример: коллекция обработчиков HTTP‐методов, коллекция вебсайтов, пул потоков. К таким объектам обращаются из разных потоков.

Временные объекты существуют только в рамках одного запроса, и будут уничтожены когда клиент закроет соединение. Пример: клиентский запрос и серверный ответ, Uri, HttpReader и HttpWriter, NetworkStream, объекты‐задачи чтения и отправки запрос‐ответа, файловые буферы. К этим объектам обращение ищёт только из одного потока.

Что это даёт? У перманентных объектов можно удалить счётчик ссылок, сколько ни делай Release — объект всё равно должен висеть в памяти. (Но это не значит, что теперь можно забыть про Release, Release всегда следует делать по по всем правилам подсчёта ссылок.)

У временных объектов можно удалить атомарные операции для счётчика ссылок, поскольку доступ к ним может быть только из одного потока. И всё, больше никаких синхронизаций и Interlocked‐функций, вместо конкуренции теперь чистый паралеллизм.

Некоторую сложность вызвал объект «строка в приватной куче памяти», поскольу он существует как в клиентском запросе, так и глобально. Выкрутился созданием двух разных таблиц виртуальных функций.
Monstreek
Python программирование вчера удалось решить две задачи уровня легкие. Но только с помощью Гугла, потому что в первом задании косяк — ничего не сказано про точность округления. На втором задании мелкий недочёт, в mimo не разбирается ввод и вывод, поэтому я не знала, что "мы даём на ввод строку" означает, что его ещё принять надо как строку, то есть input().split()
mabu
программирование Неудобно смотреть минидампы где у объектов нет какой‐то минимальной RTTI.
Пожалуй, оставлю в релизной версии ID‐строку класса. Каждый объект сразу же потолстеет на 16 байт.
mabu
программирование Чистое процедурное программирование — это треш, угар и содомия с логарифмическим графом зависимостей скорости разработки от количества кода. Говоря проще: больше кода — больше проблем. Где-то в некой точке X переходящей в уничтожение каждого как личности, кто попытается добавить туда ещё какую-нибудь процедурку.
iportnov
programming дыбр portnov: позвали как-то коллегу посоветоваться по проблеме
portnov: он приходит, говорит рассказывайте
portnov: мы говорим ну смотри, у нас тут такая жопка
portnov: он говорит подождите ща
portnov: рисует на доске большую жопу
portnov: потом говорит продолжайте, я слушаю
oxpa: конспектирует, слушает, пытается собрать диаграмму, чтобы понять происходящее
oxpa: в принципе, если жопа умещается на доске, то и правда небольшая
Linda-chan
vb программизм Помнится, в Windows 9x для удалённого запуска компонентов требовалась специальна программа на сервере. Одна постоянно висела в панели задач, но работала надёжнее, в вторая как-то фоном, но с ней вечно какие-то проблемы были. И ещё была утилита, которая позволяла прямо в реестре указать, что какой-то компонент должен выполняться на удалённой машине. Только это было реально двадцать лет назад, и я даже названий не помню этих программ, только иконку первой и её окошко. Ну и то, что вторая называлась dcomcnfg.exe, и нынче она вызывает MMC с оснасткой управления DCOM'ом.
Linda-chan
vb программизм Неожиданно удалось запустить ActiveX компонент удалённо. Тоесть, на одной машине зарегистрирован сервер ActiveX EXE, написанный на VB6, а на другой его объект пытается создать клиент, написанный тоже на VB6. При чём, раньше у меня всё время были какие-то проблемы, а в этот раз просто накидала тестовый проект, зарегистрировала, а на другой машине просто сделала «CreateObject(ProgID, ComputerName)», и всё. Клиент рулит объектом у себя, а код исполняется на другой машине. Единственное что, пришлось файрволл поковырять.
janPona
программирование На фоне этого всего я вдруг понял, что я перестал быть злоебучим по отношению к практикам программирования. Пофиг. Ну говнокод, ну и что? Подумаешь, на крайняк можно переписывать веб-морду отдельными скринами. Если как следует припрёт, а оно и толком не припрёт.

А запутанные микросервисы? Чепуха. Нам башляют? Башляют. Похуй — подопрём как-нибудь. Где просела производительность, подкинем в топку пару десятков пачек банкнот — не наших же, кровных. Пусть это будет головняк инвесторов.

Честно, настолько уже насрать...
janPona
программирование Оценил devcontainer для VSCode, когда захотелось под виндой попрограммировать на Go.

Ничего не надо устанавливать, ни компилятора Go, ни тулзов, ни даже git. Нужен только VSCode и Docker, дальше развернул контейнер и всё у тебя в нём уже есть.
janPona
программирование IT слепота Бизнес хочет примерно вот чего.

#3009622

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

Закончился резерв maintainability, то есть, новые фичи уже невпихуемы в глыбу ставшего непонятным монолита? Не беда, щас мы ещё сбоку прикрутим парочку микросервисов, кое-как синхронизируем их с остальными данными (создав попутно несколько дырок в безопасности, ну да пофиг).

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

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

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

Вот такие обыдлившиеся вместе со своим быдлокодом кодеры и сидят по 12 лет на одной и той же джава5-помойке, забывая вообще, что такое Программировать. Не для них Кнут и Мартин тонны деревьев извели. Плодить бледных корпоративных слепых ко всему прекрасному кротов и гордиться этим! «Наши кроты самые подземные, самые неповоротливые»

Я знаю, что идеала нет, но я, сука, не многого уже прошу. Я, как нищий на паперти, с протянутой рукой стою и, трясясь и заискивая, вымаливаю просто позволить мне (просто отойти в сторонку и не мешать, а я сам, я умею):

1) строго типизированный код на клиенте и сервере, модели доменных сущностей
2) SOLID или гексагоналку, или хоть чорта лысого, только чтобы не мешанину SQL в АПИ-хендлерах
3) строго типизированные API (OpenAPI или GraphQL) с генерацией клиентских и серверных интерфейсов и клиентского кода а не REST-by-Postman-example
4) не пушить токены в гит, ну и вообще не делать подобной этому детской фигни

Ну вот скажи мне @kran, я сумасшедший, да? Скажи мне, друг дорогой, так никто не пишет, да? Стыдно так писать? Это всё задроты придумали, да? И самое главное скажи, только подумай хорошенько: это НЕ решает проблемы бизнеса, совсем-совсем?
Linda-chan
Windows программизм Заметила странность с DLL, собранными FreeBasic, в Windows 95. Допустим, у нас есть библиотека на FB, есть программа на VB6, которая её использует. Запускаем программу, она грузит библиотеку, всё хорошо. Теперь делаем ActiveX DLL на VB6, которая использует библиотеку, регистрируем через RegSvr32 в Windows 95. RegSvr32 грузит библиотеку, та грузит свои зависимости, в том числе FB библиотеку, а потом RegSvr32 получает от LoadLibraryEx() ошибку 0x45a. Даже если просто сказать RegSvr32 регистрировать FB библиотеку, то будет та же ошибка. Не понимаю, что происходит. В Windows 98 работает без проблем.
Linda-chan
программизм Короче, есть библиотека на FreeBasic, которую я использую в программах на VB6. Все объявления функций – в TLB файле. Добавила пару функций для кое-каких манипуляций с датой. Функция принимает один параметр типа Date (Double), производит манипуляции и возвращает дату в другой параметр того же типа. Возвращаемое значение Boolean (VARIANT_BOOL) сообщает, получилось произвести манипуляции или нет. Внутрях в том числе используются функции вроде VariantTimeToSystemTime() для конвертации в SYSTEMTIME. Вооот. Начались вылеты тестовой программы. Сначала выполнялась функция, а в конце случалось исключение. При чём WinDbg говорил, что беда случается в функциях категории SysStringLen(), которые работают с BSTR. Учитывая, что проблемный код не оперирует никакими BSTR, зато в тестовой программе функции вызывались прямо при конструировании строки с «отчётом» о проверке, выглядело всё так, словно где-то в библиотеке портится память, а потом всё ломается в программе. Ибо в программе не использовалось ничего особенного кроме для манипуляций со строками. Я долго вдумчиво смотрела в код, думала, какие-то проблемы с указателями, что-то не так передаётся во второй параметр, который указатель, либо не так вызываются функции конвертации даты из Date в SYSTEMTIME. Но там всё выглядело нормально. Кроме того, меня как-то настораживало сообщение: «Инструкция по адресу "0x77159d90" обратилась к памяти по адресу "0x0000fffb"». И второй адрес-то был всегда один и тот же. Откуда же он такой интересный? В общем, я посмотрела ещё раз исходник TLB и обнаружила, что по причине, связанной с ночным копипастингом, у меня возвращаемое значение (на самом деле – последний параметр функции) объявлено не как VARIANT_BOOL, а как BSTR. Я сваяла объявления в самом начале и больше даже не заглядывала туда. И вот что происходило. VARIANT_BOOL – это двухбайтовое целое со знаком (потому что совместимость с OLE в Win16), которое принимает значения 0 или -1 (кстати, частый вопрос, почему именно -1, а не 1), а BSTR – это четырёхбайтовый указатель на массив двухбайтных символов. Функция, возвращая True, записывала -1 в параметр, а код на VB6 получал указатель 0x0000FFFF. «FFFF» – потому что -1, а нули, полагаю, из-за выравнивания. Так как рантайм думал, что получает BSTR, а VB код возвращаемое значение прямо к строке присобачивал, полагаясь на автоматическую конвертацию, то рантайм вызывал BSTR функцию. Функция, чтобы получить реальный адрес строки, вычитала четыре байта (перед массивом у BSTR идёт длина строки), получала 0x0000FFFB, обращалась к этому адресу и благополучно вылетала. Вот такая история невнимательности.
janPona
программирование математика олимпиада Я детскую задачку по программированию не смог решить. Точнее как — решить-то решил, но уж слишком тупо.

Короче. Есть магазин цветов. У меня есть C рублей. Дешёвые цветы стоят A рублей, дорогие B рублей.

Цель: купить как можно больше цветов на все деньги, и при этом потратить максимальное количество денег.

Ответом задачи должна быть самая большая сумма, которую возможно потратить на покупку максимального количества цветов.
Shura
programming Android voice Ты изучаешь программирование под андроид и не знаешь, к какому проекту присоединиться? Даю бесплатную идею. Есть проект по оффлайн распознаванию речи vosk, у которого есть пример с русским языком: github.com Берём и компилируем. Всё работает.
Есть проект Tasker, который может заавтоматизировать на андроиде всё, что хочешь и он поддерживает плагины. Пример плагина github.com
Берём код из одного проекта, вставляем в другой — получаем универсального голосового помощника, распознающего русский в офлайне.

Я бы сам сделал, но ни черта не понимаю в андроиде, там по миллиону файлов в каждом примере и половина из них — xml

Кто возьмётся?
mabu
программирование В функциональном программировании есть некие «лямбды». Я правильно понимаю, что любую лямбду можно заменить «функцией с именем», все замыкаемые переменные передавать как параметры?
Это будет равнозначно или есть какие‐то особенности?
Если лямбда это просто «когда лень придумывать название», можно ли считать язык программирования где есть только чистые функции с именем и нет лямбд — функциональным языком программирования?
Если лябда = функция, то почему лямбда‐исчисление полно по Тьюрингу, тогда как программирование на чистых функциях не полно по Тьюрингу?
Где про это почитать?
mabu
программирование Пожалуйста, не говорите «Хватает оперативной памяти» когда у вас включен файл подкачки. Хватает оперативной памяти — это когда вы отключаете файл подкачки и работаете нормально.