• Git Flow. Как удалить коммиты после удаления ветки?

    Конечно коммиты видны будут, при мёрже просто создаётся новый мёрж-коммит, "сцепляющий" две ветки, и этот коммит помещается в ту ветку, в которую вы мержите.

    Вообще то, что у вас на скрине - это нормальная ситуация. Если человеку нужны только коммиты в мастере, то его инструмент должен позволять ему посмотреть только их. Так что это не проблема наличия коммитов, а проблема того, где вы их смотрите.

    Если уж вы действительно считаете, что некоторые коммиты "лишние" и их можно было бы объединить, почитайте про git squash. Только это желательно делать до пуша бранча, и уж точно до мёржа - сейчас мёрж-коммит намертво прицеплен к последнему коммиту из фичебранча.

    Вообще почитайте лучше еще про Git и про ваш UI к нему, удаление коммитов из середины смёрженного бранча с точки зрения Git - абсолютно бредовая затея. В частности, почитайте про то, что такое ветки: это всего лишь перемещающиеся указатели на коммит, и при удалении ветки коммиты удалятся только в том случае, если они не были никуда зацеплены (смёржены). После мёржа удаление ветки - это лишь удаление указателя, которое как бы говорит нам, что разработка этого бранча закончена, и дальнейших коммитов в рамках этого бранча уже не будет.
    Ответ написан
  • Для чего нужны виртуальные методы?

    Nipheris
    @Nipheris Куратор тега C++
    Для чего нужны виртуальные методы?

    Виртуальные методы - это реализация полиморфизма в C++.
    Обычная виртуальная функция нужна для правильного вызова перегруженных функций в производных классах

    Переопределённых, а не перегруженных.
    Но для чего нужен виртуальный деструктор, к примеру?

    Объект тоже может разрушаться полиморфно:
    class shape {
    public:
        virtual ~shape() { } // без virtual будет вызван деструктор класса shape
    };
    
    class circle : shape {
    public:
         virtual ~shape() { } // c virtual вызовется деструктор именно того класса, объект которого вы разрушаете
    ....
    };
    
    shape* c = new circle();
    .....
    delete c; // вызов деструктора. С virtual вызовется деструктор circle, а не shape, как нам и надо.
    Ответ написан
  • Где почитать информация по провайдерам данных?

    ODP.NET это надстройка над ADO.NET?

    Ну у вас и каша в голове, неудивительно, что вы ничего не можете найти.

    ADO.NET - это прежде всего набор интерфейсов, обеспечивающих написание кода, работающего с реляционными данными таким образом, что он минимально зависит (или не зависит вообще) от конкретной используемой СУБД. ADO.NET это далеко не первая попытка унифицировать интерфейс доступа к базам данных (хотя бы к реляционным), многие крупные вендоры это делали, тот же Борланд.

    С момента появления дотнета как платформы ADO.NET был и остаётся основным способом доступа к реляционным БД из дотнет-приложений. В большинстве случаев нет причин НЕ пользоваться им. Стоит отметить, что хоть сейчас MS советует использовать ORM (с тех пор, как повзрослел Entity Framework) для доступа к данным, ADO.NET никуда не девался, т.к. все известные мне ORM-ми работают также через эти интерфейсы.

    Провайдеров данных существует множество, и существование каждого из провайдеров определяется существованием конкретной СУБД. ODP.NET это не надстройка над ADO.NET, это реализация интерфейсов ADO.NET, способная взаимодействовать с Ораклом. Аналогичные провайдеры существуют и для других популярных СУБД, включая PostgreSQL, DB2, MySQL и даже SQLite. По сути доступность реляционной СУБД на дотнете определяется наличием работоспособного ADO.NET-провайдера.

    Разумеется, конкретный провайдер может добавлять какой-то специфичный функционал, но при этом он должен реализовать все необходимые интерфейсы. Фишка ADO.NET в том, что реально написать такое приложение (разумеется, если пользоваться только стандартными SQL конструкциями), которое ВООБЩЕ не будет зависеть от конкретной СУБД вплоть до того, что нужного провайдера можно будет указывать в конфиг-файле.

    Большинство интерфейсов и классов ADO.NET находятся в пространстве имён System.Data. Условно они делятся на собственно интерфейсы для доступа к БД (важнейшие из них: IDbConnection, IDbCommand, IDataReader) и классы-хелперы, в частности набор классов для организации простейшей in-memory базы данных внутри вашего приложения, которая будет служить кэшем для данных, взятых из основной БД (важнейшие классы: DataSet, DataTable).

    Слышал что есть управляемые и неуправляемые провайдеры данных, в чем отличие?

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

    Почитать об этом можно в любой нормальной книжке по дотнету. Если остались вопросы, пишите в комментарии.
    Ответ написан
    3 комментария
  • Библиотека для работы с географическими координатами?

    Nipheris
    @Nipheris Куратор тега C++
    GEOS конечно, чего тут думать.

    Если не верите мне, поверьте команде PostGIS :)
    GEOS for many geometry processing algorithms
    Proj.4 for coordinate re-projection functions
    GDAL for raster processing and format support
    Ответ написан
    1 комментарий
  • System.io mscorlib или system в C#?

    Nipheris
    @Nipheris Куратор тега C#
    Не совсем понятно, зачем вам это. Когда вы пишете using System.IO в текущий скоуп добавляются сущности из всего System.IO, не важно из какой сборки (иными словами, со всех сборок сразу). В этом и смысл пространств имён в дотнете - они предствляют собой способ логического деления проекта и библиотек (в отличие от физического деления на сборки). Если вы не хотите подключать всё, подключите конкретный класс таким образом:
    using StreamReader = System.IO.StreamReader;
    Ответ написан
    2 комментария
  • Как происходит клиент серверное взаимодействие на разных языках?

    Nipheris
    @Nipheris Куратор тега C++
    Ответ написан
    Комментировать
  • Можно ли реализовать следущий подход с помощью Generic типов?

    Nipheris
    @Nipheris Куратор тега C#
    interface IFoo
    {
      // Не содержит метод Commit()
      // Но содержит все остальные методы и свойства, которые реализованы в классе Foo
    }
    interface ITransaction
    {
        void Commit();
    }
    class Foo : IFoo, ITransaction
    {
      // ...
      
      public void Commit() 
      {
        // ...
      }
    }

    class Bar<T, TImpl> where TImpl : T, ITransaction, new()
    {
      private readonly TImpl _foo;
    
      protected T Foo {
        get { return _foo; }
      }
    
      public Bar() {
        _foo = new TImpl();
      }
     
      public void Commit()
      {
        _foo.Commit();
      }
    }
    Ответ написан
    3 комментария
  • Как изменить TargetFileName, чтобы было видно версию?

    Nipheris
    @Nipheris Куратор тега C#
    Более правильный метод называется ClickOnce. MSI тоже исключать не стоит (хотя именно вам он видимо не нужен).
    Не изобретайте велосипедов там, где справляются серьезные технологии деплоя.
    Ответ написан
  • Как сделать загрузку файла в фоне из сайта с логином и паролем?

    Nipheris
    @Nipheris Куратор тега C#
    А) Залогиньтесь через WebBrowser, возьмите куку, отдайте WebClient-у, скачайте файл;
    Б) Разберитесь, как происходит авторизация на сайте, проведите её с помощью WebClient, получите куку, установите её в запрос на скачивание файла, скачайте файл.
    Ответ написан
    2 комментария
  • В каких случаях лучше использовать NoSQL, а в каких SQL?

    Вот вам развёрнутый ответ.
    Пользовался NoSQL и SQL

    Не могли вы пользоваться NoSQL, вы пользовались какой-то конкретной моделью данных и конкретной СУБД.
    какую БД лучше использовать

    Ни NoSQL ни SQL это ни БД, ни СУБД.
    Был бы признателен за ссылку на статью или развёрнутый ответ, чтобы в будущем я мог при проектировании проекта сразу определится с выбором базы данных.

    В формате "ответ на Тостере" невозможно сравнить существующие сейчас модели данных и уж тем более дать советы по выбору СУБД. Начните с другого: оставьте историко-маркетологический термин "NoSQL" в стороне и начните с рассмотрения реальных моделей данных и их популярных реализаций:
    - колоночная СУБД;
    - хранилище "ключ-значение";
    - документно-ориентированная БД;
    - графовая БД;
    Ответ написан
    2 комментария
  • Почему такие данные в рейтинге?

    Nipheris
    @Nipheris Куратор тега C#
    В основном — процессы, связанные с устареванием одних технологий (C#, C++, Objective-C, ActionScript, Perl) и появлением их заменителей (JavaScript, Swift, R, Go).

    Go заменяет C#, C++ и Perl в одном лице? Можно мы не будем обсуждать этот рейтинг?

    По второй ссылке не вижу ничего конкретно про C#. Ну понятно что Джава будет популярнее - MS только начали исправлять ситуацию с псевдокроссплатформенностью C#, отразится это довольно не скоро. Многие метрики учитывают open-source код и открытые данные, а C# язык корпоративный, одному богу известно кто и где на нём сейчас что пишет. Java в общем-то тоже, но проектов в открытом доступе на ней значительно больше.
    Ответ написан
    2 комментария
  • Существуют ли комические случаи использования моделей данных?

    Почитайте про EAV - это не то чтобы комичный случай, я бы сказал это случай взвешенного использования неподходящей модели данных.
    Ответ написан
    4 комментария
  • Как исправить ошибку error TS2307: Cannot find module 'Parent'?

    В TypeScript-код невозможно непосредственно подключить JS-файл, т.к. компилятору TypeScript требуется дополнительная информация о том, что находится "внутри" подключаемого модуля. Для того, чтобы сообщить компилятору эту информацию, используются так называемые declaration файлы (с расширением .d.ts). Их обычно кладут рядом с js файлом с таким же именем (в вашем случае это будет parent.d.ts). В таком файле необходимо описать все сущности, экспортирующиеся из соответстующего JS файла. Подробности можно почитать тут.

    Разумеется, вам ничего не мешает переписать parent.js на TypeScript, если вам так проще.
    Ответ написан
    Комментировать
  • На каком уровне системный архитектор должен знать технологии?

    Дисклеймер: я не системный архитектор, и даже не знаю, кто конкретно должен так называться, наверное это что-то вроде технического директора.

    Или у меня чрезмерно идеалистические представления о роли архитекторов в разработке?

    Да, чрезмерно. Архитекторы (как вы их называете) не боги и даже не "вторые после бога".

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

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

    Опять же, отрасль очень бурная - когда успевать работать и следить за всем, что в ней происходит?

    А надо уметь главное выделять. Ну к примеру, вот позавчера анонсировали докер на винде на нативных контейнерах. Что нужно знать хорошему техническому директору? Что в 2016-й винде есть контейнеры (причём двух видов, настоящие и поверх hyper-v), что докер теперь будет их использовать со всеми вытекающими. Само собой нужно представлять что такое контейнер и чем от отличается от ВМ. Вот и всё что нужно знать, ну и посматривать за отзывами первых, кто осмелится опробовать технологию в деле.

    Ну или вот возьмём TypeScript. Не обязательно писать на нём или знать его досконально. Достаточно понимать, что такое статическая типизация в языке, и уже можно будет представить разницу между использованием в большом проекте ES5/ES6 и TypeScript. Достаточно принять решение опробовать его у себя (как сейчас делаем мы) на небольшом куске проекта, и сделать вывод о дальнейшем использовании.

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

    Техническому директору проекта ("архитектору") гораздо важнее уметь правильно обрабатывать информацию, уметь снимать маркетинговую шелуху (вроде той, что была и есть с NoSQL от всех проблем и несчастий), спокойно реагировать на модные баззворды, и собирать библиотеку доверенных людей и информационных ресурсов. И важно знать о вещах, которые с течением времени не меняются, или меняются медленно и неохотно:
    • для каких задач подходят функциональные языки, а для каких - ОО;
    • что графовая СУБД как правило быстрее обрабатывает запросы на поиск с большой длиной цепочки;
    • что утверждение из предыдущего пункта неплохо бы проверить на практике с конкретными СУБД;
    • что веб-фреймворки бывают толстые и тонкие;
    • какие сегодня есть вариации паттерна MVC;
    • что сборка мусора это всегда накладные расходы и иногда не вполне предсказуемое поведение;
    • что данные от пользователя нужно фильтровать, иначе в вашей системе найдут машину Тьюринга не там, где надо;
    • что в информационной системе есть компоненты с разным уровнем доверия, равно как и сотрудники;
    • что транзакции в СУБД придумали не для того, чтобы учебники стали толще.
    Ответ написан
    4 комментария
  • Как подключить стороннюю библиотеку на с++?

    Nipheris
    @Nipheris Куратор тега C++
    Даже и не знаю, с чего начать.
    1) CScreenShotDlg - скорее всего это классы из примера, и в библиотеке его нет, почитайте внимательно первоисточник;
    2) CPaintDC - это из MFC;
    3) остальное это WinAPI - инклуд windows.h должен помочь.

    Теперь главный вопрос - почему вы этим занимаетесь, если
    С плюсами толком не знаком.

    Разработка с MFC и под WinAPI даже бывалого плюсовика может с ума свести.
    Ответ написан
    2 комментария
  • Как избавиться от StackOverFlow при рекурсивной сортировке?

    Не обязательно в качестве "стека" использовать системный стек вызовов. Вы можете вместо рекурсии использовать цикл, а вместо системного стека вызовов использовать стек в библиотеке вашего языка программирования. Вместо рекурсивного вызова у вас будет помещение кортежа значений - параметров сортировки - на стек и их извлечение оттуда на очередном шаге обработки.
    Ответ написан
    Комментировать
  • Отказаться от group by и sort by?

    При этом "узким горлышком" производительности веб приложений как правило является именно БД.

    Логично, ведь большинство веб-приложений это выборка с некоторой простой обработкой. А БД не все умеют хорошо спроектировать.
    Имеет ли смысл сортировать и группировать результаты выборки с помощью ЯП, чтобы убрать сортировку и группировку из запросов?

    Это имеет смысл только если у вас вообще нет индексов, и по каким-то непостижимым причинам вы не можете их добавить. Чтобы отсортировать быстрее СУБД, нужно построить индекс самому, а вы вряд ли сделаете это лучше СУБД, еще и так, чтобы покрыть расходы на передачу данных. Группировку имеет смысл только если агрегирующая функция вычислительно очень сложная, но такое вы скорее всего в SQL запросе писать и не будете.

    Даже если у вас sort и group действительно занимают основной процент времени, перенос этих операций в код приложения врядли вам поможет. Иначе говоря, пока вы добьетесь приемлемого результата от такого решения, вы добрую часть алгоритмов СУБД перепишите заново (сначала вы напишите индексы для поиска или сортировку слиянием, потом, как заметил Сергей Савостин у вас всё равно данные не будут влезать в ОЗУ и вы захотите писать их на диск, тут же вашу копию данных в приложении нужно будет синхронизировать и вы начнёте писать примитивную репликацию и так далее..)
    Ответ написан
    Комментировать
  • Как стать профессиональным разработчиком WPF?

    Nipheris
    @Nipheris Куратор тега C#
    А у MVVM нет общих правил, каждый реализовывает его по-разному.

    Ну я б не говорил, что их прям нет. Есть привязки, есть INotifyPropertyChanged, есть рекомендации от MS. Да, вы правы в том смысле, что WPF это библиотека, но НЕ фреймворк для разработки, т.е. она не регламентирует структуру приложения.

    И у меня диссонанс — что сначала изучать, куда копать, что вообще делать, что стоит изучать, а что нет.

    Вот пару дней назад советовал книгу: Raffaele Garofalo, "Building Enterprise Applicatio... - если ничего не читали еще, начните с неё.

    И действительно хороших, многофункциональных и понятных проектов на WPF + MVVM я не видел.

    Неудивительно: WPF-приложения это обычно line-of-business, а это не open-source по определению.

    С чего начать изучение WPF?

    Убедитесь, что более-менее понимаете платформу .NET и ООП в ней, иначе будет тяжело.
    Вам надо будет разобраться:
    а) с системой зависимых свойств (dependency property);
    б) c MVVM и INotifyPropertyChanged;
    в) само собой с XAML и контролами, принципами написания своих контролов;
    г) со стилями и стилизацией;
    д) с системой команд (ICommand) и прочим.

    Нужны ли MVVM-фреймворки? Почему столько дискуссии возникает. Одни говорят да, другие — нет.

    Дискуссии возникают потому что а) некоторые вещи можно сделать разными способами; б) разработчики имеют дело с приложениями разного размера и сложности, но редко об этом задумываются в спорах; в) опытные разработчики нередко сами себя уже обеспечили нужным "библиотечным" пока разрабатывали приложения (ViewModelBase, хах :) ). Лучше пока разберитесь сами как что работает, потом поймете, какой фреймворк вам пригодится.

    Впоследствии еще советую познакомиться с IoC-контейнерами, если еще не пользовались. Это общий совет для крупных приложений, не только для WPF. Некоторые имеют спецальные интеграционные библиотеки для работы на пару с фреймворками, например Autofac: Prism.Autofac.
    Ответ написан
    1 комментарий
  • Выбор генератора схем баз данных?

    ERwin Data Modeler, Oracle SQL Developer Data Modeler
    Ответ написан
    Комментировать
  • Как правильно реализовать проект на .NET (WPF Desktop)?

    - не надо ли переписать каждый UserControl в свой отдельный проект (.dll) и после этого тягать его в основное окно?

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

    - что в общем можно прочитать про корректную архитектуру приложения (насколько я понял, вопрос именно по этой теме)?

    Raffaele Garofalo, "Building Enterprise Applicatio...

    - хотелось бы начать работать с версиями своего проекта. Visual Studio Team Services вроде как подходит, откуда начать изучение данного сервиса?

    Лучше начните с Git. Можно конечно поработать и со Студийным контролем версий, но раз уж вы не работали еще вообще ни с чем, гит будет более универсальным скиллом ввиду его подавляющей популярности. И да, самое главное - вам не обязательно будет сразу пользоваться каким-то сервисом, проект можно версионировать и у себя на машине, и залить в VSTS при необходимости. Удивительно, как вы до сих пор не пользовались никакой VCS, видимо вы аккуратный и терпеливый человек)

    Да, убедитесь что вы разобрались с MVVM. Может быть стоит подобрать фреймворк или самому собрать базовую библиотеку, если уже есть наработки.
    Ответ написан