• Вызов функции Delphi из DLL написанной на C++?

    @Rainberd
    Вы же в делфи функцию определили как stdcall, а в с - нет. Должно быть char* (__stdcall *getConnectionName)(int);
    Ну и плюс сишный char* не равен делфевому string, char* будет PAnsiChar
    Ответ написан
    2 комментария
  • Чем SVN лучше Git?

    @miksir
    IT
    Основные отличия - гита от svn - распределенность и хорошая поддержка ветвлений в разработке (ветки).

    SVN, конечно же, поддерживает ветки, но при сложных ветвлениях (ветки мержатся между собой) случаются неожиданные конфликты и т.п. Хотя, если у вас классическая схема - фича-ветка от мастера (транка) и обратный мердж в мастер (транк) - разница почти незаметна.

    Про распределенность: у SVN центральный сервер, у гита - граф серверов, хотя 99% процентов разработчиков используют локальный репо + один удаленный, т.е. по сути - тот же центральный сервер. Зато, так как репа локальная, гит очень быстр в переключении веток.

    Есть еще куча различий и, как плюсов, так и минусов у каждого ПО. Хотя сегодня SVN все реже и реже можно встретить, но в общем для многих рабочих групп его вполне достаточно для полноценной работы. С другой стороны - знать git тоже обязательно сегодня, ибо почти стандарт ;)

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


    Но я бы не стал говорить, что svn нормальный, а git нет. Просто он другой и со своими тараканами. Сам долгое время работал на SVN, потом потихоньку перебрались на git в основном из-за подводных камней сложного ветвления.
    Ответ написан
    Комментировать
  • Стоит ли учить Delphi или что то другое посоветуете?

    streetflush
    @streetflush
    Нужно понимать вашу цель.
    Просто для развития? Да, делфи отлично подходит для изучения. Он прост и понятен.
    Для работы? Кроме 10 вакансий для поддержки некрокода, ничего не найдете, тупиковый путь.

    В современных реалиях, я бы посоветовал изучить JS, тем более знания html css пригодятся.
    Ответ написан
    3 комментария
  • Как организовать мини-тренировки по программированию (для себя)?

    Dimusikus
    @Dimusikus
    Любитель
    Лично я для этого на тостере в этом разделе и сижу, чтобы каждый день изучать разного плана задачи с которыми обращаются пользователи.
    Еще как эксперимент можете взять себе под крыло какого нибудь "зеленого" юниора который изучает C#, поверьте мне, Вы еще задолбаетеь ежедневно решать возникшие у него задачи.
    Ответ написан
    2 комментария
  • Как организовать мини-тренировки по программированию (для себя)?

    @KingAnton
    Ответы на тостере
    Ответ написан
    Комментировать
  • Convert.ToXXXX() vs. XXX.Parse()?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Ни то, ни другое, лучше использовать TryParse. Потому что и Parse, и Convert.ToXXX выкинет исключение, и придётся использовать try catch, а в TryParse достаточно использовать if.

    Пример с числовым значением:
    int x;
    string str = Console.ReadLine();
    
    // Вариант с Parse
    try
    {
    	x = int.Parse(str);
    }
    catch (Exception)
    {
    	x = 0;
    	Console.WriteLine("Неверные данные");
    }
    
    // Вариант с Convert
    try
    {
        x = Convert.ToInt32(str);
    }
    catch (Exception)
    {
        x = 0;
        Console.WriteLine("Неверные данные");
    }
    
    // Вариант с TryParse
    if (!int.TryParse(str, out x))
    {
        Console.WriteLine("Неверные данные");		        
    }
    
    // Вариант с TryParse, если ноль устраивает
    int.TryParse(str, out x);
    Ответ написан
    Комментировать
  • Чем грозит сильная связанность между слоями для приложения?

    @Maa-Kut
    Очевидно, в первую очередь она грозит все нарастающими сложностями по мере развития и роста приложения: чем больше внутри связей, тем труднее их отслеживать и учитывать. Как итог, внесение правок в тот или иной слой или компонент системы влечет собой трудопрогнозируемые изменения в поведении не только этого компонента, но и ряда других, с ним как-то связанных. По сути, это касается не только слоев как таковых, но и функциональных блоков внутри них.

    Притча в тему:
    Маркетолог спрашивает программиста: в чём сложность поддержки большого проекта?

    Программист: ну представь, что ты писатель и поддерживаешь проект «Война и мир». У тебя ТЗ — написать главу как Наташа Ростова гуляла под дождём по парку. Ты пишешь «шёл дождь», сохраняешь, вылетает сообщение об ошибке «Наташа Ростова умерла, продолжение невозможно». Почему умерла? Начинаешь разбираться. Выясняется, что у Пьера Безухова скользкие туфли, он упал, его пистолет ударился о землю и выстрелил в столб, а пуля от столба срикошетила в Наташу. Что делать? Зарядить пистолет холостыми? Поменять туфли? Решили убрать столб. Получаем сообщение «Поручик Ржевский умер.» Выясняется, что он в следующей главе облокачивается о столб, которого уже нет…


    Потом, есть еще традиционный вопрос заменяемости компонентов. Скажем, сегодня у нас View - это веб-интерфейс. А завтра заказчик захотел, скажем, десктопный клиент или клиент в виде Android-приложения. А у нас уже Business на веб завязан. Или Data использует какой-нибудь NHibernate, который захотели заменить на EF. Но фиг там - в Business вовсю хвосты NHibernate торчат, и теперь надо полсистемы переписывать.
    Ответ написан
    1 комментарий
  • Как зарегистрироваться на codewars?

    nbekseitov
    @nbekseitov
    Ruby developer
    Если у вас не получается решить задачи при регистрации, значить еще рано.
    Вот вам список ресурсов для практики
    Если не знакомы с ООП Ruby: introducing-ruby-oop
    Ответ написан
    1 комментарий
  • Почему не запускается программа в Dev-C++?

    AnnTHony
    @AnnTHony
    Интроверт
    int fahrenheit;
    fahrenheit = factor * celsius/100 + 32;

    Градусы по Фаренгейту заданы целочисленным типом. Попробуйте заменить на double.
    При делении явно дробные числа получаются.

    upd.
    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int celsius;
        cout << "Enter the temperature in Celsius:";
        cin >> celsius;
        int factor;
        factor = 212 - 32;
        int fahrenheit;
        fahrenheit = factor * celsius/100 + 32;
        cout << "Fahrenheit value is:";
        cout << fahrenheit << endl;
        return 0;
    }


    ed1f2f9be18845ed9bc84423365109ed.jpg

    Компилятор GNU GCC, IDE Code::Block
    Ответ написан
    4 комментария
  • Почему нет ругани на модификацию стороннего куска памяти?

    Запись по невалидному указателю - это UB (undefined behavior), т.е. по стандарту произойти может что угодно. На деле просто пишется туда, куда сказали, что может вызвать как структурное исключение (SEH, не путать с обычными исключениями C++) на Windows или SIGSEGV на Unix'ах, а может и не вызвать, если по данному указателю запись возможна. Т.о. try-catch не решение по двум причинам:
    1. Исключение даже если и будет, то не C++ (хотя, к примеру, студия позволяет SEH'и ловить "обычным" catch)
    2. Исключение не гарантировано

    Проверять, что память доступна для записи в общем случае бессмысленно, так как она вполне может быть доступна, но по адресу лежит не массив, а какие-то другие данные, которые тем не менее можно перезаписать, поломав программу. Решение заключается в том, чтобы не писать туда, куда не нужно, т.е. сводить к минимуму манипулирование голыми указателями без должной осторожности и понимания.
    Ответ написан
    24 комментария
  • Есть ли стандарт для line separator?

    EXL
    @EXL
    Энтузиаст
    Если у вас имеется Git-репозиторий, то можно выполнить:

    git config --global core.autocrlf input
    Благодаря этому параметру код, полученный из репозиториев, на всех системах будет точно с таким же переносом строк, как и в репозитории. Однако, перед записью в репозиторий окончания строк будут конвертированы в LF. Эта настройка удобна для кросс-платформенной разработки в Unix-like системах, но так же может использоваться и в Windows. А если в Windows вам срочно потребуется CRLF, просто измените параметр input на true, таким образом при выгрузке кода из репозитория на машине пользователя будут CRLF-переносы, тогда как в самом репозитории так и останутся LF-переносы строк.
    Ответ написан
    Комментировать
  • Есть ли стандарт для line separator?

    Сейчас большая часть софта умеет обрабатывать оба варианта. Если это вам не мешает я бы забил. Если мешает есть широкий спектр средств для решения этой проблемы. От простого пакетного преобразования, до пост-чекаут и пре-чекин обработок, которые будут доставать файлы из репозитория с одним окончанием строк (допустим Windows если вы работаете на Windows), а класть в репозиторий с Linux-style.
    Ответ написан
    Комментировать
  • Как побороть боязнь чистого листа?

    @gleb_kudr
    У всех такое бывает в какой-то степени, просто обычно не с кодом. Это типичный симптом прокрастинации. Просто начинайте с чего-то самого простого и очень легко осуществимого за пару минут. И с таких зацепок уже гораздо легче будет погружаться в работу.
    Ответ написан
    Комментировать