• Почему не все серверы пишутся на Node js?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. Принципиальных качественных преимуществ у node.js перед остальными языками нет, как впрочем и недостатков. Просто yet another язык со своими особенностями. Соответственно если в вопросе заменить node.js на php/ruby/python итд - ничего не изменится.
    Вопрос по сути абстрактный "почему все не перешли на язык %%%%%"

    2. Ответ на абстрактный вопрос:
    а) Потому что существует огромное количество legacy кода который нужно поддерживать. Работы по поддержке и развитию существующего кода на порядок больше чем написания с нуля нового
    б) Потому что у разработчиков есть свой стек любимых технологий, изменять который без явных экономических причин основная масса не готова
    в) Потому что умные технические менеджеры выбирают стек технологий проекта исходя из имеющихся под рукой разработчиков и легкости поиска и заменимости оных.

    UPD
    hbrmdc
    У NodeJS есть уникальные и очень весомые преимущества, которых нет ни у одного другого языка. Например то, что это JS, и, следовательно, нет необходимости разучивать лишние языки - можно весь webapp писать на js.
    Личные предпочтения обоснованные привычками - это не имеющий значения аргумент в данном вопросе.

    1) Есть отличия, да. Только не те о которых Вы пишите. То что это "JS" вообще ни на что не влияет.
    JS хорошо знают фронтендщики - а кто пустит фронтэндщика к внутренней архитектуре? Там подход совершенно другой нужен, другие навыки, другое понимание как это все работает. Просто пересадить человека с фронта на бек - нельзя.

    На самом деле основные отличия другие:
    Постоянно живущий процесс, фактическая однопоточность. В зависимости от задачи - это может быть и плюсом и минусом. Условно для какого нибудь сокет-сервера - плюс (активно используем на живых проектах). Для middleware - я бы подумал. Для нагруженного сервиса с расчетами - точно нет.

    2) Личные предпочтения обоснованные привычками это основной аргумент.
    Я вот умею в php, умею в ноду, умею в еще десяток умных слов.
    Мне нужна новая команда на новый проект.
    Я открываю hh и что я вижу: node.js 279 резюме из которых половина фронтэндщики.
    PHP - 9613 резюме. Даже если 90% разработчиков PHP на hh - уроды которых к коду нельзя подпускать на пушечный выстрел - останется все равно в 3 раза больше чем есть node.js.
    Собственно на этом выбор и закончен.

    На малопопулярных языках пишут в случаях:
    a) это мелкий сервис с неявными перспективами который можно переписать за неделю
    б) это проект "для души" разработчика.

    Получается замкнутый круг на самом деле.
    Менеджер смотрит резюме, резюме на node.js нет =>
    Менеджер не начнет проект на node.js =>
    Не возникнет вакансия на node.js =>
    Разработчик анализируя вакансии не увидит вакансий на node.js =>
    Разработчик будет учить что то другое =>
    Менеджер смотрит резюме, резюме на node.js нет...

    Переломить ситуацию могут только очень крупные игроки обладающие возможностями формирования рынка (например Apple и Swift), и то не со 100% гарантией (samsung&c и Tizen)
    Ответ написан
    13 комментариев
  • Почему не все серверы пишутся на Node js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    1. Потому, что он подходит не для всех задач Что можно написать на Node.js?
    2. Потому, что не для всех приемлем JavaScript, люди так привязаны к синтаксису
    Ответ написан
    2 комментария
  • Какие вам дают вопросы на собеседовании?

    @xaphazard
    1) Как уже говорили выше очевидную вещь, задание на собеседовании - это не "сделать кое-как, чтобы работало", а "сделать максимально хорошо, чтобы показать насколько хорошо ты вообще можешь делать эту работу"
    2) В условии сказано "над полями и записями таблицы допускаются любые одиночные и групповые операции". Это значит, что могут, например апдейтом уменьшить количество у части уже давно совершенных операций, или назначить каждой операции новый рандомный склад назначения. И все подобные действия нужно поддерживать. Так что задание, фактически, не выполнено.
    3) Не используйте курсоры и циклы в случае, если можно решить задачу без них. Миллион инсертов по 1 строке в цикле будет работать на порядки дольше чем 1 инсерт миллиона строк. В данном случае задача решается так же без цикла.
    4) А что будет, если в блоке if (@flag_in > 0 and @flag_out > 0) после выполнения первого update второй апдейт упадет с ошибкой (от недостатка памяти на сервере, например)? А что если между двумя апдейтами вклинится другой, от другого запроса? Стоит поботать транзакции и try/catch

    Как бы делал я (ваще не факт, что это идеальное решение):
    1) завернуть все в try блок, в catch откатывать транзакцию на точку в начале блока, если что-то пошло не так.
    2) повесить ограничение на таблицу Размещение, чтобы не позволять отрицательные количества. В случае чего возникнет ошибка при вставке, отрабатывает 1)
    3) В случае удалений-апдейтов - находим все склады, на которые это влияет, заново по Движению пересчитываем для них данные в Размещении. Никаких циклов, 1 запрос. (удаления можно на самом деле оптимизировать, аналогично пункту 4)
    4) В случае вставки можно поступть аналогично, но можно оптимизировать и считать разницу относительно уже обработанного состояния в Размещении. Опять же, никаких циклов.
    5) Заметить работодателю, что в целом постановка задачи не особо корректна: нет времени Движений, поэтому нельзя адекватно обработать ситуацию, например на склад приходило (+10)(-5)(+100), а потом заменили (-5) на (-50). В итоге сумма то на складе положительна, но был момент, когда она была < 0.

    Вообще на вашем месте я бы переписал решение максимально хорошо, просто для повышения своей квалификации. Здесь смогут дать мнение, насколько лучше стало. Плюс поботать try-catch и транзакции. Плюс избавляться от "программистского" стиля в SQL коде - если есть циклы и куча if, значит что-то скорее всего сделано не так.
    Ответ написан
    3 комментария
  • В чем идея методов getServiceLocatior/setServiceLocator?

    Достоинства геттеров и сеттеров
    • Используя геттеры и сеттеры вы можете осуществлять контроль за тем, какие именно данные содержатся в свойствах объекта, и отклонять любые некорректные значения.
    • Так же вы можете осуществлять дополнительные операции перед тем, как установить или получить значение свойства (например, если обновление данного свойства должно вызывать некоторое действие, такое как оповещение пользователя).
    • При установке значения, которое является объектом или массивом, вы можете явно указать тип переменной в сигнатуре функции(прим. public function setBar(Bar $bar)). К большому сожалению, PHP не позволяет проделывать тоже самое с типами int и string!
    • Если значение свойства должно получаться из внешнего источника или среды исполнения, вы можете использовать ленивую загрузку данных — таким образом ресурсы, требуемые для загрузки данных, будут задействованы непосредственно во время получения значения свойства. Разумеется, в данном случае нужно соблюдать осторожность, и не следует получать данные из внешнего источника при каждом обращении к свойству. Будет лучше сделать одно обращение к базе данных и заполнить значения всех свойств сразу, чем делать это для каждого в отдельности.
    • Вы можете сделать свойство доступным только на чтение или только на запись, путём создания только геттера или только сеттера.
    • Вы можете добавить геттеры и сеттеры в интерфейс для того, чтобы отобразить их в API.

    Недостатки геттеров и сеттеров
    • Для разработчиков, которые используют прямой доступ к свойствам, геттеры и сеттеры кажутся настоящей головной болью! Для каждого свойства нужно определить само свойство, геттер и сеттер; и для того чтобы использовать данное свойство в коде, нужно осуществлять дополнительные вызовы метода — намного легче написать $foo->bar++; вместо $foo->setBar($foo->getBar() + 1); (хотя, конечно, можно добавить ещё один метод $foo->incrementBar();)
    • Как уже отмечалось выше, существуют небольшие дополнительные расходы, затрачиваемые на вызов метода.
    • Имена геттеров и сеттеров принято начинать с глаголов get и set, но данные глаголы так же могут использоваться и в других методах, которые ни коим образом не относятся к свойствам класса.

    Отсюда
    Ответ написан
    3 комментария
  • С++ В чём ошибка?

    @Alexander1705
    Не используйте оператор for each, он не является частью стандарта языка C++ и поддерживается только в VisualStudio.
    Используйте range-based цикл, который появился с версией C++11:
    for (string strFILE : v_strSEARCH)
    {
        cout << "Файл " << v_strFILE << endl;
    }

    А ошибка в том, что вы возвращаете пустой вектор:
    return vector<string>();

    Upd.
    Судя по истории ваших вопросов на тостере, добавлю:
    Если вы называете функцию GetFiles, компилятор на это никак не реагирует, он не будет сам возвращать вам список файлов. Имя функции задаётся только для того, чтоб программисту было понятно, что она делает. Внутри функции вам самим нужно написать алгоритм, который найдёт этот список, а после возвратит его, или же вызывать другую, заранее определённую, функцию.
    Используйте, например WinApi
    Ответ написан
    7 комментариев
  • Какие вам дают вопросы на собеседовании?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Один случай - вообще не показателен.

    Бывают ошибки, бывают случайности, бывают неадекватные задания.
    На этой фирме свет не сошелся. Забейте и шлите резюме на другие вакансии.
    Ответ написан
    Комментировать
  • Как собрать данные в одну строку в ms sql?

    В mysql это выглядело бы так:
    SELECT z.Nomer, GROUP_CONCAT(p.Name SEPARATOR ', ')
    FROM Nakladnaya as n
    INNER JOIN Product as p ON n.ProductID = p.ID
    INNER JOIN Zakaz as z ON n.ZakazNomer = z.Nomer
    GROUP BY z.Nomer

    В ms sql, насколько я понимаю, group_concat нет, но есть какие-то способы его эмулировать. Возможно, есть еще какие-то специфические нюансы, но я в этом сомневаюсь.

    P.S. Печатал эту смесь английского и транслита и плакал кровавыми слезами.
    Ответ написан
    Комментировать
  • Как преобразовать коллекцию объектов в коллекцию значений одного из его свойств одной строкой?

    hePPer
    @hePPer
    через Linq?

    var propList=objList.Select(s=>s.Text);
    Ответ написан
    Комментировать
  • Изменения значения в БД на проде?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Можете. Но только однажды.
    Ответ написан
    1 комментарий
  • Какова ниша js фреймворков?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    ну например google music написан на polymer

    что до builtwith - там как бы да, слегка разачаровываешься обычно когда просматриваешь это дело, там только парочка интересных проектов а все остальное - что-то простое.

    Веб-сервисы. Все понятно, туда сюда гонять XML/JSNON, JS вообще не нужен

    что для вас web сервисы и откуда там "гонять json"? Я правильно понимаю что вы сейчас о микросервисах на бэкэнде? Причем тут тогда фронтэнд?

    веб-приложения. Как правило, наборы гридов

    Хватит думать десктопными интерфейсами начала двухтысячных. Лично я считаю гриды дурным тоном (за очень редкими исключениями списки намного лучше справляются с выводом информации).

    Вот сижу и думаю, что за типы проектов должны быть, в которых применение фреймворков действительно было бы оправдано,


    Да на самом деле любой single page application, ибо фреймворк (например тот же angular) дает вам готовую инфраструктуру, позволяющую изолировать все по слоям, делать изолированные и легко покрываемые тестами (вы же не будете спрашивать зачем нужны тесты?) элементы интерфейса. А бизнес логика на клиенте в подавляющем большинстве простая, обычно все упирается именно в UI и как все это дело организовать. Фреймворки существенно упрощают разработку.

    Ну и еще на angular (а точнее на ionic) сделано приличное количество гибридных приложений (cordova/phonegap)
    Ответ написан
    Комментировать
  • Как написать php скрипт чтобы он не выполнялся при загрузке страницы?

    @dk-web
    Перед $first_name = (isset($_POST['first_name']));
    Добавьте if (isset($_POST))... то есть проверку

    п.с. сейчас вам расскажут про PDO, старый mysql иии... необходимость проверки данных перед занесением в бД))
    Ответ написан
    4 комментария
  • Как юр.лицу подтвердить легальность бесплатного обновления до Windows 10 в случае проверки?

    Sergey-S-Kovalev
    @Sergey-S-Kovalev
    Sysadmins team leader
    Если у вас ПО закуплено по корпоративным каналам распространения, то все зависит от оформленной подписки. Разовая закупка лицензий Windows 7 GGK не дает вам права бесплатного обновления до Windows 10, поскольку коммерческое использование Windows 10 обговаривается отдельным лицензионным соглашением. Если же у вас есть подписка с правом получения новых версий ОС и ПО, то обновление у вас происходит в рамках данного соглашения, что вопросов со стороны надзорных органов вызвать не должно.
    Ответ написан
    2 комментария
  • Как задать запрос к MYSQL, с учетом нескольких полей в разных таблицах?

    index0h
    @index0h
    PHP, Golang. https://github.com/index0h
    1. Лучше явно прописывайте {JOIN_TYPE} JOIN
    2. Не используйте сокращения типа "b" Никогда. В один прекрасный момент попадете на запрос с join таблицы самой себя и полей эдак на 20 штук, помянете мое слово))
    3. Лучше не пишите select *, пишите явно, что хотите получить.

    SELECT books.id,
        books.name AS book_name,
        GROUP_CONCAT(genres.name) AS genres
    FROM books_has_genres
        INNER JOIN books ON books_has_genres.book_id = books.id
        INNER JOIN genres ON books_has_genres.genre_id = genres.id
    WHERE books_has_genres.genre_id = 25
          AND books_has_genres.book_id NOT IN (
              SELECT sub_books_has_genres.book_id
                  FROM books_has_genres AS sub_books_has_genres
                  WHERE sub_books_has_genres.genre_id = 22
          )
    GROUP BY books_has_genres.book_id
    ORDER BY books.id
    Ответ написан
    Комментировать
  • Какую базу данных выбрать для ASP.NET MVC веб-сайта?

    Therapyx
    @Therapyx
    Data Science
    А чем в этом случае вас не устраивает тот же MS SQL Server? Я бы просто оставался на нем, все работает хорошо)) Тем боооолее для сайта визитки... )
    Ответ написан
    2 комментария
  • Можно при недоступности сайта отобразить свою ошибку?

    LittleFatNinja
    @LittleFatNinja
    горе девелопер, любитель лютой садомии
    нет
    Ответ написан
    Комментировать
  • Как сделать отмену динамических изменений?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    1. Создаем некий массив, называем его история.
    2. Учим систему каждый шаг изменений сериализовать в некий формат (json например) и сохранять в массив история.
    3. Учим систему восстанавливать свое состояние из этих сохраненных данных.
    4. Учим массив история хранить например только последние 20-30 записей.
    5. Добавляем слушатель для Ctrl+z
    6. Profit!
    Ответ написан
    Комментировать
  • Плюсы и минусы фронта и бэкэнда?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    ЗП примерно одинакова. Идите лучше туда, где уже есть хоть какой-то опыт. Фронтенд конечно динамично развивается, но на самом деле просто феерический разброд и шатание.
    Ответ написан
    Комментировать
  • Влияют ли ошибки сайта проверенные валидатором на поисковые системы?

    Lomoson
    @Lomoson
    Вы думаете по всем остальным параметрам ваши сайты ОК? :)

    Ходят слухи, что это крайне-крайне-крайне незначительный фактор.
    Ответ написан
    1 комментарий
  • Не работает очистка clearTimeout?

    maximw
    @maximw
    Переменная reset должна быть видимой в обеих функциях.

    Не очень красиво, но должно работать
    var reset;
    
    $(".boy-block").mouseover(function(){
    
        clearTimeout(reset);
        idInterval = setInterval(countLoop,100); 
        
        $(".circle-inner").addClass("active");
    
    });
    
    $(".boy-block").mouseleave(function(){
          clearInterval(idInterval);
          reset =  setTimeout( '$(".circle-inner").removeClass("active")', 2000 - count);
          count = 0;
    });
    Ответ написан
    Комментировать
  • Не работает очистка clearTimeout?

    Stalker_RED
    @Stalker_RED
    Объявите idInterval за пределами анонимных функций, там-же, где var count = 0;
    Ответ написан
    Комментировать