• Как отсортировать слова в тексте по количеству вхождений заданного символа?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Сделайте словарь Dictionary, в нём в цикле увеличивайте на единицу на каждое слово. В результате на каждое слово будет количество каждого найденного слова. Потом преобразовать словарь в список и отсортировать его (см. пример здесь).
    Ответ написан
    Комментировать
  • На каком языке пишут ААА игры?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    werw прав, но в последнее время всё чаще для AAA-игр используют UnrealEngine и Unity3d (помимо своих собственных разработок, почти наверняка на c++). Поэтому, чаще всего язык - c++ (UnrealEngine или свой фреймворк) или c# (Unity3d).

    UPD. Серверную часть игры часто делают на Java, но не-серверную часть про написание на Java я не слышал.
    Остальные языки (типа Erlang, например) могут использоваться, но гораздо-гораздо реже.
    Ответ написан
    4 комментария
  • "switch case" - плохо?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Конечно, если свич улучшит код, то нужно его использовать. Пример со стопкой if-ов - тот самый случай. Но свич не всегда может быть применим.
    Но иногда бывает так, что, хоть и можно сделать свичем, но лучше сделать условием, например, условие if (a>10 && a<=20) лучше, чем взять десять кейсов.

    P.S. Я как-то делал одну программу - эмулятор процессора, с выполнением пользовательского кода на ассемблере. Тот процессор имеет около сотни инструкций, и я сделал 100+ кейсов, для каждой инструкции в кейсе вызывался метод. В принципе, было достаточно удобно, я разделил кейсы на группы, и разделял их комментариями (чтобы удобнее искать по коду). Но сейчас я сделал бы по-другому - я сделал бы иерархию классов, и вызывал бы обработчик с помощью чего-то подобного: Processor.Execute(instruction), и не нужно было бы делать сотню кейсов.
    (Это было в 2004-м году, писал на Delphi.)
    Ответ написан
    Комментировать
  • C#. Где может быть полезна явная реализация интерфейса?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Я иногда делаю в классе и обычный метод, и явно реализуемый, с тем же именем, для удобства.
    Например, иногда нужен компарер как объект с методом, а иногда объект не нужен, и тогда можно вызывать статический метод.
    public class NaturalComparer : IComparer<string>
    {
    	[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
    	private static extern int StrCmpLogicalW(string psz1, string psz2);
    
    	public static int Compare(string x, string y)
    	{
    		return StrCmpLogicalW(x, y);
    	}
    
    	int IComparer<string>.Compare(string x, string y)
    	{
    		return StrCmpLogicalW(x, y);
    	}
    }
    
    public class TestApp
    {
    	public static void Main()
    	{
    		// Используем явную реализацию
    		var arr = new [] { "a5", "a1", "a10", "a3", "a7" };
    		Array.Sort(arr); // a1, a10, a3, a5, a7
    		Array.Sort(arr, new NaturalComparer()); // a1, a3, a5, a7, a10
    
    		// Используем статический метод
    		var list = new List<string> { "a5", "a1", "a10", "a3", "a7" };
    		const string max = "a4";
    		var minElements1 = list.Where(s => s.CompareTo(max) < 0).ToList(); // a1, a10, a3
    		var minElements2 = list.Where(s => NaturalComparer.Compare(s, max) < 0).ToList(); // a1, a3
    	}
    }
    Ответ написан
    Комментировать
  • Как изменить определенный vendor в symfony?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Форкнуть вендор, в своём форке сделать, что хочется, и дальше использовать ваш форк (указав ваш форк в composer.json в раздел repositories).
    Ответ написан
  • Книги по Windows Forms на C#. Какие?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Вы правильно увидели. Новых книг по WinForms нет, потому что есть WPF. Изучайте его. Он быстрее, лучше, мощнее. WinForms не развивается дальше, в отличии от WPF.
    Единственно, если вы думаете делать программы не на Windows, а на Линукс, то да - WinForms. Но если под винду, то WPF.
    Ответ написан
    9 комментариев
  • С#. Почему локальным переменным, определенным в методе, необходимо задавать начальное значение, а полям класса можно не задавать?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Потому что поле класса автоматически инициализируется дефолтным значением перед выполнением конструктора.
    class Test
    {
        public int a = 10;
        public int b; // автоматически будет 0
        public int с; // тут сначала будет 0, потом в конструкторе станет 20
        public Test()
        {
            c = 20;
        }
    }
    Ответ написан
    Комментировать
  • Windows Presentation Foundation мертв?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Ваши данные устарели. Ещё два года назад были об этом разговоры, но сейчас WPF жив и здравствует. Несколько лет назад Microsoft развивала ASP.NET и UWP, ресурсов на развитие WPF не хватало (в принципе, и так был достаточно развит). Но вот в 2014 году появилось обновление WPF (на хабре 1 и 2). И в дальнейшем тоже будет развиваться. Microsoft всё ещё делают ставку именно на WPF, никаких других технологий на смену нет (если не считать UWP, но они далеко не полностью пересекаются).

    Проблемы в WPF есть, конечно же, есть куда расти. Но это был гигантский шаг вперёд после WinForms. А то, что некоторых вещей нет "в коробке", но есть в NuGet - так берите и пользуйтесь! WPF дал удобную платформу, на которой легко добавить то, чего нет.
    Ответ написан
    3 комментария
  • Почему не передаются параметры из parameters.yml?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    В parameters.yml нужно писать реальные значения, а не подстановки.
    parameters:
        database_driver:   pdo_mysql
        database_host:     127.0.0.1
        database_port:     ~
        database_name:     symfony
        database_user:     root
        database_password: ~
    Ответ написан
    3 комментария
  • Почему не правильно работает расширение twig?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    $twig->addFunction(new Twig_SimpleTest(...));
    В ошибке написано - нужно создать объект, реализующий интерфейс Twig_FunctionInterface или объект Twig_SimpleFunction. А вы передали объект класса Twig_SimpleTest().
    Может, у вас синтаксическая ошибка? Twig_SimpleTest -> Twig_SimpleFunction
    Ответ написан
    2 комментария
  • Как с помощью rabbitmq ускорить отправку писем (php)?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    сам по себе никак. rabbitmq, zeromq, gearman и подобные не выполняют задачи, вы должны сами делать обработчик, который будет обрабатывать. А подобные очереди делают очень простую вещь - дают программе быстро передать задачу в очередь так, чтобы обработчик (обработчики) мог заниматься делом.
    Ответ написан
    3 комментария
  • Прием платежей на android не через гугл-маркет?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Читайте Правила программы для разработчиков приложений Goo..., раздел Платные и бесплатные приложения:
    Для продажи цифровых продуктов через игру, представленную в Google Play, необходимо использовать систему продажи контента Google Play.
    При продаже цифровых продуктов через другие виды приложений, представленные в Google Play, необходимо также использовать систему продажи контента Google Play. Исключения составляют следующие случаи:
    • продажа нецифровых товаров;
    • продажа цифрового контента, который может использоваться вне приложения (например, треков, которые можно воспроизводить в других проигрывателях).

    И ещё посмотрите статью Как продавать цифровой контент в приложениях из Go....

    Помните, вы предлагаете продавать не товары или услуги, а подписку. Внимательно читайте документы.
    Ответ написан
  • Где ошибка в коде?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Если у вас есть ошибка, и хотите помощи с ошибкой, то указывайте, какая ошибка показывается.

    [TelepatMode On]
    Думаю, код урока старый, а версия Юнити новая. В новой версии Юнити отсутствуют свойства transform, rigidbody2d и некоторые другие, их убрали для оптимизации. Создайте их сами и установите их, например, так:
    public class PlayerScript : MonoBehaviour
    {
        private Rigidbody2d _rigidbody2d;
    
        private void Start()
        {
            _rigidbody2d = GetComponent<Rigidbody2d>();
        }
    
        // остальной код
    }

    и дальше везде писать _rigidbody2d вместо rigidbody2d.
    Ответ написан
    Комментировать
  • Какова практическая ценность магистратуры в IT?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Немного оппонирую коллег из соседних ответов. Ответы правильные и хорошие, но добавлю свои мысли. Для программиста нужны, по большей части, две вещи - опыт (лучше в сложных и разных проектах) и знания (как классические знания алгоритмов, так и знания редких, но интересных задачах - ИИ, компьютерное зрение, пр.).
    1) Опыт получается самим программистом, в идеале - до вуза. Но! Опыт опыту рознь. 100 сайтов-визиток в год в течение 5 лет - не тот опыт, который развивает. А вот хороший наставник даст интересные задачки, которые очень быстро разовьют и опыт, и знания, и "чуйку". Хороший наставник может быть и на работе, и в вузе. А может и наоборот - хороший наставник может и не обнаружиться ни на работе, ни в вузе.
    2) Знания получать нужно самостоятельно, конечно же. Но опять-таки - в вузе для этого есть время и место, а на работе нужно заниматься текущими вещами, зачастую - рутиной.

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

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

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Код:
    class MyClass
    {
        public void Test()
        { }
        public static void TestStatic()
        { }
    }
    
    struct MyStruct
    {
        public void Test()
        { }
        public static void TestStatic()
        { }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            MyClass.TestStatic();
            MyStruct.TestStatic();
    
            var c = new MyClass();
            c.Test();
            var s = new MyStruct();
            s.Test();
        }
    }


    IL-код:
    .method private hidebysig static void  Main(string[] args) cil managed
    {
      .entrypoint
      // Code size       43 (0x2b)
      .maxstack  1
      .locals init ([0] class ClassOrStructApp.MyClass c,
               [1] valuetype ClassOrStructApp.MyStruct s)
      IL_0000:  nop
      IL_0001:  call       void ClassOrStructApp.MyClass::TestStatic()
      IL_0006:  nop
      IL_0007:  call       void ClassOrStructApp.MyStruct::TestStatic()
      IL_000c:  nop
      IL_000d:  newobj     instance void ClassOrStructApp.MyClass::.ctor()
      IL_0012:  stloc.0
      IL_0013:  ldloc.0
      IL_0014:  callvirt   instance void ClassOrStructApp.MyClass::Test()
      IL_0019:  nop
      IL_001a:  ldloca.s   s
      IL_001c:  initobj    ClassOrStructApp.MyStruct
      IL_0022:  ldloca.s   s
      IL_0024:  call       instance void ClassOrStructApp.MyStruct::Test()
      IL_0029:  nop
      IL_002a:  ret
    } // end of method Program::Main


    Анализ: Вызовы статического метода класса или структуры идентичны. Вызовы обычных методов класса и структуры похожи, но не идентичны. Дополнительно, для создания объекта его нужно создавать в куче и собирать коллектором мусора.

    Результат: если вызывается статический метод, то разницы нет. Если метод обычный, не статический, то некоторая разница имеется, но в основном - в том, что объект нужно будет собирать ненужный объект в GC. Но в данном случае объект будет в нулевом поколении, сборка такого объекта почти бесплатна.

    Вывод: используйте статические классы для хелперов.
    Ответ написан
    2 комментария
  • Как по требованию обновлять ListBox (WPF)?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Во-первых, лучше использовать ItemsSource, а не DataContext. А во-вторых, вместо List взять ObservableCollection.
    Ответ написан
    3 комментария
  • Как переопределить Object.GetHashCode()?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    если у вас ключ является строкой, то возьмите хэш строки:
    class Test
    {
        public string Name;
    
        public override int GetHashCode()
        {
             return Name.GetHashCode();
        }
    }


    Но обычно нужно ещё и Equals переопределить.
    Ответ написан
  • Почему Datepicker в Symfony 2 сохраняет выбранную дату со сдвигом на 1 день?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Эти известная бага https://github.com/symfony/symfony/issues/12808
    Почитайте, там есть грязный workaround. Чем закончилось - уже не помню.
    Ответ написан
  • Unity: NullReferenceException: Object reference not set to an instance of an object в чём ошибка?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Я думаю, проблема как раз в том, что у вас разные компоненты у разных объектов - у зомби пытаетесь получить доступ к объекту скрипта жизней, но этот скрипт у персонажа, а не у зомби, поэтому playerHealth = GetComponent(); даст null.

    Вы неправильно пытаетесь связываться с разными объектами. В одном объекте не нужно иметь ссылку на объект другого персонажа. А как же тогда уменьшить жизни? Через событие - у вас есть OnTriggerEnter2D - вот в нём есть ссылка на тот объект, с которым только что столкнулся, вот в нём и нужно выбивать жизни:
    void OnTriggerEnter2D(Collider2D col)
    {
        if (col.gameObject.name == "Character")
        {
            var pers = col.gameObject.GetComponent<HealthCharacter>();
            if (pers != null)
            {
                pers.TakeDamage(attackDamage);
            }
        }
    }

    И не надо проверять объект по его имени (я имею в виду код if (col.gameObject.name == "Character") ), в Юнити есть прекрасная штука - теги. Создайте тег Enemy и тег Hero (или как у вас там персонаж называется), и вот по ним проверяйте - с ним столкнулся, или нет.
    Ответ написан
  • Какую фантастику порекомендуете, где главный герой программист/инженер?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Ароматов Руслан, серия книг "Объектный подход" (две книги)
    Ясинский Анджей серия книг "Ник" (восемь книг, девятая пишется)
    Чужин Игорь. серия "Странник" (шесть книг). Не программист, но админ.

    UPD. Хотя и не совсем по теме вопроса, но она должна быть в этом списке (я давал отзыв в параллельном вопросе)
    Николай Горькавый. Астровитянка - три книги. ГГ - не программист, не инженер, но эта книга - твёрдая НФ, очень научная, интеллигентная. Автор - известный учёный, доктор физ-мат наук. Книга классно описывает очень много естественных наук. Направлена на подростков (13-18 лет), но интересна и взрослым (с пониманием того, что книга подростковая).
    Ответ написан
    Комментировать