• Кто знает C# opensource проекты с хорошей архитектурой?

    @VZVZ
    Reverse-Engineer, Software Developer, Architect
    Ну, а вы сами не можете определить, где архитектура спроектирована грамотно, а где - безграмотно?
    Зачем вообще нужна грамотно спроектированная архитектура? Прежде всего - для повторного использования кода (re-use), особенно посторонними программистами.
    Вот и попробуйте по-re-use-ать код разных проектов. Идеально подходят библиотеки - которые как бы для этого и предназначены, чтобы можно было быстро, удобно их заюзать. Но и само приложение тоже легко так проверить, достаточно попробовать внести в него какие-то изменения и вообще разобраться в нем, и сравнить, сколько сил и времени будет затрачено в разных случаях.
    В идеале тестировать нужно не на одном человеке, а на нескольких разных, предпочитающих разные языки и разные подходы.

    Или вы просто не видите, что удобно, а что неудобно? Ну тогда пару слов о том, что такое - неудобное:
    1) Избыточное.
    Когда слишком много слоев абстракции.
    Когда слишком много обязательных аргументов некой функции (не аргументов вообще, а именно обязательных).
    Когда слишком много.
    2) Длинное.
    btnCloseAllApplicationsAndRebootMyComputer.
    Без комментариев.
    3) Короткое.
    btn.
    Без комментариев.
    4) Нестандартное.
    dAtETIMEPICKEr_______1.
    textbox2.
    BUTTON3.
    Или когда в классе C# имя какого-либо публичного члена пишут с маленькой буквы.
    Без комментариев.
    4.1) Несоответствие парадигме ООП, хотя на данном языке возможно соответствие.
    Когда так:
    FormHeightSetter.Set(form1, 500);
    Вместо:
    form1.Height = 500;

    Список можно продолжать. Но, видимо, и эти 4 пункта уже невыносимо сложны, коль скоро они нарушаются этак в 99,(9)% всех приложений.
    Ответ написан
    Комментировать
  • Как сделать, чтоб экран не выключался?

    @Interface
    Посмотрите на этот модуль https://github.com/richtr/NoSleep.js?utm_source=re...
    Ответ написан
    Комментировать
  • Как выбрать узкую специализацию?

    bestgames
    @bestgames
    Разработчик игр
    Программирование - это образ жизни, вот это и есть специализация. Делай что хочешь и будь что будет!
    Ответ написан
    Комментировать
  • Как выбрать узкую специализацию?

    globuzer
    @globuzer
    gezgrouvingus progreszive ombusgrander greyderzux
    Узкая специализация приобретается со временем и с практикой, притом если не распыляться и не стремиться за другими областями, забывая про ту, в которой работаешь. Но, кроме этого, еще зависит от иерархической структуры управления и вашего положения - простой вы работник (пусть даже офисный программист или фрилансер) или же руководитель, как минимум среднего звена или выше.
    По статистике, по массовости, чем выше руководитель, тем как бы размазаннее его знания, ибо приходится быть в курсе всех вопросов, но не вникая в суть, а как бы держа все в своих руках и руководя общим процессом. Конечно же, если руководитель стал и вырос из работника, который когда-то был суперспециалистом в определенной области, то он в этой области и останеться спецом, до тех пор пока не будет просто забывать и отставать от технологий. Если же вы не руководитель, а просто работник или же фрилансер - то долгое время и что важно увлеченно работая в одном направлении вы все равно - хотите или нет станете хорошим специалистом, в своей конкретной специализации, если конечно будете любить свою работу, область и стремиться к ее прокачке и развитию.
    Ответ написан
    Комментировать
  • Какие англоязычные аналоги «Хабрахабра» существуют?

    @RoboForm
    Мы сделали https://techhype.io/ - Community Driven сборник статей о разработке и маркетинге ИТ-продуктов.
    Ответ написан
    Комментировать
  • Как бороться с клоном сайта?

    @bkosun
    Так сайт скопировали, или просто ссылаются на оригинальный сайт? Скорее всего злоумышленник просто указал IP сервера, где размещен оригинальный сайт, в качестве A-записи (DNS) для своего домена.

    Поможет банальная заглушка на стороне хостинга. Добавьте любой несуществующий домен в список www доменов (например "домен-заглушка.рф"), укажите его приоритетным.

    Так же запретите открывать Ваш сайт во фрейме, используйте framekilling (framebreaking):
    <script type="text/javascript">
            if (self != top) top.location = self.location;
        </script>
    Ответ написан
    3 комментария
  • Как заменить 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 комментарий
  • Как зашифровать строку c++?

    Konstantin18ko
    @Konstantin18ko
    Стоматолог
    Любую строку их букв и цифр.
    A27B98C
    Переводим буквы в цифры, нумерация с 0.
    0 27 1 98 2 - 0271982 (это ключ)
    А теперь берём строку которую хотим зашифровать.
    C12B35A
    Так же переводим буквы в цифры.
    2 12 1 35 0 - 2121350 (это текст)

    ТЕКСТ + КЛЮЧ = ШИФР (3403278)

    Можно проще: Шифр Цезаря.(это как салат, но шифр)
    Ответ написан
    Комментировать
  • Есть ли сервис для верстки писем?

    @evserykh
    Попробуй полностью бесплатный сервис makemail.ru там есть готовые шаблоны, на основе которых можно сверстать нормальное письмо используя блочный или html редактор, можно посмотреть как выглядит письмо в различных почтовых системах, это litmus на минималках. На выходе получишь html который можно разослать через любой сервис рассылок.
    Ответ написан
    Комментировать
  • В каком формате сервер отдает данные?

    p00h
    @p00h
    Фехтовальщик-стропальщик
    Очевидно, это JSONP
    Ответ написан
    2 комментария
  • Как вы боретесь с удалением папок node_modules в Windows?

    Как вариант можно удалить эту папку через Unlocker, процесс не самый быстрый, зато всегда 100% работает.
    Ответ написан
    1 комментарий
  • Как вы боретесь с удалением папок node_modules в Windows?

    SynCap
    @SynCap
    Делаю интернет с 1998 года
    Тема в интернетах давно и широко освещаема, народ давно прикурил, что не все так просто, как кажется на первый взгляд, и нет "серебряной пули".

    `RimRaf` - хорошо, но не очень: использовать можно либо из скрипта, либо вручную на каждый проект, т.е. перед массовым бэкапом можно использовать лишь в составе некое "подготовительного" инструмента. И таки да - есть проблемы на разных конкретных конфигурациях. "Platform independence" не получился. По сути тех же результатов можно получить делая `rm -rf node_modules` в оболочке `bash` или `rmdir /S node_modules` в `cmd`, причем `rmdir` в большинстве случаев не вспомнит про длину строки, даже если для этого есть поводы.

    `npm dedupe` - тоже очень хорошо, но также не очень. Это неплохо делать в каждом проекте после `install` или после каждого изменения зависимостей. В противном случае перекур на сутки - просто гарантирован.

    1.

    Если доступна оболочка Bash на основе CygWin (если пользуетесь Git, скорее всего она - оболочка баша - есть, но не факт) решение, которое лежит на поверхности:

    find . -name "node_modules" -exec rm -rf '{}' +

    плюсик в конце - так надо: автоматом подтаскивает завершение (перевод) строки, можно заменить на \;

    Попадался и такой вариант:

    #!/bin/bash
    
    delete-all-dep-folders() {
      # `-prune` prevents building up lists of `node_modules` inside `node_modules`
      find ${1:-.} -type d -name "node_modules" -prune -exec rm -rf '{}' \; -exec echo 'Deleted {}' \;
      find ${1:-.} -type d -name "bower_components" -prune -exec rm -rf '{}' \; -exec echo 'Deleted {}' \;
    }


    После запуска скрипта (можно просто скопипастить в окошко баша) можно без параметров запустить команду `delete-all-dep-folders` в нужной папке или первым параметром задать путь:

    $ delete-all-dep-folders /path/to/project-root

    Напомню: если `bash` под cygwin, только тогда ему плевать на длину пути. Насколько это так, вы должны знать сами - где и какую версию Гита/Баша вы брали, там и надо читать: в интернетах найдется куча версий баша, скомпилированных с использованием нативных библиотек Windows, которые не используют cygwin!!!

    2.

    PowerShell. Якобы та самая "серебрянная пуля" от МелкоСофт. Вроде бы, плевать он хотел на длину пути. Якобы.

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

    Вариант:

    Get-ChildItem -Path "." -Include "node_modules" -Recurse -File:$false  | Get-ChildItem -Recurse | Remove-Item -Recurse  -Force


    Вполне рабочий, НО версия PowerShell >4.0. Более старые версии даже с ключом `-Force` не могут удалить НЕпустые папки.

    Уточню: несмотря на то, что Remove-Item (он же del, он же ...) имеет возможность обозначать фильтры и работать рекурсивно, тем не менее необходимость конвейера (знак палки между командами) все-таки есть, и на эти грабли наступало уже очень много народу еще до того, как на ms-tech и в документации была признано и отмечено, что таки да, проблема есть и в качестве решения предлагается использовать конвейер, т.е. – через палку надо делать, и не делать тупо Delete.

    И таки да, я нарвался на случай, когда это не сработало - на USB диске (NTFS) лежал старый проект на `Meteor`. Актуальности никакой, для истории тоже не находка, но он единственный усиленно сопротивлялся 4 с лишним часа. После чего мне надоело доискиваться причин такой стойкости и старый (честно купленный еще в прошлом веке) добрый Total Commander справился со всем проектом полностью за 1.897s.

    3.

    Победитель конкурса - Total Commander с настройками дисковых операций с помощью собственных (НЕ системных) функций. Не верьте документации: Windows, начиная с Vista, выполняет при дисковых операциях значительно больше "левых" действий для красоты, чем Commander, посему операции "его" функциями выполняются быстрее, чем "её" функциями. Совсем хорошо, если отключить в командере поддержку файлов описаний содержимого каталогов. Также, когда-то давно, мне попадался на глаза подключаемый модуль для командера, который заменял/дополнял поиск файлов на другой, в котором используется другая библиотека для работы с регулярными выражениями и дисковые операции можно выполнять сразу над результатами поиска без перекладывания во временную панель.

    4.

    Или мы не программисты? Пишем свой велосипед по рекурсивному обходу каталогов и `rimraf`-им чего надо. При этом не забываем положить сей золотой ключик отдельно, чтобы мимоходом не прибить его зависимости, и делаем для него консольный вызов. Успешно выкладываем в NPM и собираем звезды на Гитхабе. Дерзайте, а я настоящий программист, мне - лень, когда все просто и понятно :)
    Ответ написан
    Комментировать
  • Базовые знания алгоритмов для работы стажером-разработчиком?

    urtow
    @urtow
    *nix, python, QA, bagpipe, folk music
    Ты не узнаешь, какой материал тебе пригодится, пока не столкнешься с реальными задачами. Да и после, впрочем тоже трудно будет понять.

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

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

    А потом можно идти по собеседованиям. На каждый отказ - спрашивай, чего не хватает.
    Ответ написан
    Комментировать
  • Базовые знания алгоритмов для работы стажером-разработчиком?

    GavriKos
    @GavriKos
    Ну во первых вам нужен навык гугления - вопрос уже поднимался много раз.
    Во вторых - без навыков практического применения ваши знания об алгоритмах в разработке не стоят ничего.
    Почитайте классику - Н. Вирт - Алгоритмы и структуры данных, она небольшая.
    Ответ написан
    3 комментария
  • Базовые знания алгоритмов для работы стажером-разработчиком?

    gbg
    @gbg
    Любые ответы на любые вопросы
    В первую очередь, не ляпните на собеседовании "теория вероятностИ", засмеют. Дисциплина называется "теория вероятностей"

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

    Так нафига же собеседователи требуют "знание алгоритмов?" А очень просто. Самостоятельная реализация пары-тройки контейнеров + пары-тройки поисков и сортировок - отличная практика по кодированию. А самостоятельное решение сотни другой небольших задач - (для примера - написать функцию для получения всех перестановок заданного алфавита. Библиотечную не использовать) - как раз повод для выработки программистского чутья и стиля кодирования.

    Программирование - скорее ремесло. Без практики мало что получится. Так что Eat -> Code -> Sleep -> Repeat
    Ответ написан
    Комментировать
  • В каких задачах по веб-разработке вам требовались знания алгоритмов?

    @Eddy_Em
    Во всех. От веб-морды для работы с накопленными метеорологическими данными до 3D-интерфейса на webGLU.
    Даже если веб-морда элементарная, серверная часть отнюдь не такая! Скажем, простая "панелька" для управления парой ШД занимает несколько строк кода html и жабоскрипта, а на сервере это с полторы тысячи сишных строк!
    Ответ написан
    2 комментария
  • В каких задачах по веб-разработке вам требовались знания алгоритмов?

    @nikelsj
    Даже если не возникает задач связанных напрямую с алгоритмами, подобного рода знания необходимы для понимания каким образом функционируют встроенные в язык средства + программист должен решать любые возникающие задачи, в этом и заключается такое понятие как профессионализм. Например вам нужно будет написать элементарную рекомендательную систему либо не классическую сортировку каких либо сложных объектов... (как частные примеры)
    Ответ написан
    Комментировать
  • В каких задачах по веб-разработке вам требовались знания алгоритмов?

    @mamkaololosha
    Алгоритмы из этих книг это как шаблоны проектирования из GOF. Советы бест-практиса по решению общих задач. На деле же вам придется придумывать "свои" алгоритмы под конкретную задачу.
    В фриланс-вебе и в обычном пхп-магазинном вебе вооообще никак. Вы это сами уже написали.
    На хабре была статья по собеседование в Twitter и задачку про водопады или здания, что-то такое. Та задача называется что-то вроде "Задача разгрузки коммуникационных каналов". И является сферической задачей в вакууме, которыми занимаются вовсяких яндексах, фейсбуках, амазонах и прочее. Её решения нету в книгах. Она решается тупа мат-аппаратом вашего мозга и бреинштормом. Когда у вас 100500кк посетителей в день и простой в 2-3 часа наносит убытки в миллионы долларов.
    Ответ написан
    1 комментарий
  • В каких задачах по веб-разработке вам требовались знания алгоритмов?

    Знание алгоритмов требуется в первую очередь в бек-энд разработке. При этом писать новый алгоритм придётся не то что бы часто. Довольно часто приходится просто делать выбор, например какую структуру данных использовать.

    Если вам нужен конкретный пример. давайте возмём для примера сайт тостер. На сайте тостер зарегистрировано больше 25 тысяч пользователей, задано почти 100 тысяч вопросов, по 300 разным тегам. У каждого пользователя есть свой список тегов на которые он подписан. Предлагаю реализовать алгоритм генерирующий для пользователя страничку n в его ленте. (То есть выбирающий вопросы на которые пользователь подписан, с n * 20 по n * 20 + 20) Для этого соответственно определить как и с помощью каких структур данных будет хранится список вопросов.

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

    laska
    @laska
    PHP/JS разработчик
    Разумеется обычно никто их не пишет (есть готовые протестированные библиотеки), но знать что эти алгоритмы есть необходимо. И разобрать их тоже необходимо.

    Проведу очень отделенную аналогию. Вы обычный охранник, и ваш коллега Вася тоже охранник. Вы делаете одно и тоже, стоите и наблюдаете. Но зарплата у Васи больше. Почему такая несправедливость? Ведь вы делаете все одинаково. Но в свободное от работы время Вася ходит в спортзал и в тир. И в случае ЧП Вася будет более подготовлен. За это его и ценят.

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