• Предложите обоснование необходимости внедрения и сопровождения Linux-дистрибутивов (Alt, Mint, etc) в предприятиях малого предпринимательства?

    @beerchaser
    Проще доказать обратное. Стоимость лицензии Windows pro ~ 14000, homе~10000. Если брать с железом (оем) будет процентов на тридцать дешевле. Линукс - вроде 4000. В цене win стоимость техсопровожения на жизненный цикл (вроде 7 лет).
    А дальше ТСО. Как уже упоминалось выше, ОС нужна не сама по себе, а для обеспечения работы программ, которые в свою очередь обеспечивают бизнес, т.е. упрощают процесс зарабатывания денег. На практике настроил и забыл не бывает - меняются требования к ПО и бизнес процессы. Специалист с линь в среднем стоит дороже специалиста с вин. Если учесть что количество вопросов по эксплуатации ПО на линь будет выше, а часть вопросов принципиально не может быть решена на сегодня, то с высокой степенью вероятности на выходе получиться гетерогенная система, управление которой доставит и потребует для управления/настройки/эксплуатации уже двух специалистов.
    Далее встаёт вопрос документированности технических решений. Маленькие системы развиваются по принципу жизненной необходимости, т.е. как выросло. И если у микрософт есть буки с картинками, как надо правильно надо делать и в среднем народ делает системы по этим учебникам, то решения на линь в связи с его большей гибкостью бывают весьма экстравагантны. Это к тому, что при внедрении/выборе технической политики/оборудования/вендора надо учитывать риск потери сопровождающего специалиста и понимать в каждый момент времени, кем его можно будет заменить.
    Поэтому надо считать не стоимость приобретения, а стоимость владения(ТСО).
    Ответ написан
  • Можно ли делать фронтенд на языке Python?

    liqrizz
    @liqrizz
    лол
    напишите свой собственный браузер с поддержкой python и думаю можно будет
    Ответ написан
  • LINQ или foreach?

    Stalker_RED
    @Stalker_RED
    в последние лет 10 идет к тому, что скоро бОльшая часть программистов просто забудет про стек, кучу, оптимизацию SQL-запросов
    бОльшая часть программистов никогда и не умела в оптимизацию SQL-запросов.

    “лучше день потерять, потом за 5 минут долететь” не работает в нашей отрасли?
    Бизнес смотрит где выгода. Если он без этой схемы тратит два дня, то да, лучше потерять и долететь. Если он без этой схемы тратил 10 минут, и летал раз в месяц, то пятиминутная экономия окупится через 288 "полетов" (через 24 года). Оно ему точно надо?

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

    Это не значит, что никому в мире не нужен хайлоад и хороший код. Просто массовому рынку это не всегда выгодно, это норма.
    Ответ написан
  • LINQ или foreach?

    @EvgeniiR
    https://github.com/EvgeniiR
    1. Такая ситуация складывается от того что бизнесу обычно нужно чтобы было готово ещё вчера, и плевать ему какие костыли при этом будут в коде, в худшем случае он не подумает даже о сложности поддержки всего этого.

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

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

    https://habr.com/company/badoo/blog/430722/ - хорошая статья от badoo, с выводами на счёт целесообразности оптимизировать код / добавлять сервера
    Ответ написан
  • Как разрабатывать GUI на Python?

    dimonchik2013
    @dimonchik2013
    ...а ну-ка пыль сдуй отсюда...
    pyqt / pyside

    второе дыхание у pyside сейчас
    Ответ написан
  • C# под линукс. В чем отличие от винды?

    serafimprozorov
    @serafimprozorov
    Люблю Erlang....
    Смешались в кучу кони, люди...

    Господа, которые отвечают, ну вы бы что ли изучили матчасть и не вводили человека в заблуждение, а то вот так и рождаются мифы.

    Во-первых, GUI можно делать не только c использованием WinForms/WPF, а с помощью любой библиотеки для которой есть байндинги. Более того, внезапно существуют вполне себе "родные" для .NET кроссплатформенные GUI-фреймворки: Gtk# и AvaloniaUI, и, если первый, честно говоря, специфичен, то со вторым зная WPF и XAML разобраться не составляет большого труда;

    Во-вторых, это, правда уже совсем Rocket Science, писать GUI можно вообще без фреймворка;

    Ну и в-третьих: говорить, что возможности C# ограничиваются возможностями ASP.NET Core в корне неверно, потому как ASP.NET Core -- это веб-фреймворк, написанный на C#, рантаймами для которого являются .NET Core и .NET Framework.

    Касательно же ограничений, они по большому счету сводятся к тому, что, если Вы пишете кроссплатформенное ПО, то вынуждены использовать только кроссплатформенные библиотеки и API, к которым, например, вышеупомянутый WPF не относится. Если же Вы планируете разрабатывать ПО только под Линукс, то ограничений по большому счету нет.
    Ответ написан
  • Как оценить "качество" тренда?

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

    Если со 100% всё понятно – когда все точки на прямой и сумма = 0; то что брать за максимум, за 0% аккуратность, хуже которой быть уже не может? : )
    Ответ написан
  • Как оценить "качество" тренда?

    pro_co_ru
    @pro_co_ru
    Старший инженер-программист
    В Ta-Lib есть функция stddev (стандартное отклонение, среднеквадратическое отклонение). Кажется, это как раз та самая метрика, которую вы описываете в своём вопросе.
    Т.е. чтобы при совпадении с прямой было 100%, нужно немного пошаманить с результатом, например, выдачу stddev нормировать на единицу, затем 1 минус ответ от stddev, и умножить на 100%, чтобы перевести в проценты.

    А ещё, можно считать коэффициент корреляции между данными значениями и проекциями этих значений на линию тренда, например.
    Ответ написан
  • Как обеспечить безопасность “Умного дома”?

    Godless
    @Godless
    Вопрос тянет на отдельную книгу, как мне кажется. Но поскольку деталей нет, общие принципы примерно следующие:

    1. Изолированная локалка, если используется. Отсутствие радио каналов (любых, вифи, 433 и тп). Если уж ну ваще никак, предусматривайте ситуацию, что канала нет, или данные по каналу приходят поддельные, в т.ч. со злым умыслом.
    2. Если прямо необходимо чтоб железки что-то тянули с интернета - к примеру, дополнительный linux шлюз, разрешающий только то что надо. Вариации с прямым доступом из тырнета в железо отметайте сразу.
    3. Шифруйте данные по сети. Не используйте слабые шифры.
    4. Не используйте простые пароли (да, 2018 год).
    5. Правильно конфигурируйте службы, аккуратно выставляйте доступ к файлам.
    6. Про железную часть не пишу. Но вопрос защиты от перенапряжения, выгорания портов, резервирования функционала и тп тоже относится к безопасности.
    7. Бэкапы и резервирование не должны быть для вас пустым звуком.
    8. [....]
    Ну, думаю направление мыслей понятно.
    Ответ написан
  • Как заменить switch case паттерном стратегия?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Switch
    public enum DamageType { Melee, Range, Magic }
    public class Monster
    {
        public double Health { get; private set; }
        public double MeleeDamage { get; private set; }
        public double RangeDamage { get; private set; }
        public double MagicDamage { get; private set; }
        public DamageType FavoriteDamageType { get; private set; }
    
        public Monster(double health, double meleeDamage, double rangeDamage, double magicDamage, DamageType favoriteDamageType)
        {
            Health = health;
            MeleeDamage = meleeDamage;
            RangeDamage = rangeDamage;
            MagicDamage = magicDamage;
            FavoriteDamageType = favoriteDamageType;
        }
    
        public void AttackTo(Monster monster, DamageType damageType)
        {
            switch (damageType) // используется switch
            {
                case MonsterType.Melee: monster.Health -= MeleeDamage; break;
                case MonsterType.Range: monster.Health -= RangeDamage; break;
                case MonsterType.Magic: monster.Health -= MagicDamage; break;
            }
        }
    
        public void AttackTo(Monster monster)
        {
            AttackTo(monster, FavoriteDamageType);
        }
    }


    То же самое, но со стратегией
    public class Monster
    {
        public double Health { get; set; }
        public double MeleeDamage { get; private set; }
        public double RangeDamage { get; private set; }
        public double MagicDamage { get; private set; }
        public IDamageStrategy FavoriteDamageStrategy { get; private set; }
    
        public Monster(double health, double meleeDamage, double rangeDamage, double magicDamage, IDamageStrategy favoriteDamageStrategy)
        {
            Health = health;
            MeleeDamage = meleeDamage;
            RangeDamage = rangeDamage;
            MagicDamage = magicDamage;
            FavoriteDamageStrategy = favoriteDamageStrategy;
        }
    
        public void AttackTo(Monster monster, IDamageStrategy damageStrategy)
        {
            damageStrategy.Attack(this, monster); // не используется switch
        }
    
        public void AttackTo(Monster monster)
        {
            AttackTo(monster, FavoriteDamageStrategy);
        }
    }
    
    
    public interface IDamageStrategy
    {
        void Attack(Monster attacker, Monster defender);
    }
    public class MeleeDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.MeleeDamage;
        }
    }
    public class RangeDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.RangeDamage;
        }
    }
    public class MagicDamageStrategy : IDamageStrategy 
    {
        public void Attack(Monster attacker, Monster defender)
        {
            defender.Health -= attacker.MagicDamage;
        }
    }

    Отличие класса Monster только в коде первого метода AttackTo. Ну и свойства FavoriteDamageType или FavoriteDamageStrategy.

    Стратегия может быть полезна, если код атаки, в зависимости от типа, сильно отличается, используя внешние данные (не из класса монстра), например, день или ночь, ясно/дождь и пр. Использование стратегии переносит часть кода из класса монстра (и так сложного класса) в несколько простых классов.
    Ответ написан
  • Нормальный сплэшскрин (лого) в Линукс, реально ли достичь?

    dummyman
    @dummyman
    диссидент-схизматик
    Plymouth - дефакто стандарт для анимации загрузки модулей и сервисов после загрузки ядра. Команда freedesktop пока не изъявляли желаний заменить его на более подходящее. Также на плечи plymouth вешается задача визуализации запроса ввода пароля для активации ключа lvm для монтирования зашифрованных разделов.
    Также, для отображения логотипов до загурзки ядра, можно кастомизировать шкурку GRUB.
    Ну а после запуска X за сплеш может отвечать шкурка одного из так называемыхDisplay Managerов. Например, LightDM, GDM, SDDM.
    Ищите работы авторов форков линуксов. Примерами работ заполнен весь github. Поиск по github к вашим услугам.
    https://github.com/pld-linux/plymouth
    https://github.com/skd1993/nsa-plymouth
    https://github.com/Jolicloud/plymouth
    https://github.com/RussianFedora/plymouth
    https://github.com/madeinnordeste/Banana-plymouth
    https://github.com/gooselinux/plymouth
    https://github.com/endlessm/plymouth
    https://github.com/aztli/Plymouth-aztli
    https://github.com/madeinnordeste/Banana-plymouth
    https://github.com/numixproject/numix-plymouth-theme
    https://github.com/jsayol/dark-mint-plymouth-theme
    https://github.com/Sabayon/genkernel-next
    https://github.com/Generator/Grub2-themes
    https://github.com/thias/glim
    https://github.com/Rohde-Schwarz-Cybersecurity/Tru...
    https://github.com/Se7endAY/grub2-theme-vimix
    Ответ написан
  • Существует ли методология предварительной оценки трудозатрат на разработку электронного устройства?

    alexpic
    @alexpic
    Если вы раньше не занимались электроникой, то вероятность успеха в оценке проекта стремится к нулю, по любой методологии.
    Реальность очень хорошо отражает вот эта картинка:
    18rnv+
    В разработке электроники достаточно большое количество исследовательской составляющей. Ее невозможно планировать, и те, кто это понимает, используют концепцию PDCA, делают прототипы, MVP, ставят целью не готовый девайс а ответ на вопрос.

    К примеру, берете вы MEMS-акселерометр LIS3DH от ST и ставите в свое устройство. Казалось бы, девайс выпускается уже чуть ли не 10 лет, изучен вдоль и поперек, даташит на 10 страниц — где там споткнуться? А на самом деле достаточно подводных камней, к примеру, служебные регистры, которые не защищены от записи. А запись в них может превратить устройство в кирпич. Вы можете сказать — ну так не надо туда писать. Да, конечно, отвечу я, но на SPI висит еще и последовательная флешь, и вот ведь сюрприз — CS акселерометра кроме разрешения обмена еще работает как служебный сигнал для выбора типа интерфейса (SPI/I2C). Возможна ситуация, при которой при поднятом CS на шину попадет I2C адрес акселерометра и в служебные регистры будет записан мусор.

    Это я вам написал чтобы, так сказать, подтвердить свое право категорично ответить на ваш вопрос. Описанная ситуация встретилась в реальном проекте. Ребята молодцы, локализовали и пофиксили быстро, но могло бы быть и по другом. И таких историй — вагон. И с фирмварой и с железом.

    Поэтому не надейтесь на Ганнта, водопадную модель и другие классические методы планирования. Могу только дать несколько советов, как сделать прогноз (не оценку):
    — дробите проект на задачи, задачи на подзадачи, подзадачи на элементарные действия. Чем больше степень декомпозиции, тем более достоверным будет прогноз. Мы, например, дробим большие задачи на подзадачи длительностью не более 8 часов.
    — прочитайте книжку SCRUM. Революционный метод управления проектами. Гибкие методологии на удивление хорошо ложатся на разработку электроники и встраиваемого ПО
    — договаривайтесь с заказчиком на поэтапную работу: результат и оплата. Сначала платку сделайте, потом запустите ее, потому еще какой-нибудь функционал добавите. Так у вас будут контрольные точки, и обратная связь от заказчика. Не получится, что через полгода работы вы сделаете не нужную клиенту штуку.
    — беритесь за небольшие проекты
    Ответ написан
  • Водосчетчики. Теплосчетчики. Энергосчетчики. В сторону какого протокола и сервера сбора данных смотреть?

    ulrich-schnauss
    @ulrich-schnauss
    Системный администратор, веб-разработчик
    Как разработчик и пользователь системы "Умная квартира" поделюсь инфой:
    1) Электросчетчик: Меркурий 202 или 230. Желательно сразу с RS-485, чтобы не покупать конвертеры. Для передачи на сервер подойдет простейший RS485->USB с алиэкспресс за 100р.
    2) Счетчики воды с импульсным выходом (стоят на 300р дороже обычных)
    3) Теплосчетчик тоже либо импульсный, либо RS-485. Хорошая модель где-то в закладках была. Теплосчетчики в принципе дорогие. 10-20к готовьте.

    Всё это подключаем к контроллеру, у меня это Atmega328, а потом передаем на сервер для обработки и хранения

    Ах да, бюджет всей умной квартиры 100-150к при условии, что всё монтировать и настраивать самому. Те, кто рассказывают тут про бюджет в 700к просто хотят срубить бабла на "чайниках".
    Ответ написан
  • Есть аналоги esp8266 без WIFI, но bluetooth/BLE (миниатюрный микроконтроллер с BLE)?

    alexpic
    @alexpic
    Да полно:

    TI: CC2541 (старый, не держит как central больше двух подключений, но проверенный)
    TI: CC2640 (новый, модный, но есть баги в стеке)
    Nordic: nRF51822 (старый, проверенный, надежный)
    Nordic: nRF52823 (новый, много памяти, NFC)
    ST: BlueNRG-1 (только на днях анонсировали, энергопотребление пока лучшее в режиме peripheral)
    Dialog: DA14583 (на Диалоге Xiaomi свои браслеты делает, API ужасное)

    Есть еще у Toshiba, CSR, Cypress (неплохие, кстати), Broadcom. По моему, только ленивый сегодня BLE не делает.
    Можете еще посмотреть на модули от Microchip или Bluegiga (сейчас Silabs). Там скриптовый язык и AT-команды для управления, будет проще взлететь.
    Ответ написан