• Почему методы нельзя передавать в функции без делегатов?

    Nipheris
    @Nipheris Куратор тега C#
    Делегаты - это форма существования функтора на платформе .NET. Почитайте про функтор, и поймете (наверное), зачем нужен делегат.

    Если коротко и грубо - вызвать напрямую можно всегда только конкретный метод, который будет четко известен еще на стадии компиляции. Если же вы пишете некий обобщенный алгоритм и заранее не знаете, какие КОНКРЕТНО методы у каких КОНКРЕТНО объектов будете вызывать - вам необходимо будет воспользоваться делегатом.
    Простейший пример - LINQ-методы. Метод фильтрации Where получает своим параметром функтор, который возвращает true или false, что значит - оставить элемент в коллекции или выкинуть его. В этом методе в цикле foreach вызывается переданный делегат для каждого элемента. Where понятия не имеет, какой конкретно метод (или лямбда-выражение) вы захотите подставить в качестве фильтрующего предиката.

    Другой пример - события. События в дотнете - это делегаты с урезанным публичным интерфейсом. Так как, к примеру, кнопка не знает о том, кто захочет подписаться на событие ее нажатия, она никак не может вызвать конкретные методы у конкретных объектов. Чтобы иметь возможность сообщать о своем нажатии, кнопка выставляет событие Click наружу, давая возможность записать туда конкретные методы для вызова.

    Кстати, делегат выполняет еще и функцию связывания: для нестатических методов делегат хранит еще и объект, для которого будет вызван instance-метод (т.е. связывает пару объект-метод).

    Таким образом,
    > Почему методы нельзя передавать в функции без делегатов?
    Делегаты - это и есть передача методов в функции.
    Ответ написан
    Комментировать
  • Как ограничить максимальное значение int-поля в ms sql?

    @eoffsock
    Кодер (Rails)
    create table numbers (
        number int not null
            check(number >= 1234 and number <= 4523),
        ...
    )
    
    create table numbers (
        number int not null,
        check(number >= 1234 and number <= 4523),
        ...
    )
    
    create table numbers (
        number int not null,
        constraint number_range_check
            check(number >= 1234 and number <= 4523),
        ...
    )


    stackoverflow.com/questions/1736630/sql-constraint...
    Ответ написан
    1 комментарий
  • Как фрилансеру получить визу в США?

    @FoxInSox
    Первый вопрос был какова цель поездки, я ответил что безработный.

    Вы здоровы вообще? На вопрос "какова цель поездки" не может быть ответа "я безработный". Если вы получаете туристическую визу, то на этот вопрос предполагают услышать что-то вроде "Еду посмотреть Нью-Йорк и Ниагарский водопад."

    Что собственно я и сделал в свое время. Не спрашивали ни справок с работы, ни банковских бумажек - ничего.
    Ответ написан
    10 комментариев
  • Можно ли такое реализовать?

    gbg
    @gbg Куратор тега Программирование
    Любые ответы на любые вопросы
    Ответ написан
    Комментировать
  • С чего начать изучение написания TDD - тестов?

    @abcd0x00
    TDD на первый взгляд выглядит хорошо, но потом начинается свистопляска.

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

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

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

    Но надо соблюсти правила TDD и ты утопаешь в этих покрытиях каждой шпуньки тестами со всех сторон. В результате, у тебя множество тестов, длинная история в репозитории из их создания и ноль программы.
    А ведь нужна именно программа, а не тесты к ней.

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

    Но это ещё не всё. Однажды наступает момент, когда программу надо не отрефакторить, а кардинально изменить. (А это самое важное - вовремя убрать какой-нибудь тупик, к которому всё идёт. Если этого не делать, программа будет представлять из себя конгломерат из затычек - и пример уже есть, десятой версии.) И становится просто жалко стирать тесты, которые к новой версии вообще не подходят.
    Ответ написан
  • С чего начать изучение написания TDD - тестов?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    нужно писать TDD тесты.

    Нет, нет такой вещи как "TDD тесты". TDD это одна из методик экстремального программирования (XP). Вам уже привели ссылку на книгу Кента Бэка на эту тему (к слову крайне рекомендую)

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

    - Красный - перед тем как написать код, мы должны написать тест который ломается (обычно в консоли сломанные тесты подсвечиваются красным). Согласно этой методологии писать код вы должны строго тогда, когда у вас есть сломанные тесты. Если сломанных тестов нет, то и код писать не нужно.
    - Зеленый - когда вы получили красные тесты, вы должны максимально быстро дописать код так. что бы тесты были зелеными. Скажем если вы написали тест который ожидает от функции, что она вернет строку "foo" то в коде у вас должно быть не больше чем сама функция и вывод строки "foo". Как только мы этого добились мы либо рефакторим, либо добавляем еще красных тестов что бы потом дописать код. Конечно настолько примитивные вещи делать по такому циклу избыточно, и у Кента Бэка описывается понятие "длины шага", то есть сколько работы мы можем делать на каждом этапе. Вы всегда должны подключать здравый смысл словом.
    - Рефакторинг - на предыдущих фазах мы не загонялись о том насколько наш код красив, насколько мы соблюдали принципы DRY и т.д. так что это фаза отчистки кода. Мы можем делать ее на каждой итерации, а можем раз в пару часов, но важно делать это как можно чаще. На этом этапе мы устраняем дублирование как в коде приложения так и в тестах. Важно отметить что хорошей мыслью будет не рефакторить одновременно и код и тесты, ибо у нас должен быть источник правды. Если мы почистили тесты и при этом они начали фэйлиться, то значит мы что-то сломали пока числити. И наоборот. А если менять и то и то между запусками тестов то не понятно кто виноват.

    Обычно TDD практикуют используя unit-тесты (что логично, ибо они выполняются достаточно быстро что бы выполнение тестов не заставляло нас заваривать чай), что подразумевает собой то, что мы тестируем один юнит (один класс или объект), а все его зависимости должны подменяться на моки (фэйковые объекты, которые нужны что бы проверить как наш объект взаимодействует с другими, об этом тоже много написано). Но никто не запрещает использовать интеграционные/функциональные тесты и при этом практиковать TDD (так например делают чуваки практикующие BDD), а Кент Бэк это дело называет ATDD.

    Собственно TDD дает нам следующие преимущества:
    - вы не тратите время на проектирование системы в микроскопических масштабах, это эволюционный подход, архитектура приложения постоянно меняется и эволюционирует вместе с требованиями. Все требования формализуются в виде тестов.
    - код всегда покрыт тестами (пусть и не на 100%, обычно хватает и 20% что бы можно было жить, все зависит от сроков жизни проекта и требуемого уровня надежности)
    - если вам становится трудно писать тесты (например много зависимостей, сложно мокать) - то это должно навести вас на мысль о не правильной архитектуре и инициировать более глубокий рефакторинг. А при наличии тестов это не так уж и страшно.
    - необходимость покрывать тесты увеличивает потребность в соблюдении всяких принципов типа SOLID и т.д. так как иначе мы начинаем писать тесты очень не эффективно и опять же возвращаемся к тому что с архитектурой что-то не так.

    updated

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

    Минусы TDD проистекают из плюсов. Это эволюционный подход, который хорошо работает когда мы вносим изменения в систему маленькими порциями и всегда рефакторим наш код, что бы он большую часть времени был красивым и удобным к расширению. Если же вам в руки дали легаси проект и сказали отрефакторить, то TDD тут не подходит или подходит плохо. Но опять же такая задача ставится довольно редко, чаще - добавление функционала. И в этом случае мы возвращаемся к внесению изменений маленькими порциями и эволюционному подходу. Просто на это уйдет довольно много времени, но если сравнивать с "рефакторинг + добавление функционала + регрессионное тестирование" то в зависимости от ситуации TDD может дать как профит так и нет. Все зависит от сложности системы. На простых системах в этом нет смысла.

    По поводу области применения... Тут есть несколько точек зрения. Как минимум TDD решает вопрос проектирования архитектуры, а не разработки алгоритмов. Этого мы достигаем тестами. Но опять же через юнит тестирование довольно не удобно разрабатывать определенные типы проектов: комиляторы, трансляторы, различные решения основанные на сложных алгоритмах (например алгоритмы сжатия, шифрования и т.д.), штуки завязанные на сетевом взаимодействии, например клиенты для протоколов. Для этих вещей больше подходят функциональные тесты или же их вовсе сложно покрыть тестами.
    Ответ написан
    5 комментариев
  • Существует ли графический элемент для расписания в ASP.NET?

    RouR
    @RouR
    Telerik ASP.NET Scheduler ? ну или гуглите аналоги
    Ответ написан
    Комментировать
  • Как не упустить relocation bonus?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    У компаний очень разные условия, надо честно поговорить с тем кто принимает тебя на работу. Этот бонус носит как мотивационный характер (что бы вы выбрали именно их компанию) так и выполняет роль сглаживающего эффекта от переезда на первое время (что улучшает позицию нового сотрудника в первые месяцы, снимает стресс и вообще делает возможность сам переездж).
    Так что ваша прописка и регистрация роли особой не играет, конечно если вам не попалась компания с жутким формализмом.
    То что вы будете в конечном итоге жить в своём жилье для компании только плюс, хотя ипотека и не самое удачное решение.
    Ответ написан
    Комментировать
  • Подойдет ли такой вариант получения опыта?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Да.
    Ответ написан
    Комментировать
  • Как в с# прочитать файлы и получить параметры?

    @vilgeforce
    Раздолбай и программист
    Это обычный INI файл, гуглите что в вашем языке есть для работы с ним.
    Ответ написан
    Комментировать
  • Какие технологии используются сейчас для работы с БД?

    Nipheris
    @Nipheris Куратор тега C#
    ORM-ку сверху накиньте, вместо прямого ADO.Net, и будет вам современные технологии. В тренде, очевидно, Entity Framework, хотя NHibernate - нестареющая классика.
    Можете заморочиться над архитектурой, вплоть до разделения на клиент и сервер - тогда будет место и для Web API.
    Или другой вариант - подтащить документую БД, хотя для бухгалтерии не факт что это хорошее решение (разве что в пару к реляционной, для хранения характеристик ваших товаров).
    Ответ написан
    Комментировать
  • Где мониторить IT-мероприятия Москвы?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Крупные ежегодные (некоторые еще не анонсированы на следующий раз):
    www.highload.ru
    ritfest.ru
    whalerider.ru
    https://devconf.ru/ru
    2015.russianinternetforum.ru
    www.spmconf.ru/ru/index
    msk16.agiledays.ru
    www.msdevcon.ru

    Списки:
    runet-id.com/events/2015/9 - не все, в основном мелкие но бывает интересные
    https://events.yandex.ru/ - проводит яндекс, но иногда бывает интересно и остальным
    rusbase.com/calendar

    PS disclaimer: именно по дизайну я затрудняюсь назвать конференции, несколько далек от этой области. Но потоки по UX бывают регулярно.
    Ответ написан
    Комментировать
  • Как выдернуть фрагмент текста из файла?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    не уверен насчет того насколько большой фрагмент между плюсами, но решение такое:
    читаем построчно, если втречаем "открывающие" плюсы начинаем писать в память каждую строку и смотреть есть ли вхождение подстроки, если есть "запоминаем" мол вхождение было (bool), идем дальше, как только встретили "закрывающие" плюсы смотрим, было ли вхождение, если было возвращаем запомненный фрагмент текста (который начали сохранять при появлении открывающих) и если вхождения не было то очищаем все что запоминали и идем искать открывающие дальше. Таким образом чтение файла идет в 1 проход, то есть ровно столько сколько нужно чтобы решить поставленную задачу. Скорость будет ограничиваться только скоростью диска, ибо весь перечисленный алгоритм крайне мало ресурсов ЦП потребляет.
    Ответ написан
    Комментировать
  • Почему папка Windows весит 62 Gb??

    Sanasol
    @Sanasol
    нельзя просто так взять и загуглить ошибку
    Удалите всю, она не нужна вообще.
    Ответ написан
    Комментировать
  • Какова архитектура "стандартный" парсер?

    gephaest
    @gephaest
    PHP, Yii2, Laravel
    Существуют различные библиотеки и готовые решения, на базе которых можно реализовывать парсеры, например Grab
    Ответ написан
    2 комментария
  • Какова архитектура "стандартный" парсер?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Параллельные потоки загрузки и обработки данных
    2. Управление уровнем ошибок для продолжения или прерывания обработки ресурса.
    3. Обработка и сегментация данных из ошибочных и неверных структурированных данных (например, HTML/XML).
    4. "Решето" (правила) для предотвращения дальнейшей обработки ресурса на основе уже полученных данных (условия алгоритма прописываются в конфиге).
    Например, контент размером более 5 кб со словом "toster" или url содержит "toster.ru" - пропустить и перейти к обработке следующего.
    Ответ написан
    Комментировать
  • Проблема с .NET 4.5?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    попробовать скачать не русскую версию framework и накатить сверху, она должна поставиться.
    Ответ написан
    Комментировать
  • Картография и программирование?

    Не знаю, что вы имеете в виду под "перейти в область", если вы программист, то вам стоит не "переходить", а специализироваться, если вам это интересно. Я это говорю как человек, который сейчас плотно занимается ГИС-системами - опыта в этом направлении пока маловато, но также как и у вас - есть большой интерес и обоснованное ощущение полезности разрабатываемых проектов (в противоположность многим другим разработкам в IT). Поэтому просто продолжайте программировать и постигайте карты, начиная с простейших вещей. Вы много с чем столкнетесь, для меня самым сложным пока были системы координат и неевклидова геометрия с ними связанная. Собственно, в этом и вся геодезия.
    При всем этом я не берусь называть себя геодезистом, я по прежему программист, ГИС это скорее специализация. Ничего нереального в вашей задумке нет, область большая и востребованная (особенно сейчас, когда наконец проснулись отечественные информационные системы, желающие перевести побольше дореволюционных бумажных сведений в удобоваримый вид).
    Высшее образование вам понадобится (это по закону так), только если вы захотите плотно заняться именно картографическими данными - межеванием, измерениями, подготовкой документов и прочими делами. Лично мне это пока не нужно было.
    Могу вам накидать кучу аббревиатур и технологий, с которыми успел столкнуться за 3+ лет (я дотнетчик, поэтому и набор соответствующий):
    1) PosgtreSQL + PostGIS - некоторое врпмя сидели на MySQL, но потом перекатили проект сюда, возвращаться и не думали, все-таки это стандарт де-факто в ГИС СУБД
    2) NetTopologySuite - дотнетовский клон JTS - библиотеки, реализующей основные примитивы и алгоритмы обработки геометрии (точка, линия, полигон, поиск пересечений, касаний, расчет площади и т.д.) - пока хватает за глаза;
    3) NHibernate в комбинации с NHibernate.Spatial - ORM №1 для нас. Начинали разработку, когда EF еще пешком под стол ходил, но и сейчас я бы выбрал ее, очень мощная либа, особенно с плагином Spatial для поддержки маппинга Geometry-полей
    4) SharpMap - движок карт. Качество среднее, но с учетом того, что он некоммерческий (LGPL), то вполне сойдет.
    5) QGIS - гис-система, важный инструмент, помимо Visual Studio.
    Это наш стек. Ну а вообще можете еще погуглить: WFS/WMS, GeoJSON/TopoJSON, GeoServer (пока не пользуемся, подключим, если понадобится WFS-сервер).
    Ответ написан
    Комментировать
  • C# Ограничение прав потока?

    Neuroware
    @Neuroware
    Программист в свободное от работы время
    возможности есть, гуглить по permissions и domain, ограничения накладываются на уровень домена в котором вызывается код. Насколько хорошо они работают не знаю, не проверял, но факт они есть.
    Ответ написан
    Комментировать