• С т.з. сложности алгоритма генератор списка аналогичен циклу? O(n)?

    @carbon88
    .NET developer/ORM developer
    Давай ты будешь думать логически сам?

    Сколько проходов по массиву данных (циклов) ты видишь в первом и во втором варианте?
    Ответ написан
    1 комментарий
  • Правильно ли я мыслю в попытке согласовать частоту ОЗУ с материнской платой и процессором?

    @carbon88
    .NET developer/ORM developer
    Следовательно, обладающая максимальной частотой и совместимая с моим процессором память - это DDR4-2133, верно?

    Согласно документации Intel (см тута) максимальная частота памяти официально поддерживаемая это 2133. Эта память гарантированно заведется. Все что выше но в пределах характеристик мат.платы скорее всего заведется, но технически это считается разгоном так что маленький процент того что не заведется имеется.

    Чтобы проверить на сайте производителя, своей модели банально не могу найти. Понимая, что сама эта величина может быть в некотором роде условной, хотел бы поинтересоваться, каким образом, зная конфигурацию компьютера, выяснить оптимальный верх объёма ОЗУ?

    Тут бывают разные случаи, официально процессор поддерживает до 32Гб оперативной памяти, но некоторые производители ноутбуков например могут ограничивать меньшим объемом (у меня такая ситуация). Тут надо именно ноутбучные спецификации смотреть.

    Субьективные оценки необходимой памяти примерно такие: 8Гб - уже в притык, лично я бы для комфорта ставил минимум 16.

    А вообще модель ноутбука бы перевела разговор из абстрактного в конкретный.
    Ответ написан
    4 комментария
  • Async-await и Task.wait() В чем разница?

    @carbon88
    .NET developer/ORM developer
    Task.Wait() будет блокировать вызывающий поток, а await не будет этого делать.
    Так называемый continuation (то что ниже await) будет выполнен после завершения таска, что ожидается через await. При этом вызывающий поток блокироваться не будет и сможет выполнить еще какую-то работу, например, среагировать на нажатие кнопки если это основной поток GUI приложения или если это асп.нет приложение он сможет начать обрабатывать следующий запрос.
    Как только таск выполнится начнется исполнение continuation и в некоторых случаях не гарантируется что это будет тот же поток в котором выполнялся код до await.
    Ответ написан
    Комментировать
  • Как остановить выполнение асинхронной операции?

    @carbon88
    .NET developer/ORM developer
    берете, создаете CancellationTokenSource, далее из него берете токен. его можно передать в таск. но сам токен не остановит выполнение таска. он так сказать пробрасывает информацию о том что была запрошена отмена операции внутрь таска. далее вы в своем коде можете проверить отменили ли задачу и прекратить ее исполнение. на кнопку отмены загрузки нужно повесить вызов CancellationTokenSource.Cancel() но именно того сорца что вы создали раньше для токена переданного в загрузку файла.
    Ответ написан
  • Видеокарта GeForce GT 440 - GTX 650 2048MB совместимость с материнской платой asus m2n68 am+?

    @carbon88
    .NET developer/ORM developer
    Я может быть ересь скажу, но вот не пойму зачем менять старье на старье. Я понимаю цены сейчас такие, что хоть стой хоть падай, но все же. Зачем тратить кровные на что-то что уже морально устарело? Я не в курсе продается ли еще 6-е поколение или нет.

    Если речь идет все же о б/у рынке, то может стоит на том же б/у рынке обновить и мать и процессор, чтобы туда можно было бы какую-нибудь 950-ю поставить? Я понимаю что с деньгами может быть туго у многих, но тогда вдвойне нужно думать наперед и не тратиться на то что через год захочется сменить, а может быть и раньше.

    Предполагаю, что сейчас на б/у рынок высыпется куча карточек от тех кто будет менять видюху на GTX 1080/1070. Там будут и 7-ой линейки карточки и 9-ой тоже наверняка будут. Нужно только чуточку подождать.
    Ответ написан
    Комментировать
  • Как часто Вы разбиваете описание одного класса на несколько файлов через partial?

    @carbon88
    .NET developer/ORM developer
    Разбиваем. Ничего плохого не вижу, все зависит от класса, как и везде главное не переборщить.

    У нас есть классы, которые берут на себя много работы и, соответственно, в них много кода. его нужно как-то группировать по функциям. тут либо делать region-ы либо распихать по файлам и обозначить класс как partial

    приведу простой пример когда я бы разделил. есть класс, у него есть какие-то методы отвечающие за работу, свойства, поля и сравнительно большое количество event-ов. вероятность того что эти самые эвенты будут часто просматривать не очень велика, в основном смотрят методы потому что в них основная работа. соответственно чтобы эти эвенты глаза не мозолили их можно:
    1) запихать в region и свернуть. но! это дело у кого-то будет свернуто у кого-то нет, при поиске по файлу регион, опять таки, может быть развернут и его опять нужно свернуть. неудобненько.
    2) договориться убирать эти эвенты в самый конец файла. но! они же когда-нибудь могут понадобится и листать в конец не очень приятно.
    3) сделать класс partial и переместить часть с эвентами в отдельный файл. в какой нибудь SuperAwesomeClass.Events.cs. что мы этим добьемся? расчистим основной файл от редко просматриваемых членов класса, группируем некий код по смыслу, получаем быстрый доступ к эвентам если нам понадобится в них заглянуть и они точно будут все и в одном месте.

    но это лишь мое имхо.
    Ответ написан
    Комментировать
  • C#. Почему нельзя обратиться к классу другого проекта, если в том проекте нет метода Main ()?

    @carbon88
    .NET developer/ORM developer
    Смотрите, я вижу две ситуации
    1) Проект А это приложение то есть имеет расширение EXE. Проект Б это подключаемая библиотека то есть dll.
    2) Проект А и проект Б это оба приложения то есть имеют расширение EXE. (предполагаю у вас именно так).

    Чтобы ОС могла запустить приложение она должна найти в нем метод MAIN с определенной сигнатурой. Это так сказать общая точка входа, и поэтому во втором случае оба проекта должны иметь этот метод.

    Давайте я вам немножко доп. инфы про .net отсыплю. Дело в том что в .NET и .exe и .dll файлы это сборки и они имеют практически идентичную структуру, различие только в том что в валидной .exe сборке обязательно есть этот самый метод MAIN.
    я может сейчас взорву вам мозг, но проект приложения может использовать ссылки и на .dll и на .exe .net-сборки и я очень даже уверен что смогу зареференсить .exe сборку в проект .dll сборки. такие вот дела

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

    вы легко можете сменить тип одного из проектов на библиотеку классов и будет вам счастье.
    Ответ написан
    1 комментарий
  • Как посчитать до какого значения заполнен массив по каждому из измерений?

    @carbon88
    .NET developer/ORM developer
    Пробежаться по массиву и проверить что там заполнено. Тут есть два варианта, бежать сначала и искать первый незаполненный или бежать с конца и искать первый заполненный. выбирайте стратегию сами.
    Тут еще вопрос каким образом идет запись - рандомно, в любую клетку так сказать, или последовательно.
    Если рандомно, то скорее всего нужно брать вариант просмотра с конца. Если последовательно, то тут вообще можно без обхода обойтись, запоминая максимальный индекс(ы) по которому(ым) произвелась запись.
    Ответ написан
    Комментировать
  • Как публиковать ASP.NET с EF CodeFirst?

    @carbon88
    .NET developer/ORM developer
    А в чем собственно проблема?
    случай 1: сервер базы данных принадлежит хостингу. соответственно он и закрыл доступ на создание баз данных от греха подальше, что собственно понятно и резонно иначе каждый Вася будет там базы создавать и удалять. В этом случае наверняка база данных уже существует и не стоит ее дропать, наверняка EF умеет работать с существующей базой а не создавать ее заново.
    случай 2: сервер баз данных это ваш физический или виртуальный сервер за который вы полностью в ответе. ну так создайте пользователя который сможет создавать базы данных и создавайте через него.
    случай 3 : все то же что и во втором случае только вы не являетесь Администратором сервера баз данных. ну так подергайте администратора чтобы дал права или хотя бы превратил ситуацию в случай 1 - то есть гарантировал вам базу данных а вы уже создаете таблицы и прочую нужную хрень.
    Ответ написан
    3 комментария
  • Как лучше организовать базу данных?

    @carbon88
    .NET developer/ORM developer
    Быстрым взглядом окинул вашу схему.
    1) есть одно правило при построении ER-моделей, звучит оно как-то так "мертвые вороны летят на восток". смысл его в том что таблицы располагаются на диаграмме так что справочники и редко изменяемые таблицы скапливаются в правом нижнем углу, а, соответственно, наиболее изменяемые таблицы в левом верхнем. Если следовать этому правилу читаемость диаграммы базы данных улучшается в разы. Пример:468066d665e44b43a69db7971676bcbc.PNG

    2)User. по правилам модель доводят до 3,5НФ (или Нормальная форма Бойса-Кодда).(Список нормальных форм). Так вот таблица User не нормализована должным образом.

    Обычно контакты выносят в отдельную таблицу (по крайней мере я бы так сделал). По адресам тоже возможны дубли записей.
    Если у вас указание одной из станций метро обязательно для пользователя, то ссылка на город не нужна если есть ссылка на метро. очевидно что каждое метро относиться к одному городу. Если метро не обязательно указывать то тогда ссылку на город оставляем.

    3) Product. Обычно продукт это некоторая номенклатура, то есть описание свойств товара, его названия и прочего. Цена в него не входит. Что вы будете делать если придут продукты из разных партий и закупочная цена у них будет разная? Ваша модель этого не отражает. обычно есть некий прайс-лист в котором есть соответствие продукта и цены. прайс-листы в реальной жизни могут меняться и имеют дату на которую этот прайс-лист действителен. Тогда обозначенной мной ситуации не будет. Прайс лист оформляется как минимум двумя таблицами - собственно прайс-листом с общими параметрами как дата создания, составитель ect. и табличной частью, где записаны позиции всех прайс-листов (с ссылкой конечно же) с указанием продукта и его стоимости по конкретному прайс-листу. Валюту можно указать как в конкретных позициях прайс-листа так и глобально на прайс-лист.

    "Для всех страниц страниц, таблица url является родителем, хотелось бы что бы удаляя например товар удалялся урл, сейчас на оборот."
    Не совсем понял. у кого у всех? думаю у mysql есть настройки внешних ключей OnUpdate, OnDelete. можно через них организовать корректное удаление.

    "Таблица пользователей одна для юр и физ лиц, не получается грамотно разделить."
    Нормально можно разделить. позже сегодня напишу каким образом. рабочий день закончен и нужно уходить от компа.
    Ответ написан
    3 комментария
  • Необработанное исключение типа "System.OutOfMemoryException" в mscorlib.dll. Что делать?

    @carbon88
    .NET developer/ORM developer
    1)Вы уверены что у вас элементов будет меньше чем int.MaxValue?
    2)Выкиньте в топку этот List, можно оставить только если вам заранее известно количество элементов и вы можете инициализировать maxCapacity сразу. если нет то выкидывайте однозначно. Дело в том, что после 4-ой вставки (если мне не изменяет память) при каждой следующей вставке элемента Capacity увеличивается вдвое, соответственно массив элементов который там внутрях тоже увеличивается вдвое и элементы перегоняются в новый. представляете с какой скоростью растет массив? то есть на i = 33554433 + 1 list.Add() будет пытаться выделить кусок под 67108866 элементов, а это нужен непрерывный кусок памяти который к тому времени наверняка не находится и все падает с OutOfMemoryException. кстати же еще нужно хранит массив с которого будем копировать в тот который копируем. это огромная трата памяти. жесть просто.

    Не знаю что у вас за код, который использует результат метода Time, но если там всего лишь перебор то этот ваш алгоритм это просто жесть, и наверняка можно вообще не использовать внутренний список, а выдавать посчитанное значение по мере необходимости через yield return и вычислять на лету.
    Ответ написан
    1 комментарий
  • Как правильно обратиться к элементу массиву??

    @carbon88
    .NET developer/ORM developer
    У вас Items это List. Эта коллекция позволяет обращаться к элементам по индексу, то есть Items[0].asr. В чем проблема?
    Ответ написан
  • Не выходит получить тип через Reflection. Возвращается пусттая ссылка. Как пофиксить?

    @carbon88
    .NET developer/ORM developer
    Попробуйте все же использовать AssemblyQualifiedName, а не просто полное имя типа и имя сборки.

    Как добиться того, чтобы t содержал ссылку на StorageManager?

    На объект StorageManager или ссылку на объект Type соответствующий типу StorageManager?
    Ответ написан
  • Как обратиться к уже открытой форме?

    @carbon88
    .NET developer/ORM developer
    Все просто. Любое событие принимает объект, который вызвал срабатывание события и некоторые аргументы. Вам нужно что-то типа вот такого
    private void Keyboard_FormClosing(object sender, FormClosingEventArgs e)
    {
      var closingForm = sender as Form1;// пытаемся преобразовать к Form1
      if (closingForm!=null)//если sender это объект класса Form1 или его наследника
          closingForm.webKitBrowser.StringByEvaluatingJavaScriptFromString("");
      // sender не объект класса Form1 или его наследника
    }


    Ну вот как-то так
    Ответ написан
    Комментировать
  • Можно ли выкладывать в портфолио свои работы сделаные в студии?

    @carbon88
    .NET developer/ORM developer
    По законодательству, насколько я знаю, все исключительные права на то, что вы делаете (создаете, пишите код и прочее) в рамках исполняемой должности принадлежат организации на которую вы работаете, если в договоре не оговорено иное. За вами может быть авторство, но авторство это несколько иное нежели исключительные права. Вам нужно было договориться с начальством, о том можете ли вы внести в свое портфолио проекты, которые вы делали в рамках исполняемой должности. Но студия имеет полное право не давать согласие, если она является держателем исключительных прав. Конечно, если в договоре прописано иное и есть пункт о таких случаях, то следует действовать в рамках договора.
    Ответ написан
    Комментировать
  • Как вы используете git при разработке в одиночку?

    @carbon88
    .NET developer/ORM developer
    Конечно сложно себя дисциплинировать. Но когда вырабатывается привычка, то стараешься писать осмысленные комментарии к комитам. Особенно когда нужно что-то найти в десятке тысяч комитов, тытаешься делать так чтобы было понятно по описанию комита. Иначе придется постоянно копаться в самих изменениях комитов, чтобы найти то, что нужно. По сути, в пределах отдельной ветки которая названа более-менее нормально (а мы стараемся делать именно так, ветка на каждый task или issue и по завершению закрывать и сливать с основной) можно и писать менее осмысленные комментарии.

    Нужно себя пересиливать, выдавать себе люлей раз начальника нет хотябы полгодика, типа "какого х.. тут ты понаписал этот бред!? ни..я ведь не понятно что да как в этом комите!". Потом втянитесь и скилл наработаете. Мне было лениво писать хорошие комменты комитов, когда английский был не очень (все только на нем, даже в коде описания и комментарии только на нем), сложно было попросту. А сейчас подтянул, словарный запас поднатаскал, скилл наработал и проще сформировать мысли при комите.

    В общем будьте самокритичнее и требовательнее к себе. Или вы, извиняюсь, настолько тряпка что не можете дать себе "бодрящего пенделя" когда это надо?
    Ответ написан
    2 комментария
  • Как добавить товар в корзину?

    @carbon88
    .NET developer/ORM developer
    Согласен со Станиславом, база данных спроектированна из рук вон плохо, учитесь делать так как нужно и слушайте что вам опытные товарищи говорят - больше нервных клеток сбережете.

    Упрямство это хорошо, но когда более опытный человек говорит вам это не правильно спроектированно, то стоит прислушиваться и не набивать кучу шишек на простых вещах.

    Есть несколько Нормальных форм для баз данных. Каждая из них убирает некую избыточность. Минимум база должна соответствовать 3-ей нормальной форме, почитайте про 1НФ, 2НФ, 3НФ и 3,5НФ (или нормальная форма Бойса-Кодда или НФБК). Иногда проводят денормализацию, но для этого нужно понимать для чего и в каких случаях это делается.

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

    Далее, нужен нам заказ, делаем таблицу Заказ с полями кто заказал, когда заказал, иные примечания и поля, но не что заказал. Табличная часть заказа должна быть в отдельной таблице, где есть ссылка на товар (одну таблицу а не как у вас сейчас), количество, иные поля, и ссылка на заказ к которому та или иная позиция относится.

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

    Свойства товаров, как сказали, можно хранить в json или в xml, но это не удобно для фильтров каких-нибудь да и добавлять/редактировать значения свойств как-то не удобно - загрузи, десериализуй, измени/добавь, сериализуй и сохрани. Если они никогда не меняются и по ним нет поиска, то я бы сохранил как сериализованный в json или xml объект. Иначе тоже через таблицы, связанные с товаром связью. тут можно накрутить много, и группы свойств для каждой категории и всякое другое.
    Ответ написан
    Комментировать
  • Почему логику по созданию обьектов выносят отдельно из паттерна Репозиторий?

    @carbon88
    .NET developer/ORM developer
    Думаю тут играет роль принцип одной обязанности. Ну и плюс паттерн фабрика.

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

    Такой подход уменьшает связность и увеличивает гибкость. Если нужно поменять код создания объектов, то правится и тестируется только класс фабрики. Все клиенты этой фабрики должны лишь знать, что гарантированно получат объект с определенным интерфейсом.
    Ответ написан
    3 комментария
  • Не работает GC в приложении, что делать?

    @carbon88
    .NET developer/ORM developer
    Там находятся кешированные данные, которые теоретически могут быть использованы заново. На просторах интернета нашлись упоминания о программе под названием RamMap. Она поможет определить ресурсы, загаживающие память. Кстати GC тут не причем, конечно если у вас код чтения не кривой и все высвобождается корректно. За кешированные в памяти данные ведь отвечает ОС, а не GC.
    Ответ написан
  • Возможно ли редактировать материалы, после того как их расшарили в соц.сети?

    @carbon88
    .NET developer/ORM developer
    Убрать наврятли получится, потому что пользователь расшаривая картинку сам добавляет запись в свою ленту. То есть он ее и должен удалять. Согласитесь, было бы не правильно, если какое-то третье лицо (или сайт) удаляло бы некий пост из вашей страницы в соц. сети.

    А вот с заменой дело обстоит так:
    если соц. сеть копирует картинку к себе на сервер и в ленте указывает на свою копию, то сделать вы ничего не сможете;
    если соц. сеть использует ссылку на оригинал, то можно подменить оригинал и все ссылки будут приводить на новое изображение.

    Я к сожалению не знаю какую ссылку хранить та или иная соц. сеть.
    Ответ написан
    Комментировать