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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Разглашать такие ограничения - это было бы стратегической ошибкой со стороны Дурова по ряду причин:
    1. Пока объёмы не создают проблем и укладываются в существующие мощности, создать иллюзию безлимитного изобилия дискового пространства - это хороший PR ход подогревающий интерес к мессенджеру.
    2. Как только лимиты будут четко очерчены, сразу появятся желающие их "пощупать". Таких желающих будет много, и они начнут ныть, когда лимиты придётся урезать из-за этого. Всякие любители нецелевого использования халявы узнав про конкретные лимиты станут плодить и заливать под завязку аккаунты для хранения своего барахла. Очевидно. что от таких паразитов Телеграму только вред, а ныть они будут на весь инет жалуясь, что либо лимиты постоянно урезают и "чего нам теперь ждать дальше", либо что этих паразитов банят за не целевое использование сервиса, а они "просто хотели другу архивы с лабами переслать". Ага.
    3. В лицензии наверняка (я правда не читал, ибо лень) написано, что телегу можно юзать как можно и нельзя как нельзя. Но банить за такое нужно только самых упоротых и по лотерее, чтобы нельзя было вычислить строгий алгоритм и делать всё, чтобы брать максимум халявы, но не попадаться на бан.

    Я понимаю, что вопрос вы задаёте с другой стороны окопа. Я понимаю вашу мотивацию.
    Однако если бы я разрабатывал похожую систему, то постарался бы:
    • максимально расплывчато описать ограничения;
    • максимально обобщенно описать правила (чтобы можно было любого злоупотреблятеля забанить, и нельзя было докопаться, мол, почему вот его не банят, а меня забанили);
    • максимально неочевидными и непостоянными сделать правила блокировок самых неудобных и геморройных пользователей.
    Ответ написан
    1 комментарий
  • Нет файла webpack.config.dev.js и webpack.config.prod.js?

    ahtrewhr
    @ahtrewhr
    undefined
    Могу предположить, это нужно для настройки css модулей, дак вот, в новой версии create react не нужно ковыряться в конфиге вебпака, для настройки css модулей, достаточно в названии css файла добавить module ( style.module.css ).
    Ответ написан
    Комментировать
  • Объясните что такое полиморфизм простыми словами ?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Полиморфизм указывает, какую версию метода текущего объекта запустить.
    Например, у вас есть несколько наследуемых классов, с разной реализацией одного и того же метода. То есть, у вас есть несколько разных методов с одинаковым именем (и сигнатурой), реализованных в разных классах. Какую версию метода вызвать? Это зависит от типа переменной, в которой находится объект.
    Также с помощью полиморфизма можно поместить объекты разных классов в один массив с типом базового класса.

    Создадим три класса с двумя методами - один виртуальный, а другой нет. Виртуальный метод переопределён (override) в классах-наследниках. Невиртуальный метод просто скрыт в наследниках новой реализацией (невиртуальные нельзя переопределять).
    class Animal {
        public void Info() { Console.WriteLine("Animal"); }
        public virtual void Say() { Console.WriteLine("Nothing to say"); }
    }
        
    class Cat : Animal {
        public void Info() { Console.WriteLine("Cat"); }
        public override void Say() { Console.WriteLine("Meow"); }
    }
        
    class Dog : Animal {
        public void Info() { Console.WriteLine("Dog"); }
        public override void Say() { Console.WriteLine("Woof"); }
    }

    При создании объекта важно, в переменную какого типа объект будет записан:
    Dog dog1 = new Dog();
    Animal dog2 = new Dog();
    // Не виртуальный метод - вызовется метод класса, указанного у переменной 
    dog1.Info(); // напишет Dog
    dog2.Info(); // напишет Animal
    // Виртуальный метод - вызовется метод класса, которого переменная реально имеет
    dog1.Say(); // напишет Woof
    dog2.Say(); // напишет Woof


    А теперь частая ситуация, когда полиморфизм нужен - при итерации массива:
    Animal[] animals = new Animal[10];
    FillAnimals(animals); // заполним массив вперемешку собаками и кошками
    
    foreach (var animal in animals) animal.Say(); // вызовется правильный метод
    // У невиртуальных методов так сделать нельзя! Полиморфизм в действии

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

    Вот весь код примера: code.re/5ZC
    Вставьте его вот сюда и проверьте.

    P.S. Написал код на C#, чтобы подчеркнуть разницу между виртуальными и невиртуальными методами. В Javascript все методы виртуальные (как и в php, например).

    UPD. (спасибо @Petroveg)
    В языке C# (и других статически типизированных) обычно делают так - если метод в базовом классе записывается для всех потомков и оттуда будут использоваться напрямую, то он помечается обычным, невиртуальным. А если метод предназначен для того, чтобы в наследниках его переопределить, то необходимо его сделать виртуальным, чтобы при вызове метода компилятор выбрал нужную версию метода. То есть некоторые методы лучше делать виртуальными, а некоторые нет.
    И ещё раз - виртуальность важна только в одном случае - если объект-наследник записан в переменную базового класса:
    Animal animal = new Dog();
    В javascript невиртуальных методов не бывает - динамическая основа этого языка ВСЕГДА автоматически вызывает именно последнюю версию метода, определяя конкретную по цепочке прототипов. Поэтому в Javascipt, по большому счёту, сильно думать о полиморфизме смысла нет - это только абстрактная концепция, не влияющая на сам код, а только на архитектуру.
    Ответ написан
    6 комментариев