• Как менять изображения каждую неделю?

    politon
    @politon
    HTML5,CSS3,JS,PHP,SQL,API,canvas,animation...
    Думаю направление понятное.


    const pictures = ['src1', 'src2', 'src3','src4'];
    let date = new Date(2020, 1, 22);//начальная дата суббота
    let date2 = new Date();//сегодняшняя дата
    let dayR = Math.ceil(Math.abs(date2.getTime() - date.getTime()) / (1000 * 3600 * 24));
    alert(pictures[Math.ceil(dayR/7-1)]);
    Ответ написан
    2 комментария
  • Как перенять объектно-ориентированное мышление?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Т.е. сложно понимаю, что "засунуть" в один объект, что в другой, что должно быть статическим методом, что приватным и тд.


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

    То есть по сути наше приложение - один объект. У него внутри вообще все. У этого объекта есть один метод - обработай запрос. Когда внешний мир его вызывает, меняются значения каких-то переменных, вызываются какие-то внутренние "приватные" для внешнего мира функции, и делается работа.

    Теперь задумаемся о декомпозиции всего этого хаоса. Мы находим какую-то задачу, которую выполняет наш код (например какую функцию вызвать для обработки каждого конкретного запроса) и выносим это в отдельный объект. Отправка email-ов - отдельный объект. Весь SQL зашиваем в отдельный объект. Соединение с базой - объект. Пользователи - объекты. Все - объекты.

    И главное, у каждого объекта есть своя область ответственности. UNIX way. Каждый объект делает что-то одно и делает это хорошо. Бывает так что ну... нужно сделать так что бы один объект делал две вещи. НЕ вопрос, мы можем его попросить сделать что-то сложное, а он будет как хороший менеджер тупо делегировать работу другим объектом. То есть он и сложную штуку сделает, и сам не будет знать как она делается.

    А все безхозные функции, которые не пренадлежат никаким объектам (например функции порождающие объекты) можно вынести в статические методы. Главное что бы статичесих переменных у нас небыло (ибо это те же глобальные переменные). И поменьше публичного ибо черт его знает что эти разработчики будут использовать. Причем "те разработчики" это вы завтра.

    Вообщем писав всё время на процедурке, сложно перейти на ооп.


    Просто не думайте что это что-то "принципиально другое". Это та же самая процедурка, просто благодаря классам и объектам, вы можете порезать систему на маленькие модули. Данные будут лежать рядом с процедурами и у вас будет больше контроля за происходящим.

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

    Подскажите, какой проект начать писать (гостевая, блог), или может начать изучать фреймворк.


    Фреймворки универсальны, а значит чистого ООП там быть не может. Во всяком случае нет ни одного фреймворка на котором стоит учиться ООП.

    Есть хорошие упражнения на развитие понимания объектно-ориентированного проектирования. Например вот: https://habrahabr.ru/post/206802/

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

    Или может подскажите книгу/сайт где пошагово в ооп написан какой-то проект, чтобы быстрее пришло понимание.


    Так вы научитесь делать один конкретный проект а на втором вы уже проиграете. Так дела не делаются. Надо разобраться с причинами появления идеи ООП. Ну то есть что было до. Можно еще с функциональным программированием попробовать разобраться. В PHP оно слабо применимо, но основные идеи очень тесно переплетаются с ООП и познав немного функциональщины ваше ООП будет лучше. Да и если про ООП вы можете найти много булшита, про функциональщину врут мало.
    Ответ написан
    3 комментария
  • Как понять книгу Рихтера, если ты новичок?

    AxisPod
    @AxisPod
    Я бы не советовал начинать с данной книги, много тонкостей, но при этом далеко не все базовые вещи есть. Начинайте с чего-нить попроще. Албахари к примеру или Шилдта. Вот как с ними разберетесь, тогда можно и за Рихтера браться. А смысла колоться и продолжать есть кактус я не вижу.
    Ответ написан
    Комментировать
  • C# переход от junior к middle. Как правильно развиваться?

    @Hydro
    C#/.NET Developer
    Если работать в нормальной профессиональной среде с вменяемыми задачами, то через год другой всё доходит до автоматизма: не задумываясь начинаешь использовать VCS, помнишь тонкости языка (если углублялся в них конечно), автоматически используешь шоткаты своей IDE и почти сразу можно отличить плохой код от хорошего.

    Для закрепления навыков необходимо работать и работать постоянно, а обучаться только тому (в самом начале), что действительно потребуется, иначе будет каша в голове, ибо сами проходили, знаем.
    Ответ написан
    Комментировать
  • Какой выбрать двигатель для вращения 1кг веса?

    Foolleren
    @Foolleren
    Компас есть, копать не люблю...
    Меня одного покоробило от "вращать 1 кг" ? У двигателя есть крутящий момент обороты, мощность, и тд и тп в конце концов срок службы, с помощью редуктора, муфты и гидростатического подшипника можно хоть тонну вращать
    Ответ написан
    2 комментария
  • Как реализовать обработчик консольных комманд в приложении?

    lexxpavlov
    @lexxpavlov
    Программист, преподаватель
    Разделяйте строку по пробелу - так вы получите имя команды и параметры, в первом элементе массива - имя команды, в остальных - параметры. Каждый параметр нужно разделить по символу "="- и вы получите имя параметра и значение.
    Дальше, хорошо создать интерфейс (и/или абстрактный класс) хендлера команды и реализовать интерфейс для каждой команды. Так у вас получится несколько классов, по одному для каждой команды. Останется выбрать нужный хендлер, и запустить его, указав ему параметры. Если команд много, то можно подумать о дальнейшем разделении классов хендлеров на подгруппы.

    Если нужно, могу показать примерный код для моего способа. А по хорошему, используйте готовый код (правда, смотрите, умеет ли тот чужой код парсить из строки, а не из входных аргументов программы).
    Ответ написан
    Комментировать
  • Что должен знать junior С#?

    Что нужно знать, чтобы стать .Net разработчиком?
    Какие требования к разработчику уровня junior?
    Вебинар на тему "Анализ требований на позицию Juni...
    Семинар Junior Middle Web Developer. Анализ требов...
    https://www.youtube.com/user/CBSystematicsTV/searc...

    От Senior`a - Junior должен знать все, но при этом у него мало практического опыта и он часто не способен самостоятельно решать задачи, требуется постоянного его направлять. Со временем чем меньше ему требуется помощи и он становится более самостоятельным, тем ближе он к Regular/Middle.

    Знать и уметь это разные навыки.

    Станислав Макаров согласен про финансы. Вопрос не такой простой. float вообще использовать не желательно.
    float и double следуют спецификации IEEE 754 формата представления чисел с плавающей точкой.
    decimal не имеет специальных значений, и примерно в 10 раз медленнее чем double.
    Типы float и double внутренне представляют числа в двоичной форме. По этой причине точно представляются только числа, которые могут быть выражены в двоичной системе счисления. На практике это означает, что большинство литералов с дробной частью (которые являются десятичными) не будут представлены точно.
    Именно поэтому типы float и double не подходят для финансовых вычислений. В противоположность им тип decimal работает в десятичной системе счисления и, таким образом, может точно представлять числа, выразимые в десятичной системе (а также в системах счисления с основаниями-множителями 10 — двоичной и пятеричной).
    Ответ написан
    1 комментарий
  • USB вход выдает 10В, а должно 5В, почему?

    Jump
    @Jump
    Системный администратор со стажем.
    USB вход выдает 10В, а должно 5В, почему?
    Вариантов несколько.
    1. Вы не умеете измерять напряжение.
    2. Вы используете неисправные приборы для измерений.
    3. USB порт неисправен.
    Ответ написан
    8 комментариев
  • C# заменит ли Java?

    Oxoron ну что тут сказать навскидку...
    Я всегда считал .net допиленной java-платформой. Не то, чтобы в дотнете прям нереальные невероятные новшества, но все же некоторые вещи были обдуманы еще раз. Например, очень важным считаю разделение на reference и value типы. Правда, ИМХО, MS не довела идею до победного конца (слишком много технических вопросов нужно учитывать при выборе struct vs class), но все равно шаг очень правильный.
    Плюс, считаю важным отсутствие корреляции между логическим структурированием библиотек (по неймспейсам) и физическим (по сборкам). На каждом уровне должны приниматься отдельные решения насчет того, что куда класть.
    Еще одним преимуществом (нивелированным на данный момент) была изначальная ориентация .net на мультиязычную поддержку. Сейчас конечно JVM-языков навалом, но раньше это все-таки смотрелось киллер-фичей .net. Особенно поддержка "склеивающих" языков, таких как C++/CLI, которые позволяли интегрировать уже существующие компоненты с .net-приложениями. Дотнет изначально не был платформой в себе, разработчикам давали массу инструментов для интеграцией с COM и native-кодом. Ну и само собой managed-языки в приличном количестве, вон F# уже довольно давно подтянулся как официально (!!) поддерживаемый.

    А вообще конечно изначальным преимуществом .net были именно языки. Я думаю даже самые ярые джависты со мной согласятся, что с момента выпуска C#, язык Java развивается догоняющим образом. Можно опять сказать, что есть Scala, но тогда нужно учесть, что C# изначально был визитной карточкой платформы с момента ее появления. Ну и самое главное - инструменты. В мире Java достаточно хороших IDE, но уровень взаимоподдержки Студии и .net насколько мне известно пока не достигнут.

    И тут мы выходим на стандартное основное преимущество решений от MS - максимальная "готовность" и интеграция продуктов. К сожалению последние года 3 в Джаву не совался, но знакомые не раз говорили, что с отсутствием знаний об обеих платформах им гораздо легче было поднять hello-world веб-сайт (!) на asp.net в студии, нежели на том же Spring. Так или иначе, это фактор.

    Теперь библиотеки. Конечно, в мире джава их огромное количество. Я думаю и сегодня их значительно больше, чем в дотнет. Две либы в моем текущем проекте - NHibernate и NetTopologySuite - это порты с джавовских либ. Джава рулит на сервере. Про..аная Майкрософтом настоящая кроссплатформенность .net не давала ему потеснить джаву. Сейчас конечно это усиленно исправляется - в дотнете уже наступило перерождение после массовых релизов в open-source, переделанного asp.net, и появления DNX. По сути теперь .net официально поддерживается на *nix - системах. Это конечно надо было сделать намного раньше, но и сейчас этому рады.
    NuGet прекрасно справляется со своими задачами, более тесная интеграция в билд-процесс в DNX только улучшит процесс взаимодействия с ним.

    Ну и последнее - разработка UI. Все что есть в Java-мире (JavaFX, Java3D, Swing) это совсем не то. Windows Forms был отличным аналогом Дельфийских компонентов для UI, WPF в свое время вышиб немало дверей своим появлением. Если б он еще и развивался как подобает... Да, конечно, на джавовских технологиях вы напишите кроссплатформенную вещь, но она будет одинаково чужеродно смотреться и на винде, и в линуксовых desktop-средах. А людям в enterprise не особо нужна кроссплатформенность в UI - им намного важнее аккуратный привычный интерфейс, в том числе на Винде. Сейчас WPF может потеснить только современный Qt. Выбирая сегодня UI для десктопа, я бы выбирал между WPF и Qt, про джаву бы даже не подумал (да, я считаю что сегодня далеко не все можно и нужно пихать в браузер на тормозной JS. Весь новомодный неповоротливый софт, написанный с использованием Atom-а, меня удручает).
    ПРАВКА: посмотрел последние демки по JavaFX. В общем-то неплохо, осталось только дождаться хорошего роста коммьюнити и надеяться что не будет проблем с производительностью в сложных приложениях.

    Сколько тут преимуществ в штуках, посчитайте сами. Самый главный вывод - мало у кого возникает желание переходить на другую платформу просто потому, что обе сейчас очень хорошо развиты, и в обоих есть что поизучать, в обоих есть клиент и сервер, куча библиотек. Изучив один стек, никто не будет тратить время на другой, в этом просто нет смысла. Если кто-то и переучивается, то ради хорошей зарплаты: в банках и прочих страховых джава чуть популярнее, и за нее больше платят, процентов на 20.

    P.S. Да, тут кстати пишут что игродельство на C# достигло серьезного уровня. Я 3d делал и делаю на C++, поэтому тут пусть кто-нибудь другой прокомментирует.
    Ответ написан
    1 комментарий
  • Как изменить значок формы?

    Как можно изменить значок самой формы?

    В свойствах самого контрола.
    Выделяете форму в конструкторе, ищете окно Properties ("Свойства") и там где-то есть свойство иконки.
    Ответ написан
    Комментировать
  • Возможно ли начать работу программистом в 18 лет?

    @mantyr
    Пишу много Golang кода с удовольствием:)
    Для начала вам придётся попробовать самостоятельно найти ответы на эти вопросы. Иначе зачем вы нужны нормальной компании если за вас всё нужно делать самому? Учитесь быть самостоятельным, принимающим решения человеком. К тому же вы описали что у вас уже есть опыт. Постарайтесь его применить, что-то создать.

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

    @dmitryKovalskiy
    программист средней руки
    Для таких задач существует BackgroundWorker. Фактически обертка над работой с отдельным потоком.
    Ответ написан
    Комментировать
  • Можно ли работать программистом, но не оценивать сроки?

    trevoga_su
    @trevoga_su
    1. НЕ ВЕЗДЕ сроки имеют место быть. Ищите работу где сроки не требуются. Таких мест полно. Это как правило долгоиграющие проекты принадлежащие бизнесу, а не говеные веб-студии, штампующие на заказ.

    2. Сроки можно озвучивать, если вы пишите что-то, что вам понятно, задача прозрачна или типична. Есть задачи, когда о сроках не может быть и речи - например, поддержка/разбор чужого кода кода. На таких задачах сроках быть в принципе не может.

    3. Приехал я как-то с поломкой машины к мастеру-частнику. Говорю - вот то то не работает. Сроки? А он мне отвечает - а я не могу сказать. Откуда я знаю что там сломалось?
    Это я к тому, что даже такая в такой теме, как ремонт авто, где казалось бы все четко и все делается по наработанной схеме, сроки крайне не определены.

    4. Если с вас требуют сроки, значит вы что-то делаете не так или работаете где-то не там. Про сроки можно говорит в строительстве, где укладка одной плитки СТАНДАРТНО занимает Н минут и вы должны полы покрыть 30х40 метров. Тогда сроки справедливы. В IT сроков не может быть. Т.е. не должен исполнитель думать о сроках. Это не его дело. Менеджмент должен дать время с запасом и не терзать исполнителя.
    Ответ написан
    3 комментария
  • Где искать KML файлы с Административно-территориальным делением субъектов РФ?

    Moskus
    @Moskus
    Если вас устроит то, что есть в OpenStreetMap, то выгружайте через Overpass Turbo вот таким запросом.
    На всякий случай, код запроса:
    /*
    This has been generated by the overpass-turbo wizard.
    The original search was:
    “admin_level=* in "Республика Коми"”
    */
    [out:json][timeout:25];
    // fetch area “Республика Коми” to search in
    {{geocodeArea:Республика Коми}}->.searchArea;
    // gather results
    (
      // query part for: “admin_level=*”
      node["admin_level"](area.searchArea);
      way["admin_level"](area.searchArea);
      relation["admin_level"](area.searchArea);
    );
    // print results
    out body;
    >;
    out skel qt;

    Далее - жмите Export и выбирайте формат. Я бы еще поэкспериментировал с GeoJSON - он в Leaflet также поддерживается (по-моему, даже без плагинов).
    Ответ написан
    Комментировать
  • Как проверить вхождение строки в подстроку?

    GetB
    @GetB
    Используй String.Contains msdn.microsoft.com/ru-ru/library/dy85x1sa(v=vs.110...
    Ответ написан
    Комментировать
  • Как лучше сделать переодический вызов процедуры C# в static class?

    @gleb_kudr
    > Thread.Sleep
    Ох ох, не надо так делать.

    Есть прекрасный System.Timers.Timer, который и нужно использовать. Еще для таймеров можно использовать другой класс - System.Threading.Timer, вот статья в которой хорошо описаны их различия: msdn.microsoft.com/en-us/magazine/cc164015.aspx
    Ответ написан
    3 комментария
  • У ноутбука вырубается монитор и он зависает. Что может быть?

    XXX
    @XXX
    Решение где-то рядом
    @BlahBlag001 похоже на проблемы с материнкой.
    Если Вы и дрова переставляли и даже винду, а проблема все равно остается, 99% что проблема связана с железом. Сходите в сервис на диагностику, не убивайте свое время зазря.

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

    @gleb_kudr
    Важнейшая задача обучения школьников - не само обучение, а вовлечение. Вовлекать надо чем-то ярким и интересным. Это в первую очередь GUI и приложения насыщенные графикой. Начало должно быть именно таким.
    Когда вовлечение произойдет, можно переходить уже к более систематическому обучению с азов, т.е. с простейших редакторов и консоли.
    Ответ написан
    7 комментариев
  • Объясните что такое полиморфизм простыми словами ?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Да ладно, парни. Ну хватит уже, к чему такие сложности? Берём и читаем. Вообще совсем не обязательно читать про архитектуру и абстракции именно по своему языку, хотя javascript в этом плане родился уродом.

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

    Собственно, представим себе рядом стакан, кружку, чайник, кофемашину, велосипед и скейт. Что между ними всеми общего? Ну как минимум то, что они есть. То есть это - объекты, которые были созданы. Но как они были созданы? Скорее всего на заводе производителя по чертежам. Ок, чертежём назовём конструктор. Ну а класс? А что это такое? А его нет в нашей вселенной - эта сущность есть абстракция, что живёт лишь в наших мыслях. В реальном мире её нет и никогда не будет, такова уж физика - ей по барабану, что птицы и млекопитающие имеют дальних родственников - она лишь обеспечивает возможность естесственного отбора. А уж родственников друг другу находим мы, люди.

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

    Вот. У нас есть супер-предок Object, от которого дефолтно наследуются все объекты. Допустим, то что объекты состоят из атомов и есть то, что наследуют все объекты. Но все дополнения и правки - полиморфизм. Так, из атомов мы слепили колёса и приделали на доску - ок, это скейт. На него можно встать и катиться, а сильно извернувшись и полетать в трёх метрах над землёй, прямо таки излучая своё яркое эго. В то время как стакан - это мы слепили из атомов плотную ёмкость, из которой вода не выливается под действием силы тяжести. И прямое применение стакана - налив воды опрокинуть его над ртом, чтобы вода вытекла прямо в желудок. Так делают настоящие пацаны, не заботясь об икоте или страхе утонуть, так что вот - полиморфизм.

    Однако что с остальным? У нас ещё абстракция, инкапсуляция и наследование. Ок, начнём с наследования, так оно наиболее близко. Вот что у нас общего между стаканом и кружкой? Ну в оба можно налить воду, но у кружки есть ручка чтобы держаться. То есть можно придумать некий общий класс - ёмкость. Однако что это за класс? Можно например за этот класс взять стакан, тогда все ёмкости по дефолту стаканы, а всё остальное - видоизменённые стаканы. Но кому-то больше нравяться кувшины, например некоторые чики насят их на голове, считая что это удобно. Ну и пусть носят, но как-то же решить надо, что главнее и идеальнее. Так вот - недостяжимый идеал и есть главный - это называется абстрактный класс. То есть ёмкость, что невозможно создать, для которого нет полного чертежа. А все чертежи, что дополнили до полного - есть наследованные классы от класса ёмкость.

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

    Но мы подошли к последнему пункту - инкапсуляция. Она неразрывна с абстракцией, и по сути благодаря ей она и работает. Инкапсуляция - это своеборазный клей (или синяя изолента), которым склеивают разные чертежи в один. То есть совмещение деталей для создания своей - это и есть инкапсуляция. Причём при совмещении мы можем не описывать детали этого совмещения (то есть члены класса могут быть приватными), таким образом помогая абстрагироваться тем, кто этот чертёж использует. Вот посмотрим на чайник - что это такое? Это стакан (или кружка) к которому снизу (а может внутри по середине?) приклеен нагревательный элемент. Пустив по нему ток, согласно инкапсулированному в нагревательный элемент закону Ома, будет выделяться тепло и нагреваться вода. А кофемашина? Это куда более сложное устройство, с множеством насосов, ёмкостей, шлюзов, измельчителей и чайников. И всё склееное клеем. А может синей изолентой. Это снова инкапсуляция.

    Таким образом, абстракция невозможна без инкапсуляции и наследовании, как невозможен полиморфизм без, собственно, наследования. Ну а полиморфизм невозможен ещё и без инкапсуляции, которая банально бесполезна без наследования и полиморфизма. Вот такие тут треугольники с пирогами. Жаль только про пирог наврали. И про день рожденье.
    Ответ написан
    3 комментария
  • Как вы ведете учет прочитанных книг?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Мы читаем книги не для галочки, а для того что бы что то осмыслить.
    Совмещать несколько параллельно - мне кажется не очень правильно.
    Читаю или с бумаги, или с айпада - соответственно или книга стоит на столе, или заранее загружена в ридер.
    Ответ написан
    2 комментария