Pull to refresh
39
0.5

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

Send message

Проблема в том, что когда вы видите foo+bar в сишном коде, вы знаете, что здесь происходит. Но в cpp-коде то же самое может означать что угодно, за этим может скрываться миллион неочевидных операций. Придётся распутывать клубок наследований, перегрузок.

А зачем? У вас цель в решении задачи, в создании программного продукта, или же в абстрактном следовании фен-шую ради следовании фен-шую?

Если решить задачу с применением олдскульных подходов получается быстрее и проще, может это повод задуматься, что не всё так хорошо с новомодными подходами?

Я ещё со времён висты/семёрки кричал, что все выравнивания элементов везде, где только можно, похерены.

Но все молча проглотили. Хорошая же ОС, аэро-фигаэро, чо там!

может вы работайте в той сфере где без них никуда.

Они нужны, полезны и частоиспользуемы в любой сфере, если только вы не работаете в сфере написания Hello world программ.

5) Перепробовав гору аутсорсерлв, снова хочет все писать сам

Нулевое доверие-это структура

принципа " доверяй, но проверяй’. 

кто-то получает доступ к учетной записи (- ам) пользователя (- ов)

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

Уже сейчас в VR есть интерактивные выставки, где можно увидеть совершенно другой мир: каким его воспринимают слепые, например.

— Ну что, потомки, Марс уже колонизировали? Холодный термояд освоили?

— Нет...

— А что же вы там делаете в своём мире будущего?

— Ну, мы иногда справляем физиологические потребности, а в остальное время лежим и через специальные очки смотрим мир так, как его видят слепые.

Написал не менее длинный ответ на этот коммент, и в последний момент он канул в небытие. Слава новому WYSIWYG-редактору Хабра!

Второй раз набирать нет желания: я вообще-то с телефона набирал, так как лежу с температурой 39, палец и так отваливается. Может быть потом

Понятно. Это что-то вроде желания, будь вы из сферы машиностроения, забыть ненавистное вам оформление проектной документации, а сразу вы тачивать детали «из головы», но чтобы потом по эти деталям проектная документация (чертежи, 3D-модели, спецификации) сами генерировались.

При нормальном подходе люди сначала проектируют, потом за изготовление берутся, и в программировании я обычно начинал с мыслительной работы по проектированию будущего программного продукта, и первое, что появлялось из ничего при зачинании новой программы или нового компонента в программе, это были всегда h-файлы. А вам эта стадия не интересна.

Но теперь это — атавизм

Что поменялось «теперь» по сравнению с временами, когда язык создавался? Люди стали ходить на голове? Число Пи достигло значения 8? Поменялась размерность пространства-времени?

Или просто люди, подержавшие в руках инструмент, допускающий чрезвычайно широкий и гибкий workflow использования, но использовавшие его только стереотипным и самым простым образом,обнаглели, и решили, что раз им что-то не пригодилось, то и никому это не нужно?

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

Грубо говоря, когда в обществе долгое время существовал консенсус, что убивать не хорошо, что справедливость это благо, а несправедливость это плохо, и вдруг приходит молодое поколение и внезапно ставит вопрос: «а почему собственно убивать не хорошо?».

Ладно, попробую. Заголовочные файлы это вообще явление из зоны ответственности препроцессора. Никто вас не заставляет их использовать. Можете не пользоваться ими, а объявления всех типов и прототипы всех функций объявлять прямо в своем cpp-файле. Можете вообще всю свою программу, пусть в ней и 200 тысяч строк кода, уместить в одном единственном cpp-файле.

Но если вы разумный программист, вы скорее подробите свой проект на множество cpp-файлов, потому что будете осознавать преимущества такого разделения. Которое, к слову, заключается не только в том, что в маленьких файлах легче ориентироваться, как многие думают, а главным образом в том, что каждый cpp-файл можно компилировать отдельно и в отрыве от всех остальных, а значит, если мы подправили реализацию всего одной функции (из, допустим, десяти тысяч), можно перекомпилировать только этот cpp-файл, а не весь проект целиком, а потом слинковать из старых объектных файлов и одного нового итоговый исполняемый файл, что гораздо быстрее.

Так вот, если у вас 190 штук cpp-файлов, и во всех вы используете структуры VECTOR3D, WAVEHDR, ANOTHERSTRUCT, то в каждом cpp-файле придется иметь объявление этих структур. 190 × 3 объявлений.

И вот здесь, чтобы не плодить 190 копий объявления трёх структур, чтобы уйти от WET-антипаттерна и использовать DRY-принцип, на сцену выходит препроцессорая фича #include, позволяющая повторяющиеся вещи вынести в один файл и избавиться от повторений, за исключением того, что сама директива #include и имя файла, указанное в ней, таки будет повторяться много раз.

То есть это прямо киллер-фича, которую сделали хоть и не только для, но в значительной степени именно для элиминации повторяющегося исходного кода. Что крайне важно не только потому, что не надо тратить время и силы на написание/контраст одинаковых кусков кода, но и позволяет иметь одно место с авторитетным описанием сущности (как гласит принцип DRY), что исключает вероятность при добавлении нового поля в структуру обновить описание её везде, кроме пары мест.

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

И дело-то видимо не в том, что человек против идеи includeинга файлов на стадии препроцессинга или не понимает как эти пользоваться. А дело скорее всего в том, что человек против идеи прототипов функций, а также он испорчен и избалован IDE, которая прячет процесс сборки и представляет его пользователю как нечто непрозрачное, и человек перестает думать отдельно о линковке, отдельно о компиляции каждого отдельного исходного файла независимо от остальных, а начинает считать, что есть некий черный ящик под названием «компилятор C++», который как-то там вызывается один раз сразу на весь проект, видит сразу весь проект, обрабатывает весь проект и выплёвывает готовый исполняемый файл, а раз так, ну уж наверное он может в одном cpp-файле увидеть определение структуры или функции, а встретив упоминание чего-то такого в другом cpp-файле, который ни сном ни духом про первый файл, самостоятельно догадаться, что вот именно из того файла сущности здесь и упоминаются.

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

Менеджера пакетов нет — ах какая катастрофа!!! Ещё через 10 лет программисты, похоже, будут гнобить тот или иной ЯП только за то, что к нему в комплекте не поставляется длинноногая секретарша.

Забавно, что почти все подчёркнутые им плюсы я считаю минусами, а названным им минусам наоборот рад. Да, когда-то давно в первые пару лет использования C/C++ я тоже злился от разделения на cpp- и h-файлы. Но затем понял фишку, постиг дзен и поражался, какой же я был наивный дурак я был (чисто в духе парадокса Даннинга-Крюгера). А здесь человек 15 лет (!!!) пишет на C++, но видимо до сих пор не вдупляет в то, зачем нужны прототипы, в чем разница между declaration и definition, и почему заголовочные файлы это благо.

Какие политкорректные заменители для слов «чернокнижник» и «белогвардеец»?

В отрыве от правильных слов о разнице между UCS-2 и UTF-16, хочется сказать, что решение засунуть эмодзи в юникод я считаю абсолютно идиотской инициативой.


Тоже, но в меньшей степени относится к включению туда всяких мёртвых вариантов письменности, которые в последний раз использовались в 12 веке, а сейчас интересуют только археологов и палеолингвистов.


Само ограничение в 64К символов и возможность умещаться в 2 байта на символ и иметь прозрачное преобразование индекса символа в смещение в байтах и возможность сканировать строку, просто перебирая 16-битные слова — она очень соблазнительная и дорогого стоит.

Почему тупо? Переменный это циклическое сокращение и расслабление мышц — 100 раз в секунду (для 50 Гц сети), а постоянный — мышцы напряглись и остались в таком напряжённом состоянии до снятия приложенного напряжения. Не тупо нагрев.

проблема строительства линий электропередач

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


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


Чрезвычайно распространённая оговорка «линии электропередач» является, по видимому, попыткой натянуть сову на глобус «программу телепередач» на электроснабжение.


Другое известный мне случай, когда словосочатению так же не повезло — это министерство путей сообщений, которое на самом деле министерство путей сообщения, где сообщение — это тоже не посылка и не SMS-ка, а концептуальное понятие транспортной взаимосвязанности.

Я сижу на XP, и должен сказать, что вы преукрашиваете. 95—98% сайтов работают без проблем. Либо я принципиально какими-то не теми сайтами интересуюсь.


Не так давно истёк срок действия одного сертификата корневного центра сертификации: но это проблема сертификата, а не самой XP. Достаточно было установить в хранилище доверенных сертификаторов сертификат нового Root CA, на котором сейчас всё зиждется из того, что раньше базировалось на старом.


С Хромом есть проблема в том, что он полагается на системную SSL-релизацию, а она не умеет работать с некоторыми алгоритмами. Но в таких случаях я переключаюсь на FireFox — у него своя внутренняя независимая реализация SSL/HTTPS.


По поводу невозможности обновить браузеры: это действительно боль. Есть мнение, что во многих случаях ограничение на минимальную версию ОС чисто искуственное, «политически мотивированное», нежели техническое. Кстати говоря, слышал, что есть некая китайская сборка Chromium, которая отлично работает на XP.


Не могу достоверно сказать на счёт браузеров, но могу рассказать интересную историю насчёт Process Explorer от Марка Руссиновича. Начиная с какой-то версии Process Explorer перестал корректно работать на Windows XP.


Я нашёл на форумах поддержки SysInternals тему на этот счёт, где представители компании говорили, что они ну никак не могут обеспечить работоспособность новых версий под Windows XP.


Тогда я вычислил ту версию, начиная с которой оно интерфейс программы под Windows XP поломался, и стал реверс-инжинирить и отлаживать её, чтобы понять, что же такого принципиально нового они там начали использовать, что нельзя получать под Windows XP малой кровью? Может быть новомодный (гореть ему в аду) интерфейс aka Ribbin (резиновая лента)? Но нет, судя по скриншотам, никакой резиновой ленты там нет.


В итоге, разгадка оказалась банальной, неожиданной и разочаровывающей.


Начиная с какого-то момента в comctl32.dll была добавлена новая функциональность и в некоторых структуры были добавлены новые поля. Соответственно, в заголовочные файлы, где объявлены функции/макросы/структуры, имеющие отношение к comctl, были внесены изменения: добавлены новые поля, но всё это было заключены #if...#endif макросы, так, чтобы старый код, не знающий о новых фишках, мог нормально компилироваться.


Часто используемой практикой у Microsoft является то, что структуры, в которые планируется добавление новых полей, имеют первым полем поле cbSize, чтобы сообщить API-функциям, в которые будет передаваться указатель на структуру, о том, какой «версией» структры пользуется вызывающая сторона: сколько полей она правильно инициализировала и сколько полей вызываемая API-функция имеет право модифицировать, чтобы не испортить соседние не относящиеся к структуре данные.


При этом реализация comctl32.dll, какой бы новой она ни была, всегда умеет корректно работать со «старыми версиями» структур, у которых было меньше полей, потому что в ином случае все старые программы под новой версией Windows переставали бы работать.


Так вот, начиная с какого-то момента при компилировании Process Explorer они стали пользоваться новым комплектом заголовочны файлах, и установили константы/флагми условной компиляции так, чтобы сообщить компилятору «да, мы хотим использовать вот эту новую версию структуры с новыми полями».


По факту же никакие новые фишки, даруемые новой версией библиотеки comctl32.dll они не использовали. Никакие новые поля, добавленные в структуру в новой версии, они тоже не использовали.


Они вообще никак не были завязаны на новые возможности новой версии comctl32.dll. Но они задали макрос _WIN32_WINNT таким, что в структуре появились новые поля, а от этого изменилось выражение sizeof(SOMECOMCTLRELATEDSTRUCT).


И когда программа скомпилированная с такими ключами условной компиляции попадала под Windows XP, она передавала в comctl-шные функции структуру, у которой первое поле cbSize оказывалось ниожиданно большим для XP-шной версии библиотеки, и эти API-функции отказывались работать с такой «новой» формой структуры.


Можно было бы возразить: мало ли по какой другой причине им потребовалось задать значение _WIN32_WINNT таким большим? Они эти сделали для совершенно других целей, не связанных с comctl32.dll, а работа с контролами пострадата просто засчёт того, что доп. поля были в #if...#endif-зависимости от значения _WIN32_WINNT.


Но специально для избежания таких случаев в тех же заголовочных файлах были предусмотрены специальные константы макросы для определения sizeof структуры в зависимости от того, какую именно версию библиотеки comctl32.dll ожидает увидеть вызывающая сторона.


Я написал Руссиновичу письмо с результатми своего исследованиея и предложением о том, что всё проблема решается банальной заменой:


xxx.cbSize = sizeof(XXXXXX); на xxx.cbSize = XXXX_V6_SIZE;


Руссинович ответил, что всё так, но они, тем не менее, не будут ничего менять, потому что они просто принципиально не хотят чтобы эта поддержка Windows XP у них была.


То есть то, что начиная с какой-то версии Process Explorer перестал корректно работать под XP — это не потому, что в него добавили какую-то функциональность, которой нет под XP. Это просто бюрократический препон.

как ко мне, то всё же не факт, что где-то в шкафу недалеко от вашего дома ваша пара проводов не заходит в голосовой шлюз...

Я думаю, что тот факт, что я пользуюсь ADSL через медную пару говорит в пользу того, что эта медная пара идёт не в ближайший шкаф с голосовым шлюзом, а на АТС, где стоят DSLAM-ы и прочая DSL-специфичная аппаратура.


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

Ну создать соединение через модем не трудно.

Не трудно. Трудно найти человека, который догадывается, что имея два модема можно соединить два разнесённых компьютера компьютера и для этого не нужен интернет-провайдер.


На если я знаю про событие А, на другой стороне знают про событие Б, то про событие В тут информации не найти

Это если у вас два хоста звонят друг другу. А теперь представьте жилой дом, внутри которого LAN (а во многих домах такое осталось с нулевых годов), и десяток квартир в одном доме дозваниваются в такие же квартиры ближайших домов, внутри которых все квартиры тоже связаны своими локальными сетями.


Кстати тут еще привет всем, кто рубашку на себе рвет, мол домашний телефон не нужная фишка в наше время.

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


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

Information

Rating
1,937-th
Location
Петропавловск, Северо-Казахстанская обл., Казахстан
Registered
Activity

Specialization

Software Developer, Embedded Software Engineer
Pure C
Assembler
X86 asm
Win32 API
Visual Basic
MySQL
Git
OOP
Electronics Development
Reverse development