Pull to refresh
0
@Loferread⁠-⁠only

Software Dev .Net, BA, Solutions Architect, MCTS

Send message
Тут вообще-то вполне логичная проблема поднята.
Это можно интерпретировать как «производитель фотоаппрата не отдает не отдает мне мое фото, мотивируя тем, что посторонний не верно интерпритирует значения RGB каналов с матрицы».
Это вроде как мои данные? Мои! Отдайте их мне и я сам придумаю что мне с ними делать и как.
Если аппарат не помогает? Верните мне мои деньги -производитель и врач. Не верное лечение/врачебная ошибка.
Метафора про карандаш хорошая.
Тупой карандаш это обмен информацией на дэйли.

Из моего опыта — записать в Jira/TFS и потом на дейли это повторить закончив "… тикеты заведены можете читать" приводит куда к более продуктивной работе чем «есть проблемы X Y Z. Нет пока не записал», а через з дня это просто «выпадет из памяти» и дает граблями в лоб потом.
Нужно просто дрессировать на вырабатывание рефлекса «записал-> на дейли обозначил» (может быть даже ногами). Жестоко и не по «правилам и лучшим практикам» — но зато дешевле для бизнеса и заказчика.
Да на ретроспективе куда детальнее анализ с «бумажным» детальным источником.

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

Задача аналитика не «решать», а предоставить в формализованном, согласованном между собой собой и непротиворечивом виде. Что бы коллегам дальше «по цепочке» не пришлось лезть «в первоисточники». Если это пришлось сделать — косяк аналитика. Его результат не пригоден к применению, как для программиста «код не компилируется».
Даже синтетика настолько не отличается

2005/6 год. Notebook CPU Core2Duo и Ram 4 GB DDR2.
Алгоритм кеширования (нюансы не помню) и цель была выжать максимальную производительность.
С++: Замена double на double* и _smart_ptr на IFn* в сигнатурах функцияй ну и управление памятью (изменено были на ручное new/delete) при сохранении алгоритма.
Сам удивился результату. Сейчас, думаю, результат будет поскромнее. Надо будет проверить на досуге.
Дело тут как раз таки в языках, а конкретно — в HTML, CSS, и JavaScript.

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

А почему начали на нем писать вещи, для которых не предназначен?
Случайно не надежда на «если посадить миллион обезъян за пишушие машинки они когда-то напечатают Войну и Мир»? Что-то вроде «посадим миллион JS-обезъянок за компы и получим Гениальное Творение».
Порог входа в JS низок, закончилось Electron (народ в соседней ветке обсуждает) и переходом Windows на Chromium движок браузеров «из коробки».
Интернет доказал что «миллион обезъянок не напечатали Войну и Мир» и похоже никогда не напечатают.
Насчет JS — плакать хочется от усилий которые в него вливают. Такую энергию да в мирное русло и что-то, определенно, поправить в «консерватории»...
А что нельзя критиковать без грубых словечек и личностных оскорблений? Умение владеть собой и уважительно общаться с коллегами — это тоже признак профессионализма. Человек который пытается самоутвердиться за счет менее сильных коллег явно страдает комплексом неполноценности и я бы такого герою не доверил сервер, кто знает как он себя поведет в критической ситуации, сумеет ли вовремя обратиться за помощью и признать свои ошибки?

У монетки есть две стороны.
На собеседование говорят «Мы Вас нанимаем как специалиста по решению или предтвращениею некоторого спекта проблем. У вас будут следующие полномочия ....»
Вы выходите на работу и начинете выполнять свою работу хорошо. Поскольку вы же только вышли, то вы не погрязли в трясине интриг и взаимных соглашений и вы выдаете результат, что бы пройти испытательных срок.
Проблемы которые вы решаете уже есть результат некоторых компромисов и отсутсвия компетенций «до вас». Выданный вами результат кого-то не устраивает — или случайно облажали «решение Важного Человека» или случайно показали коллективную некомпетентность или что-то подобное. В любом случае, в результате вашей работы кто-то окажется не «в лучшем виде», а это угроза зарплате или авторитету или неформальному лидерству.
Вот тут и начинается самое интересное:
  1. Умные люди попробуют получить ваши знания (научиться у вас или доверится вам) что бы работа стала лучше, результат достигался с меньшим гиморроем и все придет в норму через пару месяцев
  2. Идиоты будут «защищаться» всячески стараясь дискредитировать вас и результаты вашей работу. Они не будут стараться получить ваши знания и понять их ибо их Корона/ЧСВ/болото, как они считают, под угрозой и надо спасать. С их точки зрения они не делают ничего плохого! Но тут и выясняется, что вы то человек новый «не проверенный» а против вас «проверенные». И тогда вопрос — а кто их нанял ?! Кто допустил весь этот фееричеческий трэф? Угроза захватывает не только «прямых коллег» но их/ваше окружение.
    Единственная реакция — убрать источник раздражения. И вы объявляетесь таковым


По факту, вас не нанимали ублажать коллег (для этого есть специальные мальчики и девочки), вас нанимали решить бизнес проблему. В рамках законодательства и должностных интсрукций. И из этого и нужно исходить.

Если бизнес-проблема в том, что отсутсвует обратная связь (положительная или отрицательная) — это печальный случай.
Если хотя бы новый функционал не писать на С и С++, то это уже будет большой шаг вперед. Но для этого нужно признать, что виноват язык, а не глупые программисты, которые не умеют писать без ошибок.

Могу сказать, что разница в 50 раз на производительности, в зависимости от того как вы напишете код того стоит. Напишете 100% безопасно с «автоматикой» — будет x1, напишете грамотно с «ручным управлением» — будет x50 скорость.
Да во втором случае придется немножко почитать логи на предмет утечек памяти в отладке и протестить корректно. Да, для этого нужна квалификация.
Но С++ то тут причем ?!
Нефиг браться мокрыми руками за оголенные провода под напряжением. Они от этого ржавеют…
Неудивительно, что создатели контента с котиками тоже лезут к вам в карман, пусть косвенно, минимизируя свои затраты на разработку.

Что и требовалось доказать — дело не в языках. Но кодеры-раздолбаи имеют какое-то отношение к происходящему.
Вас кто заставляет?

Да. Что бы посмотреть котиков «в инертенете» ноутбука 2010 года хватало за глаза, на нем еще и виртуальные машины крутились. А в 2018 внезапно стало понятно, что… не хватает! Я сам по началу удивился. Подруге стало не хватать моего бука что бы «смотреть котиков». Пришлось покупать новый. Планшет пришлось сменить по той-же причине — на нем куча сайтов просто нельзя было открыть из-за тормозов.
Понадобилось в 2..3 раза более производительная техника, что тех же «котиков посмотреть».
Т.е меня вынудили, наделав кучу наворотов «в зоопарке» и наплевав на результат.

Почему они должны думать о ваших финансах.

Э… может потому что я им плачу, хотя и вынужденно?
Предвидя Вашу следующую реплику «так не платите», отвечу — «уже частично не плачУ», хотя бы тем, что вырезается вся реклама нафиг.
там о проблемах с памятью не думают, но при этом эти проблемы и не возникают.

Серьезно? Зато вынужден думать я. у меня сейчас мобильный более наворочанный чем сервер лет 10 назад, на котором работали 20 человек и при этом скайп как работал через з@дницу так и работает. А что бы делать ту же работу, что я делал 15 лет назад, я себе на железо потратил тысяч 20 долларов за все это время.
Как мне кажется — это большая «не проблема» потому что «о проблемах с памятью не думают».
Я вынужден оплачивать из своего кармана это маразм.
То есть, по вашему нет никакого движения в правильном направлении?

Все эти действия были вынужденной реакцией. Люди которые проектировали С++, Windows 3.0, Intel 286 — были грамотными професионалами. Но даже они — такого не предусмотрели, как тучи «обезъянок-кодеров» и кучу «плохишей».
Неидеальный мир вынуждает двигаться в «правильном направлении».
Давайте держаться сути разговора, а именно, memory safety гарантии языков программирования.

Если рассматривать идеальную среду в которой «все хорошо» и все пишут на «правильном языке» где компилятор математически доказывает корректность программы — тогда не вижу смысла. Это получается как обсуждение «сколько ангелов поместится на кончике иглы».
В идеальном мире ничего обусждать не нужно — там и так все хорошо без нас.
Это не спор был, а простой посыл к тому, что надежда на CLR — не очень оправдана (да шаг хороший, но слишком оптимистична).
Уже такое было: Все программисты хорошие и поэтому можно обойтись кооперативной многозадачностью — по факту надежды не оправдались. Тогда сделали вытесняющюю много задачность и аппаратную защиту памяти — по факту надежды не оправдались. Тогда приделали NX биты, CLR & Co — по факту опять надежды не оправдались. Сейчас оказывается надо пределывать языки, процессоры и среду исполения, в надежде что уж на сей раз то точно получится.
Тенденция показывает, на мой взгляд, что проблемы то не в языках…
А кто-то сказал, что «плохишь» будет делать это только .Net & C#? Или уже нельзя подгрузить в процесс свою DLL написанную на другом языке?
Вот dump просто консольки на .Net:
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x544
wow64cpu.dll!TurboDispatchJumpAddressEnd+0x222
wow64cpu.dll!BTCpuSimulate+0x9
wow64.dll!Wow64LdrpInitialize+0x236
wow64.dll!Wow64LdrpInitialize+0x120
ntdll.dll!LdrInitShimEngineDynamic+0x308f
ntdll.dll!memset+0x1ec93
ntdll.dll!LdrInitializeThunk+0x5b
ntdll.dll!LdrInitializeThunk+0xe

Вот просто DLL загруженные в процесс, где исполняется мой .NET код.
advapi32.dll Advanced Windows 32 Base API Microsoft Corporation C:\Windows\SysWOW64\advapi32.dll
apphelp.dll Application Compatibility Client Library Microsoft Corporation C:\Windows\SysWOW64\apphelp.dll
bcryptprimitives.dll Windows Cryptographic Primitives Library Microsoft Corporation C:\Windows\SysWOW64\bcryptprimitives.dll
clr.dll Microsoft .NET Runtime Common Language Runtime - WorkStation Microsoft Corporation C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
clrjit.dll Microsoft .NET Runtime Just-In-Time Compiler Microsoft Corporation C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll
combase.dll Microsoft COM for Windows Microsoft Corporation C:\Windows\SysWOW64\combase.dll
cryptbase.dll Base cryptographic API DLL Microsoft Corporation C:\Windows\SysWOW64\cryptbase.dll
gdi32.dll GDI Client DLL Microsoft Corporation C:\Windows\SysWOW64\gdi32.dll
gdi32full.dll GDI Client DLL Microsoft Corporation C:\Windows\SysWOW64\gdi32full.dll
GuidX.exe Guid P:\Temp Projects\Guid\Guid\bin\Release\GuidX.exe
imm32.dll Multi-User Windows IMM32 API Client DLL Microsoft Corporation C:\Windows\SysWOW64\imm32.dll
kernel.appcore.dll AppModel API Host Microsoft Corporation C:\Windows\SysWOW64\kernel.appcore.dll
kernel32.dll Windows NT BASE API Client DLL Microsoft Corporation C:\Windows\SysWOW64\kernel32.dll
KernelBase.dll Windows NT BASE API Client DLL Microsoft Corporation C:\Windows\SysWOW64\KernelBase.dll
locale.nls C:\Windows\System32\locale.nls
mscoree.dll Microsoft .NET Runtime Execution Engine Microsoft Corporation C:\Windows\SysWOW64\mscoree.dll
mscoreei.dll Microsoft .NET Runtime Execution Engine Microsoft Corporation C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll
mscorlib.ni.dll Microsoft Common Language Runtime Class Library Microsoft Corporation C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\277a04b4ec834bb70c1bd343b14ebd3a\mscorlib.ni.dll
msvcp_win.dll Microsoft® C Runtime Library Microsoft Corporation C:\Windows\SysWOW64\msvcp_win.dll
msvcr120_clr0400.dll Microsoft® C Runtime Library Microsoft Corporation C:\Windows\SysWOW64\msvcr120_clr0400.dll
msvcrt.dll Windows NT CRT DLL Microsoft Corporation C:\Windows\SysWOW64\msvcrt.dll
ntdll.dll NT Layer DLL Microsoft Corporation C:\Windows\SysWOW64\ntdll.dll
ntdll.dll NT Layer DLL Microsoft Corporation C:\Windows\System32\ntdll.dll
ole32.dll Microsoft OLE for Windows Microsoft Corporation C:\Windows\SysWOW64\ole32.dll
oleaut32.dll OLEAUT32.DLL Microsoft Corporation C:\Windows\SysWOW64\oleaut32.dll
rpcrt4.dll Remote Procedure Call Runtime Microsoft Corporation C:\Windows\SysWOW64\rpcrt4.dll
sechost.dll Host for SCM/SDDL/LSA Lookup APIs Microsoft Corporation C:\Windows\SysWOW64\sechost.dll
shlwapi.dll Shell Light-weight Utility Library Microsoft Corporation C:\Windows\SysWOW64\shlwapi.dll
SortDefault.nls C:\Windows\Globalization\Sorting\SortDefault.nls
sspicli.dll Security Support Provider Interface Microsoft Corporation C:\Windows\SysWOW64\sspicli.dll
ucrtbase.dll Microsoft® C Runtime Library Microsoft Corporation C:\Windows\SysWOW64\ucrtbase.dll
user32.dll Multi-User Windows USER API Client DLL Microsoft Corporation C:\Windows\SysWOW64\user32.dll
version.dll Version Checking and File Installation Libraries Microsoft Corporation C:\Windows\SysWOW64\version.dll
win32u.dll Win32u Microsoft Corporation C:\Windows\SysWOW64\win32u.dll
wow64.dll Win32 Emulation on NT64 Microsoft Corporation C:\Windows\System32\wow64.dll
wow64cpu.dll AMD64 Wow64 CPU Microsoft Corporation C:\Windows\System32\wow64cpu.dll
wow64win.dll Wow64 Console and Win32 API Logging Microsoft Corporation C:\Windows\System32\wow64win.dll


Я конечно надеюсь, что все вокруг сделано правильно, но… факты показывают что это не всегда так.
Что будет в процессе исполнения таки языковая проблема в том числе. C# не в вакууме выполняется, а в CLR, которая несет с собой гарантии.

Это просто ожидания и надежда что «CLR, которая несет с собой гарантии».
На мой взгляд корректнее сказать " CLR, которая должна нести с собой гарантии".
Flash, JS, Java, .Net — все «CLR которые должны», и…?

Просто потыкать для примера:
Vulnerabilities in the Microsoft .NET Common Language Runtime Could Allow Remote Code Execution (974378)
This security update resolves three privately reported vulnerabilities in Microsoft .NET Framework and Microsoft Silverlight. The vulnerabilities could allow remote code execution on a client system if a user views a specially crafted Web page using a Web browser that can run XAML Browser Applications (XBAPs) or Silverlight applications, or if an attacker succeeds in persuading a user to run a specially crafted Microsoft .NET application.

CVE-2018-8356 | .NET Framework Security Feature Bypass Vulnerability
A security feature bypass vulnerability exists when Microsoft .NET Framework components do not correctly validate certificates.


В управляемых языках нет операции освобождения памяти

Это еще почему? а зачем тогда «уборка мусора»?
Либо у процесса есть ссылка на регион (ограниченая размером региона), либо ссылки нет, и тогда читать/писать невозможно.

Именно что «у процесса… ссылка на регион». В этом и проблема что внутри процесса вы можете творить почти что угодно, кроме того что вам запрещает OS и CPU. Как вы получите ссылку, на что она будет указывать — это ваша проблема. Если вы «хороший» — будет указывать «правильно», если вы «плохой» — будет указывать куда вам нужно, и единственное ваше спасение это OS & CPU.

Код с неинициализированными ссылками на C# просто не скомпилируется, а на C++ с неинициализированными указателями — запросто.

Это не панацея, потому что в процессе исполнения можно утворить почти любую пакость и поставить ссылки на то, что нужно «плохишу».
А сборщик мусора всегда гарантирует, что никто не использует объект после освобождения.

А ДО освобождения? И кто вам сказал, что память освбожденная будет затерта нулями в процессе?
Вопрос в том, что как таковая «языковая обязанность» — предотвратить проблемы ДО исполнения, лучше при компиляции. Компилятор добавит свои нюансы при когдогенерции, что бы реализовать «безопасный язык». Для С++ я могу сваять свой умный указатель на пару минут и свои менеджеры памяти пишут для С++, и работать будет похоже на .Net/Java и т.д.
Это никогда не было проблемой для С++, а вот что дизайн нужно продумывать ДО имплементации на С++ тех фич, что на себя берет .Net/ Java & Co — это факт.

Что будет в процессе исполнения — это вообщем не языковая проблема, а среды исполнения(стандартной библиотеки языка) и ее взаимодействия с ОС.
Если вы в С++ /Java / .Net загружаете библиотеки написанные на другом языке — кто виноват в проблемах?
Какой-нить array в JS на самом деле реализован на плюсах, где и были дырки неоднократно в том же хромиуме. В Java/C# не случайно даже встроенные типы написаны на этом же языке, так безопасность и достигается. Нативный только рантайм, а все остальное под полным контролем, что исключило целые классы уязвимостей.

Святая наивность :)
C# Compiler Options Listed by Category
-optimize Enables/disables optimizations.
-checked Specifies whether integer arithmetic that overflows the bounds of the data type will cause an exception at run time.

Пока будут такие опции — дыры будет всегда :)
Кто-то просто напишет, а кто-то задумается и поищет информацию, почему возникает ошибка,

Один то может задумается, а потом придет «обезьянка» и тупо у себя в коде точно так-же нафигачит, потому что Большой Тим Лид тоже ваяет именно так. Это никак не решает проблему.
Ну тут мужик в корне не прав. Это не С++ виноват. Это мышка не того цвета, клавиатура не так клацала, фазы луны не те…
Тут JS может из браузера вломится в соседнюю вируальную машину. Тоже С++ виноват?
Может архитектуру безопасности ОС пересмотреть, раз такие косяки ОС допускает сделать?
А разве сам принцип Agile не подразумевает «адаптироваться по ходу проекта» и «решать проблемы по мере их поступления»? И разве там есть какие-то обязательные роли? Рекомендованные роли и/или «best practice» — да есть.
По логике, если нужно, то стрипизерш или экскорт-сервис можно нанять в команду, если это решит или предотвратит какие-то проблемы.

Information

Rating
Does not participate
Registered
Activity