Pull to refresh
137
-3.7
Андрей Дмитриев @AndreyDmitriev

Пользователь

Send message

я столько написал, по сути ни о чем не рассказав

Вот уж точно.

На самом деле хакер — это просто чел, живо интересующийся внутренним устройством чего-либо, неважно в программной или аппаратной части. Тот, кто в детстве разбирал детские игрушки до винтика — в какой-то мере уже хакер. Я вот до сих пор "разбираю", взламывая программы просто для себя, для удовольствия, эти "взломы" не покидают пределов моего ноута, но являются увлекательнейшим и полезным упражнением. Стать хакером просто — надо просто взять несколько инструментов реверс инжиниринга (бесплатной IDA достаточно, с Ghidra впридачу), отладчик (WinDbg, если мы под Windows, да x64dbg), ну и приличный Hex редактор (HxD вполне норм для начала). После этого пишется небольшое "крякми" приложение, оно же дизассемблируется, разбирается, как оно устроено, прогоняется под отладчиком и модифицируется. После этого можно взять либо готовый "крякми", на хабре они были, либо несложное приложение с нехитрой защитой, где она обходится заменой нескольких условных переходов, вот и всё. Дальше брать более сложные примеры и "чемоданчик хакера" начнёт пополняться другими инструментами, типа Wireshark, SysInternals и т.д. Ну и книжки полезные полистать, скажем "Образ мышления - дизассемблер IDA" Криса Касперски, да "Полное руководство Ghidra" Криса Игла и Кары Нэнс и процесс пойдёт. Ну а уж какие цели будут преследоваться — это лежит на совести каждого отдельного индивидуума.

Да, конечно, абсолютно согласен. В данном случае возможности моего влияния на руководство были сильно ограничены, я исполнял роль чисто технического консультанта. Вообще для себя я давно вынес, что помимо организационной составляющей (где в идеале всё сокращено до разумного минимума, кода хватает двоих — продукт- и проект- менеджеров, да руководителя команды разработки, снимающего все коммуникационные и орг вопросы) ещё важна архитектурная составляющая, когда проект разбит на компоненты со слабой связанностью и переиспользуемые библиотеки, так что программисты не "толкаются", а фигачат на максималках. Это вообще большое искусство — получить от команды, скажем из пяти-семи человек, более чем пяти- семикратную производительность в сравнении с прогером-одиночкой. Но вполне возможно.

Спасибо! Линукс в общем немножко не мой мир, хотя я и пользуюсь Pop_OS! (кстати, горячо рекомендую попробовать - это Убунту, но сильно допиленная System76, они делают свои ноуты, ставят её туда, особенно если комп с картой Nvidia, там драйвер вшит в дистр, и это удобно). Дело в том, что я использую Vision Development Module, а там с Линуксом без вариантов, ну и набор тулкитов вобщем ограничен - нет ни баз данных, ни репорт генератора и т.д. Впрочем я таки ставил LabVIEW на эту ось, и оно даже заводится после небольшого допиливания скрипта. Но я не ставил VISA, а вот там есть свои тонкости, особенно если используются железки. Кстати, какие "прочие тулзы" вы имеете ввиду?

Группа разработчиков без умения и желания общаться друг с другом просиживает целые дни на совещаниях? Не видел такого.

Не, разработчики дисциплинированные и работают, и при этом совещаются строго каждый день, это же аджайл, всё по учебнику. Менеджеры совещаются чуть реже, но обильнее. Скажем, после недели обсуждений решают сделать кастомные контролы, ещё пара недель и UI дизайнер выкатывает решение заменить стрелки инкремента/декремента на плюсики и минусики слева и справа. Свежо, да. Выглядит стендап митинг так: Рамануджан, ты чем занят? Я делаю кнопки инкремента. Ну ОК. Проходит день. Следующий стендап: "я работаю над кнопкой декремента". Я вежливо интересуюсь, чем же она так отличается от инкремента? Скрам мастер ёрзает - технические вопросы мы не обсуждаем. Ну как же - там ведь юзер может натыкать в минус!. "Ну да, а плюсом может натыкать в вечность" - хочу сказать я. Но говорю лишь, что там тоже лимит есть. "Лимиты - это отдельная сториз и следующий спринт". На показе вижу, что нет юнита - этот контрол показывает миллиметры. Но тут проблема - экран настроек не готов. Я его прошу замокать временно это дело, сам он не может, просто ждёт, ну и так далее. На код ревью вижу, что десятичная точка забита в код намертво и торчит как шляпка гвоздя. Вежливо замечаю, что не у всех десятичный разделитель в виде точки, бывает и запятая. "А у нас нет такой сториз, что юзер должен иметь возможность переключить". Нет сториз - нет работы. Серия обсуждений с менеджерами, архитектором и дизайнером и поехали на новый круг сюрреализма.

не стоит сразу кидаться делать то, что сказал заказчик. Заказчик к вечеру может или передумать 

Для этого у нас в штате есть должность, которая называется "ведущий системный инженер". Именно он обсуждает изначальные требования. Часто бывает так, что заказчик их вообще строго сформулировать не может — у него есть лишь "видение", как должна работать система, ну а искусство системного инженера — переложить это дело на бумагу в виде строгих сториз "пользователь жамкает вот по этой кнопке и происходит то-то". Если требования начинают меняться — это проблема именно системного инженера. Ну и очевидно, что чем позже по временной линии проекта они меняются, тем дороже стоят. Ну а кто платит за этот праздник — это уже другой вопрос.

О нет, тут не совсем этот случай. Во-первых, перед началом проекта я написал полное и очень подробное техзадание, угрохав на это полторы недели. ТЗ было проанализировано, принято, на основе этого были оценены и приняты сроки, 55 недель взялось отнюдь не "с потолка". Во-вторых, существующий продукт уже выступал в качестве рабочего прототипа, не надо было ничего изобретать, а надо было просто сделать тоже самое, только чуть лучше. И в-третьих, в команду были включены инженеры, уже разрабатывавшие софт для рентгеновских систем, им не нужно было объяснять, что такое детектор, калибровка и 16 бит картинка и как её на экране показывать и т.д. Там вся разработка как "по учебнику" шла. Вообще сделать реалистичную оценку сроков в самом начале проекта — это, конечно, непросто, но в данном случае особого давления не было, поскольку система уже кое-как работала на старом продукте. Я научился с годами не профукивать дедлайны, потому что для меня дедлайн выглядит в виде приехавшего крана, который грузит десять-пятнадцать тонн железку на спец грузовик, который отвозит это дело в аэропорт или в порт, а там заказано место на корабле или самолёте. А эа простой конвейера в виде незапущенной вовремя системы — бывает пенальти в виде одного процента стоимости в сутки простоя, а система стоит миллион плюс/минус (и отнюдь не рублей) и вот это вот всё в общем и целом весьма хорошо бодрит и организует.

У меня на WX 9100 сходу не завелось, пишет "Device type privateuseone is not supported for torch.Generator() api." - то есть вообще, похоже, карты не видит (батничек я по инструкции поправил, само собой). Я не один такой, на гитхабе есть такие же, но и те кто продрался через это, упёрлись в то, что 16 гиг не хватает, а у меня как раз 16, так что я дальше пробовать пока не стал.

Прошёл год (в основном митингов) " - вот и ответ ;-)

О да, я примерно до пятидесятого совещания довольно дотошно вёл дневник проекта (что очень помогло для реалистичной оценки следующих похожих проектов), но мне в общем уже к концу второго спринта стало всё ясно, так что я был полностью готов к "Плану "Б", в виде спасения проекта при помощи допиливания легаси продукта.

У меня есть реальный, практический пример из жизни, с прошлой работы.

Заказчик в одной северной заснеженной стране возжелал приобрести у одной европейской компании рентгеновскую систему. Причём систему весьма "кастомизированную", сильно допиленную под нужды производственной линии. У нас в то время программный продукт, которому было больше десяти лет, уверенно достиг стадии "легаси", накопилось какое-то количество техдолга, сформулированным требованиям удовлетворял лишь частично, и было принято решение всё программную часть отдать команде разработчиков в одной жаркой южной стране. Для меня это было облегчение — я на тот момент был перегружен другими проектами, а этот старый продукт поддерживал фактически в одиночку, выполняя роли архитектора, разработчика, тестировщика, техподдержки, и даже время от времени занимаясь документацией. Но заказчику надо как-то работать, и было решено поставить вначале систему с "легаси" продуктом, что б железка совсем уж не простаивала, а потом, за 55 недель (прямо так было прописано в контракте) с нуля написать новую программную часть, сменив по ходу платформу с LabVIEW на С#/WPF, походу реализовав всё, что нужно, что в общем было вполне реально сделать за год. Там особо сложного ничего не было, единственная тонкость, где надо было аккуратно отработать — нехитрая обработка изображений почти в реалтайме, чтобы не получить значительных пенальти в управляемом коде, OpenCV было за глаза достаточно, а WPF даёт куда как больше свободы по сравнению с контролами LabVIEW. Супер-пупер UX дизайнер слетал к заказчику, провёл там несколько дней, но судя по всему мало что понял. Первый звоночек прозвенел, когда менеджмент с места в карьер собрал команду из одиннадцати человек (что было несложно, так как шарписты там выстраиваются в очередь). Я на митингах чуть ли не кричал - не надо так, возьмите трёх-четырёх опытных разрабов, они соберут модульный "скелет"-ядро с правильной, элегантной декомпозицией, и потом постепенно можно будет добавлять новых разработчиков, но нет. Сразу возникли проблемы - одни ждали других, интерфейсы не готовы, тут дедлоки, там состояния гонки и т.д...

Прошёл год (в основном митингов). Прототип был едва готов и нежизнеспособен, всё трещало по швам, команда запросила ещё год(!) на доведение до ума. Заказчик вежливо (а потом и не очень вежливо) интересовался - "ну а где, собственно, результат?" Менеджеры вернулись ко мне. Я посмотрел на ТЗ — фактически надо было добавить в старый проект где-то полтора десятка новых фич, чтобы удовлетворить требованиям. Взяв три недели на доработку, я расчехлил древнюю среду разработки, и добавил часть очевидных, потом полетел за океан и ещё за три недели на месте добавил оставшееся. Поскольку я кодил прямо у заказчика, ежедневно внося изменения и на ходу обкатывая их с операторами, мне не составило большого труда довести всё до состояния, когда на вопрос "что ещё вам нужно?" заказчик сказал — "вот теперь всё работает как надо, у нас нет других пожеланий" и подписал акт приёмки. Я получил благодарность и небольшую премию. Вернувшись, я ехидно заметил, что вот теперь недурственно сравнить продуктивность — 11 человек за 55 недель уже угрохали под шестьсот человеконедель, я же справился за шесть в одиночку, 1:100 в мою пользу, и самое главное — результат достигнут, пользователи довольны. Конечно, у меня была заметная "фора" в виде уже имеющихся наработок, но тем не менее. Ну а система работает до сих пор, уже несколько лет, заказчик в процессе эксплуатации нашёл только один невыловленный баг, был пофиксен за пару дней, затем код был заморожен, поскольку шестинедельный спринт-марафон таки окончательно добил его до состояния "не трогай, а то сломаешь", но всё же. Ну а через пару лет и тот проект на шарпе был доведён до приемлемого состояния (впрочем заказчик решил остаться на старой программе, так ему всё понравилось). Потом один из менеджеров за бокалом пива спросил меня "как же так вышло, что проект редизайна был задержан на много месяцев?". Я ответил ему цитатой из Брукса - "знаешь, вначале он задержался на один день".

Вот этот:

Вообще вначале, после того как проблему локализовали, я проверил с удлинителем через TCP/IP, типа такого: и проблема ушла:

Суть в том, что большинство дешёвых удлинителей, типа таких

не имеют гальванической развязки между железкой и компьютером (даже если экстендер использует RJ45 кабель, он его использует просто как многожильный провод). А в удлинителе, основанном на TCP/IP с обеих сторон стоят два одноплатника, типа малинок, которые гонят USB траффик в честный TCP, и обратно, соответственно мы можем отнести железку от компьютера настолько, насколько позволяет сетевой сегмент, ну и к помехам такой удлинитель невосприимчив (там к тому же трансформаторы развязывающие стоят, насколько я понимаю). Но удлинитель на TCP стоил под четыре сотни евро, кроме того хаб на четыре порта нам не нужен, поэтому в рамках оптимизации расходов перешли на оптику — тут ценник почти в четыре раза ниже, около ста евро за пятнадцатиметровый кабель.

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

У меня есть трогательнейшая история на эту тему.

Мы производим рентгеновское оборудование, и там в составе системы есть источник питания рентгеновского детектора, который надо включать, подавая команду по USB (он взят из медицинской системы, убрать USB и заменить его кнопкой производитель отказывается, технически там FTDI чип стоит). Соответственно там кабель метров пятнадцать с активным усилителем.

После серии обновлений с Win7 на Win10 (эту ОС стали требовать заказчики), сервис начал отмечать увеличившееся количество репортов со спонтанно возникающим BSOD, причём даже замена компьютера в сборе не помогала. Воспроизвести у нас это не удавалось, пока я не посетил одного заказчика (совсем по другому поводу), но он между делом заметил, что система таки да, иногда падает в BSOD, примерно пару раз в неделю, но если это и происходит, то всегда примерно в обеденный перерыв. Я посмотрел логи — и правда, ядро падает, но время плавает, плюс минус десять минут примерно. Мистика. Мне повезло — напротив офиса, где стояла система, была курилка, и вот на следующий день в обед я стоял и покуривал, видя в открытую дверь экран системы. Дальше всё было как в замедленном сне — я увидел, как в соседнем офисе (там небольшая кухня была) девушка ставит свою еду в микроволновку, нажимает кнопку... и наша система за стенкой начинает перегружаться. Длинный кабель работал как антенна, собирая все помехи, и случайные выбросы, прилетающие на вход, успешно роняют Windows 10 в голубой экран, причём из логов однозначно не видно, что это прилетает именно из драйвера USB. У других заказчиков помехи вызывало рядом стоящее промышленное оборудование. После замены USB кабелей на оптоволоконные удлинители все проблемы исчезли. Мне удалось это воспроизвести, положив кабель USB рядом со шлейфом кабелей к моторам, и подключив осциллограф к линиям данных, чтобы видеть помехи. В момент старта/останова моторов сигналы скакали и иногда возникал BSOD (в среднем примерно каждую десятую попытку). И иногда, но не всегда, в дампе я видел ftdi*.sys.

У меня в планах долгими зимними вечерами собрать примитивный генератор на ардуинке, и подавать рандомно сгенерированный мусор в USB, думаю (надеюсь) что удастся стабильно и воспроизводимо ронять десятку в BSOD (и если так, то мне интересно как 11-я себя поведёт). А вот семёрка, похоже, была значительно более "отказоустойчива".

Не, если я за монитором, то мне очки по любому нужны, и где-то с точки 0,22 и меньше уже в общем норм (это, к примеру 2560х1440 на 25 дюймов). Но мы про ноуты, а я на лаптопе иногда вообще без очков работаю, либо смотрю поверх, и до экрана сантиметров 15-20, вот тогда высокое разрешение - это кайф. С планшетами/читалками тоже самое, мне некомфортно смотреть на экраны, у которых меньше 250-300 точек на дюйм.

вопрос ТС - у вас плохое зрение, чем Apple тут помогает? Вы видите разницу между хорошим экраном от Леново и Макбуком?

Это перевод, вообще-то, ТС - Clive Thompson. У меня нет доступа к оригиналу, но возможно имеется ввиду близорукость. У меня довольно сильная, но бонусом идёт адская острота зрения на близкой дистанции. Я могу "с комфортом" работать только на экранах высокого разрешения (рабочий ноут у меня с 4К), а иначе я реально "вижу" пиксели, дефекты антиалиазинга и всё такое (само собой, скажем при пайке мелких компонентов мне вообще не нужна лупа).

У меня тоже есть такой, который "не умрёт", правда из клана конкурентов - это DELL Precision M6700:

Ему десять лет примерно. Экран 17 дюймов, 1920 x 1080, на IPS. Процессор — i7-3740QM на 2,7 GHz, Ivy Bridge, по факту работает постоянно на частоте 3,5 при помощи ThrottleStop. Процессор съёмный, в сокете, что нынче редкость, можно свапнуть на XM. Памяти 24 GB, можно добить до 32 (там четыре плашки, у меня 2х8 + 2х4), видеокарта также съёмная, у меня NVIDIA Quadro 3000M, можно обновить либо до 5000M, либо до GTX 980m, если с биосом подшаманить. Три(!) жёстких диска — два SATA, причём один можно заменить сбоку, не снимая нижней крышки, а сбоку, кроме того их можно в RAID организовать и один mSATA. Я три Самсунга поставил - 750 EVO + 870 QVO + 860 EVO. DVD я заменил на Блюрей (да, мы из тех динозавров, кото берёт фильмы в библиотеке). Внутри у него miniPCI, я купил копеечный переходник на USB и теперь у меня не торчит донгл для беспроводной мышки. Впридачу к пяти USB портам я купил Express Card c парой USB, теперь у меня USB 3.0 как слева, так и справа (жаль, карты с USB-C не делают). Ну, кардридер, само собой. Ещё у него сзади есть eSATA. Видеовыходы - DisplayPort и HDMI (VGA есть, но это несерьёзно). Клавиатуру я свапнул на подсвечиваемую. Вообще это одна из лучших клав, с нормальными стрелочками, там ещё трекпоинт есть. Кнопки мыши (причём их три) сдублированы как под трекпадом, так и над ним (кто лёжа в кровати работал, тот оценит). Сенсор отпечатка пальца есть, но не пользуюсь. Кнопка выключения беспроводных интерфейсов. WiFi карту свапнул на 5GHz. Индикаторы включения/сна, зарядки аккума и активности жёсткого диска как на передней панели, так и сбоку. Акк я заменил, понятное дело, на неоригинальный, но недешёвый, теперь снова держит несколько часов. Акк заменяется без разбора половины ноута, а просто отщёлкивая защёлку. Есть нормальная док-станция с двумя DVI-I портами, eSATA, ну и всеми остальными. Купил его на барахолке, за 18 евро, как дефектный, но продавец просто не знал, что он нормально не заводится от неродного блока питания (там третий сигнальный пин по центру). К недостаткам можно отнести четырёхкиллограммовый вес, ну и блок питания — кирпич на 240 ватт. На нём живут как Windows11, так и линукс (я использую Pop!_OS, там в дистре вшит драйвер NVIDIA, очень удобно). Работает (не то чтобы прямо уж "летает", но работает) как швейцарские часики.

Да, с палитрами много чего весёлого можно сделать, например анимацию за счёт циклического переключения цветов, я вот несколько лет назад баловался (автор оригинала Mark J. Ferrari, я так красиво рисовать не умею):

Исходник (правда на LabVIEW — на чём умею, на том и пишу), там кода всего ничего, просто сдвиг раз в 50 мс:

Ещё вот тут есть несколько примеров.

Лингвистика намного ближе к программированию, чем обычно принято считать.

У меня в голове словно "блок" какой-то на изучение языков. Вот вроде в школе учил немецкий, затем в политехе английский, но если попросить меня спонтанно пойти и сдать экзамены, то я, вероятно, не то что на уровень B2, но и на B1 c трудом дотяну, поэтому я слегка завидую детям, которые учат несколько языков параллельно и умудряются не путаться.

Кому-то в голову пришла светлая идея записать ЭЭГ сна, прогнать через свёрточную нейросетку, и "воспроизвести" её, пользуясь ультразвуком, в надежде, что сон повторится. Идея, безусловно не лишена смысла, но вначале нужно более глубоко разобраться с устройством мозга. Вообще внешняя электрическая стимуляция уже достаточно успешно применяется при лечении болезни Паркинсона — там, грубо говоря, в мозгу возникают импульсы, которые "подавляются" внешним генератором. Только для этого в мозг вводят пару электродов. Вот если бы они сосредоточили усилия на устройстве, позволяющем тоже самое делать неинвазивно, то это было бы полезно.

я позабочусь о том, чтобы мои дети могли программировать компьютеры. <...> Беглый кодинг станет частью грамотности моих детей и обеспечит им работу. <...> когда мой ребёнок научится печатать, ценность кодинга как навыка может померкнуть для мира.

Ну да, ну да, у меня двое детей, я вот тоже точно так наивно думал, пока они были грудного возраста. Они были ещё в памперсах, а я уже видел их в отладчике. Не, я честно старался, ненавязчиво подсовывал им "умные" игрушки и конструкторы, когда они подросли я поставил приличный комп, проинсталлировал туда Scratch, и дети даже смогли сделать несложный "мультик", но потом они сказали "пап, а можно мы просто в Лего поиграем?". "Ага", сказал я и дома появился Lego Mindstorms. Не зашло совершенно, потом они принесли мне мешок с деталями Lego Technics "забери, они нам только мешают". В начальной школе (всё это в Германии происходит) один из родителей вёл курс старого нижненемецкого (который "Plattdeutsch"), и мои туда неожиданно записались, потом в гимназии прибавился английский, а в качестве дополнительных они выбрали французский и испанский, это впридачу к русскому и немецкому. В позапрошлом году я спросил их "что вам подарить на Рождество?". Пап, подари мне курс ... японского языка — сказал один ребёнок. А мне — арабского, добавил второй. Я думал это быстро пройдёт, но нет, они второй год старательно постигают лингвистические премудрости. Я это к тому, что далеко не все будут программистами и непременно пойдут по стопам родителей. И хотя я физик по образованию, знания в точных науках у них — так себе, на троечку, зато по немецкому у обеих "отлично", чему я горд неимоверно.

Ещё до кучи можно Euler Project добавить. Я когда-то очень давно на нём LabVIEW скиллы прокачивал, когда к сертификационному экзамену готовился, типа

Information

Rating
Does not participate
Location
Ahrensburg, Schleswig-Holstein, Германия
Date of birth
Registered
Activity