• Как правильно установить Let's enycript на NGINX?

    @kotabus
    Правильно будет поставить certbot котырый настроит nginx или apache для нужных доменов и будет сам продлевать сертификат.
    Ответ написан
    Комментировать
  • Как заменить 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.

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

    radmitry
    @radmitry
    Веб-Дизайнер
    Нашел неплохое решение:
    Обслуживание онлайн кассы от 900р в месяц, интернет эквайринг 2,65% (от банка РФИ, есть какие-то еще решения)
    www.i-retail.com/tools/online-kassa
    Сама касса 21500 р
    shop.i-retail.com/product/103357
    За 1500р сами зарегистрируют онлайн кассу при наличии у вас цифровой подписи предпринимателя.

    • Онлайн чеки по СМС или почте отправляются только на русском ( по крайней мере пока). С приемом международных карт не должно быть проблем.
    • Есть вариант облачного размещения кассы у них в серверной за 2000р в месяц ( если вы например постоянно путешествуете)


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

    Главная проблема, что скорее всего какое решение бы ни было - выставлять счета в иностранной валюте не получится по нашим законам. Было бы здорово если бы платформы отображали сумму в валюте клиента, а списывали сумму рублями, чтобы соответствовать законодательству. Наподобие сайтов тип ebaytoday и прочих перепродавцов. Но пока что у всех эквайрингов что я опросил (Яндекс Касса, Тинькоф, Альфа, WalletOne, PayU) все счета и чеки исключительно в рублях. Для тех кто работает с иностранными клиентами конечно не очень приятно.

    UPD
    Нашел еще предложение об эквайринге, которое также работает совместно с i-retail. 3% за эквайринг, помимо карт принимают Альфа-клик, Киви, оплата наличными в салонах связи.

    Бизнес предложение которое они мне прислали
    Бизнес модель по интеграции PayU +iRetail
    Возможно выставление счетов с ссылкой на платежную страницу на англ. языке (если вы не интернет магазин, а предоставляете услугу) Но чек может быть только на русском языке. Т.к. наш филиал зарегистрирован в РФ, соответственно и чеки могут быть только на русском языке.

    Лично по мне PayU уже лучше РФИ, но по душе мне бы был эквайринг Тинькофф, т.к. Qiwi и прочая фигня вообще не нужна, поскольку работаю с иностранцами.

    ---
    Если подвести черту, то для Москвы на первый год нужно суммарно вложить (на моем примере для УСН Доход 6%):
    21500 ₽ за кассу + Годовой платеж в ОФД 3000 ₽ + Раз в 13 месяцев {округлим до 12} 7000₽ за обновление фискального накопителя [по сути флешка которая вставляется в кассовый аппарат] + обслуживание банковского счета ИП как минимум 600₽ в месяц + 900₽ в месяц за обслуживание i-retail [либо 2000₽ в случае размещения в их серверной, если вы дауншифтер)) ]страховые взносы на 28000₽ ну и налог , если больше 50,000 р в месяц заработаете = 77.500 ₽ в первый год

    и за вычетом стоимости кассы 56.000₽ во второй и последующие годы (если ничего не подорожает)

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

    И как бонус раз в 13 месяцев у вас будет новая флешка :)) (поскольку фискальный накопитель, который истек больше никому не нужен)
    UPD 9.06.17: Потестировал PayU , жутко топорный дизайн, местами даже кривые названия, поддержка по началу вроде что-то отписывала, но потом начались тормоза, в общем похоже на какую-то шаражку, перехотел с ними связываться.

    Сам i-Retail реально хорошее впечатление производит, но банки партнеры у них УГ. Жду Тинькова. Они хотя бы дизайн платежной страницы смогут сделать красивый по умолчанию, а не детский конструктор на пластырях

    --
    Помимо этого
    Тинькофф банк обещает представить свое решение к 1 июля, рассчитываю что они сделают что-то хорошее
    Ответ написан
    Комментировать
  • Заняты ли потоки при использовании async/await?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    https://msdn.microsoft.com/ru-ru/library/hh156528.aspx
    Выражение await не блокирует поток, в котором оно выполняется. Вместо этого оно указывает компилятору объявить оставшуюся часть асинхронного метода как продолжение ожидаемой задачи. Управление затем возвращается методу, вызвавшему асинхронный метод. Когда задача завершается, она вызывает свое продолжение и возобновляет выполнение асинхронного метода с того места, где она была прервана.

    Метод Task.Run ставит в очередь заданную задачу для запуска в пуле потоков.

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

    // без ожидания
    Console.WriteLine(DateTime.Now);
    
    Task.Run(() => { Thread.Sleep(5000); });
    
    // этот код будет выполнен сразу
    Console.WriteLine(DateTime.Now);
    
    // ожидание с await
    Console.WriteLine(DateTime.Now);
    
    await Task.Run(() => { Thread.Sleep(5000); });
    
    // этот код будет выполнен, только после завершения выполнения задачи
    // текущий (вызывающий) поток не будет приостановлен
    // (например, в Windows Form это будет хорошо видно)
    Console.WriteLine(DateTime.Now);

    Если сделать задачу и вызвать метод Wait, то основной поток будет приостановлен, пока не завершится задача.

    Console.WriteLine(DateTime.Now);
    
    var t = Task.Run(() => { Thread.Sleep(5000); });
    t.Wait(); // ожидание выполнения задачи
    
    // этот код будет выполнен, только после завершения выполнения задачи
    // текущий (вызывающий) поток будет блокирован
    // (например, в Windows Form это будет хорошо видно)
    Console.WriteLine(DateTime.Now);

    74ad1b048cee439faab48113a61a7ec7.gif
    Ответ написан
    6 комментариев
  • Как зашифровать (обфускатор) код в c#?

    @Nubzilo
    Изучаю C#
    Тогда появляются лишние траты, а такие разработчики этого не любят )
    yck1509.github.io/ConfuserEx - попробуй. De4dota вроде не боится.
    И этот попробуй - https://obfuscar.codeplex.com/
    Если сможешь снять в два клика - то либо native, либо как уже писали выше - saas
    Ответ написан
    Комментировать
  • Можно ли использовать скрипты в проекте C#?

    saboteur_kiev
    @saboteur_kiev Куратор тега Программирование
    software engineer
    Неудачно ник себе выбрали. Даже как-то объяснять не хочется.
    Ответ написан
    1 комментарий
  • Как найти красный квадрат на сером фоне (C#)?

    @poiuy7
    Задача решается за один проход по картинки (тоесть 200*300 операций) у вас так?
    Можно сначала делать проход с неким шагом например 3 (это даст прирост в 9 раз)
    при обнаружении первой точки далее сканировать только локальную область (не ходить дальше)

    Но я думаю что у вас большую часть времени тратится не на поиск, а на преопразование jpg в объект (массив) для дальнейшей обработки

    Еще хотел добавить, что если качество картинки будет не очень (с артефактами), то ваш алгоритм может выдавать не верные ответы.
    Более надежно работать с проекциями. Тоесть:
    1) За первый проход делаем проекцию (сумму) красного градиента на оси X и Y
    2) Затем усредняем проекции (например с окном 5, мешьше чем размер возможно квадрата)
    3) Ищем среднее среди максимумов проекций
    Это с вычислительной точки зрения больше чем у вас (но не намного), но более надежный метод.
    Ответ написан
    3 комментария
  • Какие есть IDE для C# под linux?

    azrail_dev
    @azrail_dev
    Имхо самая лучшая альтернатива - virtual box + windows 7 + visual studio
    Ответ написан
    4 комментария
  • ASP.NET MVC сможет ли тягаться?

    @sitev_ru
    sitev.ru - мой блог ...
    Думаю, что он мощнее их всех вместе взятых )
    Ответ написан
    2 комментария
  • Выбор между.Net и 1С?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    2 комментария
  • Что за страности в Stream в.NET?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    ReadByte возвращает тип int, т.к. при достижении конца будет возвращено значение минус один. А тип byte может иметь значение в диапазоне от нуля до 255. То есть, считывая байты, сообщить о достижении конца потока при помощи типа byte невозможно (байт, имеющий значение ноль может быть полезным байтом), поэтому используется тип int.

    Метод Read принимает буфер, в который будут помещены считанные данные. Буфер - это массив байт. Изначально он должен быть пустым. Размер массива - по своему смотрению. Чем больше размер буфера, тем больше данных будет помещено в память, меньше проделано операций.

    Метод Read возвращает число помещенных в буфер байт. Ноль - достигнут конец потока.

    FileInfo f = new FileInfo(@"C:\example.dat");
    using (FileStream fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
     using (BinaryReader br = new BinaryReader(fs))
     {
       int bytesRead = 0;
       byte[] buffer = new byte[256]; // размер буфера 256 единиц байт
       StringBuilder result = new StringBuilder();
       while ((bytesRead = br.Read(buffer, 0, buffer.Length)) != 0) // читаем не более 256 единиц байт в buffer
       {
         // из buffer следует извлекать не более bytesRead (в конце это число может быть меньше 255)
       }
     }
    }

    Массивы являются ссылочными типами и нет необходимости использовать out.
    Ответ написан
    3 комментария
  • Ценится ли IT-специалист, который умеет все?

    DjPhoeniX
    @DjPhoeniX
    Hardcore iOS & ESP developer & DJ
    Я где-то год назад как раз почти полностью подходил под описание. Человек-"я-всё-могу", начинал с Delphi, потом ушёл в PHP, знаю на неплохом уровне HTML/CSS, с закрытыми глазами пишу на JS и PHP, ориентируюсь без гугла в C++ (stdlib), и ещё несколько языков на уровне "с гуглом осилю" (assembler, perl, ...), имею навыки админства, и так далее.
    Но потом приходит понимание, что это, конечно, круто, но у заказчиков/работодателей обычно задача стоит получить результат быстро. А я, как ни прискорбно, всего один. В итоге проект то я сделаю и в одиночку, но потрачу на него в 3-4 раза больше времени, чем если бы дизайном, фронтендом и бэкендом занимались разные люди. Тут именно тот случай, когда "9 женщин родят ребёнка за месяц".
    В итоге нашёл работу по одному направлению (iOS-разработка). Остальное, к слову, не забросил - если возникнут задачи из разряда "посмотри, почему у нас сервер глючит" - вполне это осилю. И это дополнительный "респект" от начальства - но финансов это обычно не добавляет...
    Ответ написан
    Комментировать
  • Ценится ли IT-специалист, который умеет все?

    KorsaR-ZN
    @KorsaR-ZN
    Такие any-кейщики может кому-то и нужны, но особо они не ценятся, т.к знают, там, там и там. Профессионал он и есть профессионал в какой-то определённый области, ну может ещё две-три, но не больше. Знать абсолютно все не возможно, отсюда у Вас будут обрывочные знание во всех областях, но не знания специалиста. Отсюда и будет соответствующая зарплата (не высокая)

    Хотя если постепенно развиваться во всех областях, сначало в одной, потом в другой, тогда может да, но на это нужно очень много времени...

    P.S Люди бывают разные, так что это только моё мнение :)
    Ответ написан
    8 комментариев
  • Как настраивается роутинг в yii 2.0?

    роутинг настраивается согласно документации.
    layout и view уже конкретно в экшне - том, в который вы перенаправите с помощью роутинга.
    Ответ написан
    4 комментария
  • Почему многие принижают asp.net mvc и IIS?

    viktorvsk
    @viktorvsk
    - Железо стоит дешево. Намного дешевле, что грамотные программисты, которые будут под него писать (на том или ином языке, цена тоже разная)
    - В вебе 230 в секунду и 900 в секунду не играет никакой роли для 99% вебсайтов (цифра с потолка, смысл, думаю, понятен, насчет сайтов-визиток, бложиков, интернет-магазинчиков...)
    - В вебе часто нужно "запилить сейчас. нужно, что б работало вчера". На rails\django это сделать проще, чем на Java, мне кажется.
    - Не хочется очень сильно зависеть от кадров (разработчиков пхп куда больше, чем c#, как я понимаю, опять же играет фактор, что не всем нужны гуру, а на c# врядли кто-то будет работать за 3 копейки в час)
    - Комьюнити php, мне кажется, больше.
    - Если проект специфический (гитхаб, твиттер, фб...), то там отталкиваются, опять же, не столько от языка, сколько от команды, на которую можно положиться
    - Есть очень мало вещей, которые нельзя сделать на языке Х быстрее, чем на языке Y. А когда все-таки нельзя, то приходит не java или c#, а Erlang и Go. Хотя, гитхаб и так, вроде живет неплохо на рельсах.

    Итог: даже несмотря на то, что вы тестировали мягкое и теплое, то RPS - это всего лишь один из многих показателей.
    Ответ написан
    Комментировать