• Горе от ума, или Почему отличники пишут непонятный код
    0
    Так можно делать только с С99 или при наличии у компилятора соответствующего расширения. В C89 так нельзя.
  • Горе от ума, или Почему отличники пишут непонятный код
    0
    А еще в «функциях»-макросах не создать локальных переменных(про C), что приведет функцию в вид фарша.
  • Горе от ума, или Почему отличники пишут непонятный код
    0
    Данная либа должна компилироваться везде, где только есть более-менее работающий C, поэтому доверить inline компилятору я не могу.
  • Горе от ума, или Почему отличники пишут непонятный код
    0
    По причине того что inline лишь «рекомендует» компилятору заинлайнить функцию, кроме того это код на C89.
    Кроме того, от разделения конкретно этой функции на «действия» станет только непонятнее ее работа.
  • Научиться программировать становится сложнее
    +2
    Полностью согласен с автором, я начинал с BASIC, а если бы надо было ставить всякие Node js/gcc/git/..., колдовать с командной строкой, вводя магические символы, мучиться от неверных переменных окружения, и производить запуск/компиляцию с помощью кучки MAKE/bat/sh файлов, то я бы мог просто сдаться, так и не написав совой первый «Hello World!».

    Про встроенные средства программирования — эх… раньше, ты включал компьютер, и он буквально приглашал тебя творить, мигая курсором во встроенном бейсике, или давая возможность его запустить всего одной командой. А сейчас — компьютер, это устройство потребления контента, даже пейнт выпилили из винды, т.к. большинство даже нарисовать рожицу в пейнте не хотят, лучше в котиков/сериалы/игры позалипать.
  • Горе от ума, или Почему отличники пишут непонятный код
    0
    Безусловно, есть и бОльшие функции нежели эта, данная функция пример функции имеющей большой «когнитивный» размер — очень много надо неочевидных связей держать в голове, написать ее было сложно, читать спустя время — не менее сложно. При том что имел дело с функциями под 700 строк, но достаточно линейными, чтобы не вызывать сложностей в написании/чтении.
  • Горе от ума, или Почему отличники пишут непонятный код
    0
    Я бы рад не писать таких огромных функций, с кучей сущностей, однако далеко не всегда вызов функции «бесплатен».
    код
    // BEGIN $RawMaskBlit(WriteByte1, WriteByte2, WriteByte3, WriteByte4)$. Do not change this line!
    void ZXRawMaskBlitCopy(ZXBitmapRef bitmap, int x, int y,
                       ZXBitmapRef src, int srcX, int srcY, int srcWidth, int srcHeight, ZXData maskData)
    {
        /* dest and src */
        ZXData pScan, pSrcScan, pMaskScan, pScanEnd;
        ZXData p, pSrc, pMask;
        unsigned char b, m;
        int scan, srcScan;
        /* offsets, flags, etc */
        int offset, srcOffset, endPixels;
        int fullBytes, endLine;
        int compRealOffset, realOffset;
        int isRegular;
        
        /* calculate the sizes of scan lines */
        scan = BitmapScanSize(bitmap);
        srcScan = BitmapScanSize(src);
        
        /* get pointers to a byte corresponding to a pixel */
        pScan = BitmapPixelPtr(bitmap, x, y);
        pSrcScan = BitmapPixelPtr(src, srcX, srcY);
        pMaskScan = PixelPtrData(maskData, srcScan, srcX, srcY);
        /* calculating end vertical line */
        endLine = y + srcHeight;
        
        /* bitmap offset */
        offset = x % 8;
        /* src offset */
        srcOffset = srcX % 8;
        
        /* get information about how much pixels should be shifted, */
        /* important: when (offset < srcOffset) one byte is completely absorbed when outputting the left byte */
        if(offset >= srcOffset)
            realOffset = offset - srcOffset;
        else
            realOffset = 8 - (srcOffset - offset);
        compRealOffset = 8 - realOffset;
        
        /* count of full-size bytes */
        fullBytes = CalcFullBytes(x, srcWidth);
        /* offset end pixel */
        endPixels = (x + srcWidth) % 8;
        /* regular draw or not */
        /* a) snap to right colum */
        /* b) snap to left colum */
        isRegular = (offset + srcWidth >= 8) || (offset == 0);
        
        /* main loop y */
        for(; y < endLine; y++) {
            p = pScan;
            pSrc = pSrcScan;
            pMask = pMaskScan;
            
            /* take care of left byte */
            /* xxxxxxxx XXXXXXXX xxxxxxxx */
            /* ^ we here */
            if(offset != 0) {
                if (offset >= srcOffset) {
                    b = *pSrc >> realOffset;
                    m = *pMask >> realOffset;
                    
                    /* need next byte if we haven't real offset */
                    if(realOffset == 0) {
                        pSrc++;
                        pMask++;
                    }
                }
                else {
                    b = (*pSrc << compRealOffset) |
                    (*(pSrc + 1) >> realOffset);
                    m = (*pMask << compRealOffset) |
                    (*(pMask + 1) >> realOffset);
                    /* we completely used a byte, take a new */
                    pSrc++;
                    pMask++;
                }
                
                /* combine dest and src */
                if(isRegular) {
                    b = (*p & rByte[offset]) | (b & lByte[offset]);/* $WriteByte1$ */
                    *p = (*p & ~m) | (b & m);
                }
                else {
                    b = (*p & ~(rByte[srcWidth] >> offset)) | (b & (rByte[srcWidth] >> offset));/* $WriteByte2$ */
                    *p = (*p & ~m) | (b & m);
                }
                
                p++;
            }
            
            /* main loop x */
            /* xxxxxxxx XXXXXXXX xxxxxxxx */
            /*          ^ we here */
            pScanEnd = p + fullBytes;
            if(realOffset != 0) {
                for(; p < pScanEnd; p++) {
                    b = (*pSrc << compRealOffset) |
                    (*(pSrc + 1) >> realOffset);
                    m = (*pMask << compRealOffset) |
                    (*(pMask + 1) >> realOffset);
                    
                    /* combine dest and src */
                    b = b; /* $WriteByte3$ */
                    *p = (*p & (~m)) | (b & m);
                    
                    pSrc++;
                    pMask++;
                }
            }
            else {
                for(; p < pScanEnd; p++) {
                    b = *pSrc;
                    m = *pMask;
                    
                    /* combine dest and src */
                    b = b; /* $WriteByte3$ */
                    *p = (*p & (~m)) | (b & m);
                    
                    pSrc++;
                    pMask++;
                }
            }
            
            /* take care of right byte */
            /* xxxxxxxx XXXXXXXX xxxxxxxx */
            /*                   ^ we here */
            if(isRegular && endPixels) {
                if(realOffset != 0) {
                    b = *pSrc << compRealOffset;
                    m = *pMask << compRealOffset;
                    /* .. end pixel is double byte src */
                    if(endPixels > realOffset) {
                        b |= *(pSrc + 1) >> realOffset;
                        m |= *(pMask + 1) >> realOffset;
                    }
                }
                else {
                    b = *pSrc;
                    m = *pMask;
                }
                
                /* combine dest and src */
                b = (*p & lByte[endPixels]) | (b & rByte[endPixels]);  /* $WriteByte4$ */
                *p = (*p & (~m)) | (b & m);
            }
            pScan += scan;
            pSrcScan += srcScan;
            pMaskScan += srcScan;
        }
    }
    // END $RawMaskBlit$. Do not change this line!

  • Как «ошибка выжившего» мешает делать выводы в контент-маркетинге и smm
    0
    ТРИЗ еще при Сталине начали разрабатывать в СССР!

    Вот это аргумент, а ещё при Сталине запретили генетику, и объявили о том что Ленин жив.
    Я так понимаю на проводе поколение ЕГЭ? Ник как бэ подтверждает это.

    Именно, а ещё я благодарен ЕГЭ что смог поступить в ВУЗ, находящийся в другом городе, что без ЕГЭ было бы невозможно.
  • Как «ошибка выжившего» мешает делать выводы в контент-маркетинге и smm
    0
    Я смотрю появилась очередная разрекламированная фигня — «ТРИЗ». Для понимания которой конечно же надо пройти платные курсы.
  • Самое опасное слово в разработке программного обеспечения
    0
    Чет я не врубаюсь — вы продаете недоделанный 3д движек?
  • К кому обратиться за дизайном: фрилансеры, дизайн-студии, брендинговые агентства
    0
    Какой же убогий весь этот новый модный дизайн.
  • Самое опасное слово в разработке программного обеспечения
    +9
    Просто вода.
  • Можно ли использовать С++ вместо Си для небольших проектов в микроконтроллерах
    +3
    Как же вы задолбали все со своим js и вебом не к месту.
  • Код проверяли буквально по строчкам: как наш межсетевой экран проходил сертификацию ФСТЭК
    +1
    Ну а заказчикам это лишний повод задуматься — если у поставщика нет сертификата ФСТЭК, так ли он хорош, как рассказывает о себе?

    Ме..., ну такое себе.
  • Код проверяли буквально по строчкам: как наш межсетевой экран проходил сертификацию ФСТЭК
    +1
    Ааа, ну все ясно теперь, очередной сравнительно законный способ отъема денег.
  • В 20 раз дешевле, в 2,5 раза точнее и вдвое удобнее
    +1
    И еще, я здесь никому ничего не продаю и не предлагаю, никого ни в чем не убеждаю.

    Вы как бизнес-тренер отлично понимаете, что статьи на данном ресурсе делают вам имя, а для бизнес тренера имя — самое главное:)
    Что-то кому-то доказывать я не буду, ибо мне от вас ничего не нужно.

    Я не прошу что-либо мне доказывать, я лишь хочу понять, вы практик или нет.(я о технических проектах, и изобретениях)
  • В 20 раз дешевле, в 2,5 раза точнее и вдвое удобнее
    +3
    Кстати, я извиняюсь за нескромный вопрос, но все же — у вас есть примеры успешных технических/рационализаторских проектов, на которые не жалко оставить здесь ссылку?
    Щас ну ооочень много бизнес тренеров, людей дающих мастер классы и т.д. но не имеющих по факту не одного реального, успешного проекта, кроме этой тренинговой деятельности.
  • В 20 раз дешевле, в 2,5 раза точнее и вдвое удобнее
    0
    Используется не датчик (компонент) а рамка (готовое изделие), которая протестирована и прекрасно работает. Зачем тестировать то, что уже давно протестировано? Я использовал эти рамки в другом проекте (по прямому назначению), все работает и соответствует…

    Прямое назначение у рамок — как я понял сенсорный экран, там явно другие требования к точности и отсутствию периодических глюков, пыле-влаго защищенности.
    Стоимость фирменных устройств взята не с потолка, да, большой процент может быть стоимостью бренда, но не в разы.
    Ах да, еще поддержка, гарантийный ремонт, наличие необходимых деталей в момент поломки — это тоже не бесплатно.
  • В 20 раз дешевле, в 2,5 раза точнее и вдвое удобнее
    0
    Может я чего-то не понимаю, но ведь часто именно на стадии прототипирования, не на «бумаге», а в «железе» начинает рости стоимость, сильно.
    Сегодня «да, китайские датчики сойдут», а завтра на тестировании прототипа «ой, а они не соответствуют своим техническим характеристикам, врут, в зависимости от фазы луны, и требуют переодической калибровки», и это только одна из возможных проблем.
    Потом может всплыть то, что, они быстро засоряются на пыльном складу, ломаются от легкого прикосновения.
    Ах да… корпус — это отдельная песня!
  • Миром всё ещё управляет язык С
    0
    Embarcadero Rad Studio (C++Bulder) — по прежнему — один из лучших инструментов для написания C кода :)
  • Миром всё ещё управляет язык С
    –3
    Они еще те кидалы, на Chaos Constructions 2017 кинули всех(не уверен точно, но вроде как на $$$), в первую очередь посетителей, отказавшись выступать в последний момент, из-за «неправильного» звука на площадке.
    <ИМХО>Поэтому, я только убедился в том, что реперы, в большинстве своем — мрази.</ИМХО>
  • С днём рождения, Vivaldi!.
    0
    Это фишка движка Presto была, реализация на основе хромиума/блинка невозможна (со слов команды оперы).
  • 23 Шортика по ReactJS – короткие видео-уроки не только для новичков
    +6
    Это же насколько оно не надо никому, что приходится такими превьюхами завлекать?
  • Помогаем доставке еды: редизайн логотипа и разработка фирменного стиля
    0
    Старое лого лучше. А у компании бизнес не идет, не из-за лого, нет, просто хипстеров в мире ограниченное количество, а компаний, пытающихся им что-то впарить(в крафтовой бумаге конечно же) все больше и больше.
  • Программирование превращается в помойку
    +1
    Простите, но текущий UNIX way — набор костылей, запускаешь утилиту, она делает что-то и отдает результат, преобразуя его в текстовой вид, другая утилита которая должна продолжить работать над данными парсит вывод предидущей, преобразуя обратно в бинарный вид, тратя на это время и нагревая атмосферу…
    Да можно и по другому, но в настоящее время оно работает именно так.
  • Программирование превращается в помойку
    0
    Ключевое слово «поголовное», асинхронщина необходимое зло, но надо знать меру.
  • Программирование превращается в помойку
    +3
    Я согласен с автором в части того что программирование действительно стало помойкой, бесконечные фреймворки, лишние абстракции — ради абстракций, необъятность архитектуры, и т.д.
    Черт, вчерашние уязвимости процессоров — из этой серии, цпу стали настолько сложными, что нахождение очередной такой уязвимости — дело времени.
    И главное — а ради чего? Ради новой анимации? Или ради скорости работы? — не знаю, софт тормозит не меньше, чем десять лет назад, но теперь с красивой анимацией прогресса(тормозов).
  • Программирование превращается в помойку
    0
    Я считаю что поголовное увлечение асинхронностью/событийностью привело к тому что программы стали более нестабильными/недетерминированными.
    Если в программе основанной на концепции Главного Цикла, при зависании одной из функций — висла вся программа, и было понятно что «приехали», надо писать разработчику/править сорцы, то с текущей асинхронностью — нередко когда программа вроде и работает, но, то кусок отвалился, то не обновляется, то ui вроде реагирует, но ничего кроме индикации «waiting...» не происходит, и такие странности живут годами, ибо воспроизвести их сложно/невозможно.
  • Если вы девушка, то стоит ли идти в разработчики. Мой опыт
    +2
    Ммм, пьяные комменты на хабре, классика :)
    С Новым годом!
  • Если вы девушка, то стоит ли идти в разработчики. Мой опыт
    0
    Я пишу на основе личного, субъективного опыта, опыта моих знакомых. Да есть и исключения — и это хорошо. Но к сожалению они редки, и с этим, я думаю, согласиться большенство аудитории Хабрахабра.
    Далеко ходить не надо — тыкните рандомно 10 юзеров, хорошо если каждый десятый будет девушкой. Можно долго говорить что и эта выборка не репрезентативна, но факт остаётся фактом — девушек в программировании, особенно не в вебе, крайне мало, а увлечённых ещё меньше.
    А комментарии на то и нужны, чтобы высказаться по теме статьи, это мое личное мнение, не более.
  • Если вы девушка, то стоит ли идти в разработчики. Мой опыт
    0
    Это одна из причин почему девушек в it мало, но некоторые умудряются потом js monkey работать, программируя с помощью Stack Overflow.
  • Если вы девушка, то стоит ли идти в разработчики. Мой опыт
    –2
    Я и мои знакомые сами учились перед вузом/информатикой в школе, из интереса, у девушек обычно нет достаточно сильного интереса, чтоб самой пытаться. Кто-то обязательно должен натаскивать, ведь программирование намного менее интересное занятие чем к примеру просмотр сериалов/игры и игры.
  • Логично ли, что Гугл отклонил кандидатуру Макса Хауэлла, автора Homebrew, за неумение инвертировать двоичные деревья?
    –3
    Согласен, слушаю от одного приятеля высеры про то, что я — формошлеп и т.д., а в итоге фикшу то, что человек не может сделать уже месяц выловив переполнение стека, не за бесплатно конечно же. Зато олимпиадные задачи человек решает, да, ко ко ко задростово, ко ко ко биг дата, ко ко ко профессионализм.
  • Если вы девушка, то стоит ли идти в разработчики. Мой опыт
    +9
    Быть программистом и при этом записывать кучу текстовой информации (включая код) ручкой на бумаге — это ничего плохого?

    Ох тыж боже!, быть программистом и записывать информацию на бумаге! Ужас! Не одна тетрадь не достойна этого!

    И да — в вашем профиле:
  • Если вы девушка, то стоит ли идти в разработчики. Мой опыт
    +1
    Не вижу ничего плохого.
    У меня тоже такая есть, разве что в текущем виде это записи в OneNote, удобно, да и приятно осознавать то, что у тебя не пропадет доступ к знаниям, при проблеме с интернетом. Выручало не раз.
  • Если вы девушка, то стоит ли идти в разработчики. Мой опыт
    +2
    Есть девушки разработчики, но их на порядок меньше, особенно в чем-то не связанном с версткой, просто из-за того, что меньшему количеству девушек интересно все это программирование/электроника/технарство. К сожалению такова жестокая правда.
    Многие оправдывают себя тем что «мне не давали программировать», порицали, не учили, демотивировали и т.д., но правда в том, что если тебе что-то действительно интересно — ты берешь и делаешь, а не ищешь очередное оправдание.
    Ну и немаловажно умение заниматься «самообразованием», чего по неизвестной причине многие девушки рвущиеся в it не умеют.
    Прошу прощения, если комментарий показался вам сексистским.
  • Как успешно научить себя программировать
    +2
    К сожалению все именно так, у нее талант не к программированию, а к продвижению себя.
  • Как успешно научить себя программировать
    +3
    Неоднократно случайно натыкался на нее в instagram по хештегам, как и большенство «разработчиц» — хайпажерка, не более, к сожалению.
  • Как мы делали приложение под Windows 10 с Fluent Design (UWP/C#)
    0
    Честно говоря ожидал что в UWP создать кастомный контрол будет проще и «красивее», сейчас это похоже на кучу костылей и хождение по неопределенному поведению :(
  • Восемь возможностей C++17, которые должен применять каждый разработчик
    +6
    Взглянул на новые атрибуты в C++17, и у меня возник вопрос, возможно, я слишком туп чтоб понять всю гениальность, возможно у вас есть идеи?
    • maybe_unused
    • nodiscard
    • fallthrough
    Мелочь, а глаза мозолит:
    maybe_unused — через нижнее подчеркивание, чтобы разделить слова — логично.
    nodiscard — одним словом, хотя слова «nodiscard» — не существует, ожидаемо наличие нижнего подчеркивания, но его нет.
    Как я понимаю, эти атрибуты одновременно добавили, почему такая неконсистентность, что помешало?