• Влияет ли на что-нибудь ссылочное поле в структуре C#?

    Нужно быть осторожным при их копировании.

    В твоём случае, в поле myClass хранится ссылка на область памяти в куче. При копировании value type( к чему относится struct) создаётся просто новое значение на стеке.
    var a = 0;
    var b = a; //на стек помещается значение 0. Число есть число, ни на что не ссылается

    В копии структуры ссылочное поле инициализируется копией ссылки(а она ведет к тому же объекту на кучу) которая помещается на стек. Иными словами ты получишь поверхностную или shallow копию. При изменении свойств объекта ссылочного типа в одной структуре ты увидишь те же изменения и в поле копии.
    Ответ написан
    3 комментария
  • Как научиться думать как программист?

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

    Вот пустишь в production свой код, за год добавишь еще over999 строк. А потом у тебя возникнут баги. Ты посмотришь на то, что написал год назад, потратишь на решение простой задачи неприлично много времени, перекрестишься и постараешься переписать, чтобы добиться более поддерживаемого кода. При условии, конечно, что ты будешь совершенствоваться и не обманывать в первую очередь самого себя.
    Ответ написан
    Комментировать
  • Как из двух таблиц в SQL сделать третью по одинаковому столбцу?

    SELECT
        table2.post_id as post id,
        table2.title as title,
        table1.deposit as deposit
    FROM table2
        LEFT JOIN table1
            ON table2.title = table1.title//джойн по тайтлу; в зависимости от вида хранящихся строк возможно стоит делать приведение к нижнему регистру, удаление пробелов и т.д.

    P.S. Лучше бы, если джойн выполнялся по индексированным числовым полям(в угоду производительности).
    Ответ написан
    Комментировать
  • ASP NET Identity - как подключить в разрабатываемый проект?

    Если нужен пример - создай пустой проект в Visual Studio на основе шаблона ASP.NET MVC, с отмеченным пунктом авторизации(Individual User Accounts он называется). И будет тебе создан контекст подключения к БД. Кроме того, автоматически реализуется простейшая логика регистрации, авторизации, восстановления пароля и т.д. - будет много чего посмотреть.

    UPD: В "Pro" версии книги по MVC 5 от Фримана уделяется отдельное внимание Identity. Если не ошибаюсь, чуть ли не 100 страниц - рекомендую взгянуть также. Pro ASP.NET MVC 5 Platform
    Ответ написан
    Комментировать
  • Кто может объяснить как работает данное условие?

    Строка вида: This is "bum" text. What a "nice weather" today с помощью .Split('"') разобьется на массив следующего вида:
    [0] - 'This is'
    [1] - 'bum'
    [2] - ' text. What a'
    [3] - 'nice weather'
    [4] - ' today'

    Каждый элемент массива с нечетным (if(min % 2 == 1)) индексом - слово в кавычках. Алгоритм довольно странный, на мой взгляд.
    Ответ написан
    2 комментария
  • Как синхронизировать 1С: Предприятие с внешней системой?

    Из опыта(лично испытал на себе) есть варианты:
    1. В платформе есть подписки на события(ответ на пункт 2): при изменении/ добавлении/записи etc. объекта справочника/документа etc могут быть описаны дополнительные действия подробнее. Можно организовать все что угодно: выгрузку данных в любого формата файл, подключение, например, по ADO к MS SQL. С файлами минус в том, что должна быть shared-область для двух систем(1C - доступ на запись, вторая система на чтение).
    2. Регламентное задание 1C(гугл) - аналог сервисов. Пишем функцию(опять же на выгрузку данных в файл или коннект к СУБД), задаем расписание.
    3. Подключение к 1C Предприятию через COM-объект. В целевой системе при наличии соответствующих инструментов создаем COM-подключение к 1C и делаем все что нужно c использованием методов платформы 1C. Метод достаточно противоречивый, но также работает.
    Ответ написан
    4 комментария
  • SQL Server Profiler - как разобраться в том что он показывает?

    Audit Login/Logout - индикация начала/завершения сеанса взаимодействия пользователя с сервером(во время создания/завершения connection-сессии).
    SQL:BatchStarting/BatchCompleted - индикация времени начала/завершения выполнения пакета. Под пакетом понимается набор одной или более T-SQL инструкций, передаваемых СУБД для исполнения в момент времени.
    RPC: Completed(Remote Procedure Call) - индикация успешного клиентского подключения извне и выполнения процедуры/пакета.

    Для анализа запросов достаточно отслеживать SQL:BatchStarting/Completed и RPC:Completed. Пользуйтесь фильтрами(имя пользователя, приложение), отбирайте наблюдаемые вхождения T-SQL перед началом трассировки.

    В вашем случае Entity Framework отправляет SQL-Batch на сервер; обращайте внимание на CPU - загрузка процессора сервера БД, Reads - количество чтений, Writes - записей , Duration - продолжительность операции в миллисекундах(10^-3). При выгрузке результатов трассировки в БД(очень удобная опция для анализа большого количества операций) или внешний источник секунды уже будут с приставкой "микро" или же 10^-6. Под RPC:Completed у вас выполняются регламентные команды SQL-сервера по установке/разрыву соединения.

    Полезные ссылки:
    SQL Server Tech Documentation - со стр. 878 инфа по профайлеру
    Batches
    Ответ написан
    Комментировать
  • Как в Asp Net Core подключиться к MS SQL Server и увидеть данные?

    Включить пакет SqlClient в файл project.json.

    {
        "dependencies": {
           ...//здесь идут ваши зависимости
            "System.Data.SqlClient": "4.1.0-*"//это нужно добавить
           ...
        }
      }
    }


    Сохранить изменения в файле. Подождать пока References проекта переопределятся.

    Затем все как обычно:
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
               connection.Open();
               using (SqlCommand command = new SqlCommand("SELECT * FROM dbo.Table", connection))
               {
                      var reader = command.ExecuteReader();
                      while(reader.Read())
                      {
                            var a = reader["Column"];//инициализация значения переменной полем из таблицы БД
                      }
               }
    }


    Примечание:
    connectionString = "Data Source=ServerName;Initial Catalog=DatabaseName;Persist Security Info=True;User ID=UserName;Password=Password;"))
    Ответ написан
    1 комментарий
  • Рост и развитие технических сотрудников?

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

    Конкретно мое мнение: влиять на технический рост IT-специалистов нужно осторожно. Инженеры - это очень пунктуальная и ревностная(в проф. плане) категория людей. Сотрудники уже в компании, а значит имеют достаточный(по-вашему мнению) скилл. Уважающие себя программисты читают книги, ведут home-проекты, где оттачивают навыки(я, надеюсь, у Вас именно такие:)).

    Идти нужно от простого: что есть отрицательного в работе => подавляет энергию => не хочется творить => не развиваешься. Недопонимание между операционной и технической командами? Потому что первые постоянно закидывают мозговыносящими задачами, а вторые, исправляя баги, добавляют новые. Ты в "ынтерпрайзе" и ограничен в своих действиях, ибо никто не хочет внедрять "по свистку" новый фреймворк(надежность в угоду моде)? Менеджер снова завалил какими-то непонятными задачами и т.д., сделав которые, понимаешь, что их можно было по-другому сгруппировать? Можно продолжать... Часть этих проблем можно решить нормальной, здоровой коммуникацией(иногда стоит пойти на жертвы среди сотрудников - было у меня и такое).

    Я не менеджер. Расскажу о 3-х летнем опыте(со старших курсов универа), который был стартом мой карьеры. Определенно, многому научился тогда. Исходные данные, чтобы было понятнее: организация(иностранная, если это будет важно) с представительством в РФ, Отдел внедрения IT.

    Эту фразу нужно будет поместить на место трех точек в каждом пункте("..."):
    Не каждому сотруднику это нужно, но обязательно найдутся те, кому будет полезнее именно так.

    Что мне со стороны сотрудника показалось важным для роста:
    0. Толковые тимлиды/архитекторы, готовые делиться знаниями - таких нужно выискивать и направлять их на менее опытных. Я в свое время с бешеной скоростью впитывал знания от старших товарищей. Команда сильна насколько силен самый слабый(и прочие бла-бла). Во-всяком случае, меня их уровень подстегивал. Это важный фактор, как ни крути. Должны быть лидеры(кстати, не только технические).
    ...
    1. Прозрачная система ведения бизнеса. Это значит, что информация о том, что происходит в компании на поле битвы(бизнеса) доступна и понятна каждому сотруднику безотносительно его должности. Хочет программист/тестировщик знать как дела обстоят с новыми клиентами, в каких тендерах участвуем - пожалуйста. Но без фанатизма и раннего открытия информации. Какие настроения у текущих клиентов? Какие внутриорганизационные моменты происходят?...
    ...
    2. Каждый сотрудник может спокойно организовать one-to-one с менеджером. Поговорить о выполняемых задачах, подвести итоги, обсудить какие-то планы на будущее(по бизнесу, по своему привлечению к будущим проектам, по возможному росту, по текущим задачам коллег). Сотруднику становится проще понимать прикладную составляющую своего труда и выдвигать свои идеи и предложения(разумно). Менеджер знаком с настроением каждого члена команды => распределяет задачи более оптимально, ну и в целом легче ему становится "дергать" нити управления.
    ...
    3. Как можно более индивидуальный подход в "конвейерных" тренингах. К примеру, занятия English: вот походили мы с ребятами на корпоративные уроки - но это было больше похоже на курс для галочки(большинство "учащихся" на абы как, учителю как ни старайся...). А время шло, и я в N-ый раз уже слышал менеджера "на колле" с иностранцами. Тут родилась идея объединиться в группу с тему, кому действительно ХОЧЕТСЯ и найти себе преподавателя из школы. Сказано - сделано. Больше года занимались с отдельным преподом, который к нам приезжал в офис. Потом даже выбили себе немного бюджета на это c помощью менеджера(не 100% покрыли конечно). И в итоге все довольны - мы знаем английский(главное, что потом и применять стали), у компании, соотв., тоже одни плюсы.
    ...
    4. Давать сотрудникам иногда чуть более важные задачи, чем они привыкли делать. Давать вистов иным образом. Здесь конкретные примеры сложно привести. Допустим, взять программиста в командировку на локацию на этапе оценки инфраструктуры и знакомства с клиентом. Хотя он там не особо-то еще нужен. Или в конференцию его подключить по важному вопросу. Нужным людям это даст больше уверенности и мотивации, и они сами будут готовы генерировать идеи во благо, без палки даже.
    ...

    P.S. Я уже не там, да и вообще круто(от слова "резко") поменял стек технологий. Но ценю тот опыт, который смог там получить.
    Ответ написан
    Комментировать
  • Как создать вычислимое поле в модели Code First Entity Framework 6?

    Создать partial класс для сущности Document под именем Document.MyExtensionBlaBla.cs; добавить в него новое свойство TotalQuantity и определить логику его вычисления:

    public partial class Document
    {
         public decimal TotalQuantity => Rows.Sum(x => x.Quantity)
    }


    Впоследствии, к этому свойству можно обращаться из инстанса Document. Например, так:

    var totalSumByDocument = new dbCtx().Documents.Single(x => x.Id == id)).TotalQuantity;


    Где id - входной параметр искомого документа, представляющий собой его уникальный идентификатор.
    Ответ написан
    3 комментария
  • Существуют ли вообще языки, платформы, где можно наследовать класс от двух и более базовых классов, не интерфейсов?

    Cписок языков с Multiple inheritance довольно обширен. И там есть упомянутый уже C++.

    Основные проблемы связанные с множественным наследованием заключаются в совпадении имен полей и методов. Одна из таких известна как The Diamond Problem. Если просто:
    -Class A содержит метод do()
    -Class B & Class C наследуются от A и переопределяют do()
    -Class D наследуется от B & C
    Что мы получим здесь: new D().do()?

    Вот на этот счет Java & С# предлагают концепцию множественного наследования НО от интерфейсов(+вводится новое ключевое слово interface). Конфликтов уже нет, так как мы реализуем интерфейсы для каждого отдельного класса.

    А вот в С++ как такового понятия интерфейса нет(и ключевого слова тоже нет). Его приходится уже "эмулировать" абстрактным классом. Подробнее здесь

    P/s реализация поддержки концепции множественного наследования зависит только от языка, и отдана она на откуп создателям. Одни вот посчитали, что количество проблем от множественного наследования будет больше, чем это поможет решить задач. И не сделали этого в своем языке.
    Ответ написан
    Комментировать
  • Как сделать рекурсию в запросе?

    В MySql не поддерживается возможность написания рекурсивных запросов.
    Вообще тема иерахиии данных довольно щепетильна для реляционной БД.
    В ващем случае часть логики можно перенести куда-то(например, PHP... или что-то другое, что используется).

    P.S. https://habrahabr.ru/post/43955/
    Ответ написан
    Комментировать
  • Где найти "грязный" проект, для того чтобы на нем поучиться рефакторить?

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

    P.S. Полагаю, это челлендж ради челленджа находить проект под рефакторинг, чтобы улучшить этот навык.
    P.P.S. Если покопаться, можно и у себя найти парочку проектов, где можно бесконечно улучшать код.
    Ответ написан
    Комментировать
  • Как правильно работать с БД MS SQL в С#?

    Для начала я бы определисля с нагрузкой. Как часто пишутся данные, каким образом их нужно выбирать. Для большинства случаев, более оправдано использовать ORM. Еще лучше, использовать одну из популярных ORM(EF, NHibernate, etc.). Если у вас будет какой-то очень огромный проект с выдающимся количеством транзацикций по обработке данных в секунду, то здесь лучше pure SQL(или же компромисс: на сложные операции pure SQL, на шаблонные, коих в любом проекте предостаточноб ORM).

    ORM(например, в случае EF, который я использую) позволит избежать большей части "monkey job":
    -Запросы осуществляются к DbSet-ам(типизированными доменными моделями), что дает нам строгую типизацию => меньше ошибок.
    -Cами доменные модели наполняются виртуальными свойствами на связные сущности(для реализации one-to-one, one-to-manu, many-to-many отношений), что позволяет нам избавиться от кучи Join-ов в будущем.
    -Используя Linq to entity, мы можем возвращать в результате запроса нужный объект, что делает обход выборки результата проще(меньше лишних инициализаций => меньше кода => меньше возможных ошибок и багов).

    В общем, ORM экономит много времени(а, соответственно, ресурсов, нервов и т.д.). Да и никто не мешает потом использовать pure-SQL: в случае если ORM неоптимально конвертирует запрос в SQL и вы хотите его переписать. Впоследствии, все это(ORM, ADO.NET ... <любой другой источник данных>) оборачивается репозиторием - и получается у вас Dаtа Access Layer.

    Upd: исправлены опечатки.
    Ответ написан
    Комментировать
  • Почему сейчас открывается так много школ по программированию?

    Это бизнес. Кстати не только курсов по программированию много. Уже вообще сложно представить каких курсов/тренингов сейчас нет.

    Upd: eсть что почитать на эту тему. Целый раздел e.IT посвящен "разбору полетов".
    Ответ написан
    Комментировать
  • Существует ли метод определить, какие точно версии конфигураций баз 1с, установлены у пользователя (или на сервере), не открывая?

    Версию конфигурации можно узнать через объект метаданных. В голову приходит следующий костыль: считываем конфигурационный файл со списком баз на сервере. В цикле проходимся по полученным строкам подключения, создавая для каждой базы com-объект и считываем значение версии из метаданных для текущей базы.

    Пару лет назад делал подобный костыль для добавления нового пользователя в N баз с нужными правами. Поочередно подключался к каждой базе и создавал нового юзера. Все это было в виде внешней обработки, которая запускается из любой базы.
    Ответ написан
    Комментировать
  • Как сделать выборку новостей по id asp.net mvc?

    Данные из БД выбираются запросом.

    Получить Id новости GET-запросом в методе News контроллера HomeController. Далее выполнить выборку данных из БД с условием имеющегося Id.

    Инициализировать модель вашей новости полученными данными и передать результат в представление новости.

    https://www.asp.net/mvc/overview/getting-started/i...
    Ответ написан
    1 комментарий
  • ASP .Net MVC своя система авторизации без Identity?

    Цикл жизни статичных переменных определяется циклом жизни приложения - это уже один минус. При перезагрузках вашего приложения нужно будет их восстанавливать. В случае хранения идентификационных данных в Session, либо в Db - этим моментом управляете Вы, определяя цикл жизни этих данных.

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

    Статичные переменные доступны всем, т.е. являются глобальными в рамках App Domain. Думаю, это тоже о многом говорит. Придется делать костыли, боюсь представить какие, по доступу к ним; как-то параллелить клиентские запросы. В то время, как для Session есть Session concurrency

    В целом, если говорить об механизме Session, то скажу, что это понятные и широко распостраненные практики хранения идентификационных данных. Думаю, для большинства прикладных задач это вполне применимый подход. Если требуется больше безопасности, то уже смотрим в сторону Server-side для хранения состояния, например, в БД.
    Ответ написан
    Комментировать
  • Книги, сайты, программы для изучения английского?

    По поводу "полиглота": до конца его не досмотрел(в моем случае ничего нового не узнавал), но подход мне понравился. Этот преподаватель выделяет самое главное и приподносит в нужной форме. Но опять же, это все относительно, да и к тому же неисчерпывающе.

    Думаю, Вам не стоит объяснять, что с нуля невозможно что-то познать за 10, 20, 30 часов.

    Перед изложением своего мнения на вопрос опишу мой путь изучения языка. Он во многом популярен: что-то дали в школе, что-то в универе, что-то сам посмотрел невзначай. Но толку от этого было мало, не было никакой систематизации. Затем я ушел к частному преподавателю(точнее он пришел к нам - посещал офис, где мы группой из 4 коллег занимались с ним перед работой). Занимались по учебникам Oxford University, Intermediate level; грамматика закреплялась уроками речи. Плюс в то время уже приходилось кое-как применять навыки переписки в самой работе, участвовать в коллах(по-началу, больше только слушать).

    В электронной версии книги, которую я приложил есть и граматика и какие-то игрули(я правда в бумажном варианте ее курил). И сейчас, когда я уже свободно общаюсь и применяю каждый день язык, могу с уверенностью сказать, что именно в этой книге все дается именно так, как должно быть(в первую очередь касается последовательности уроков по грамматике).

    Я бы посоветовал просто пройтись по грамматике. Это база. Но сделать это продуктивно в одиночку достаточно сложно. Реальная практика решает. Это, в свою очередь, аксиома. Если вы собираетесь общаться с людьми, то нужно с ними и начинать общаться, поэтому моя рекомендация: позаниматься с учителем первое время по этой книге. Проговорить эти несчастные кейсы по основным временам. Их в итоге в использовании будет штук 5 потом. К временам добавятся некоторые дополнительные конструкции(условные предложения и еще чего-нибудь).

    p/s Самое интересное изучение языка начнется только потом - когда вы будете расширять свой словарный запас. Для этого ничего лучше, чем чтение книг, кажется не придумали. Ну и сериалы/фильмы потом смотреть: это необходимо как для произношения, так и для тренировки общих концепций построения речи(так сказать речь с расстановкой, выражением).
    Ответ написан
    Комментировать
  • Как получить параметры колонки при выборки данных через SELECT?

    Использовать view information_schema:
    SELECT DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS 
      WHERE table_name = 'tbl_name' AND COLUMN_NAME = 'col_name';
    Ответ написан
    6 комментариев