• Как вы боретесь со слабой типизацией и зачем ее придумали?

    profesor08
    @profesor08 Куратор тега JavaScript
    Если ты дергаешь всякие значения из документа, или из форм, то по умолчанию там тип данных - строка, а раз так, то чему тут удивляться, парси строку. Если ты не объявляешь какую-то переменную, или не задаешь какой-то параметр для функции, то снова, почему удивления, js мыслей читать не умеет? Еще есть параметры по умолчанию.
    Ответ написан
    Комментировать
  • Как вы боретесь со слабой типизацией и зачем ее придумали?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Хорошая архитектура снижает необходимость в приведении типов.
    5af00f1b811b0153622827.png
    А придумали и используют динамическую типизацию потому, что она существенно снижает TTM.
    Ответ написан
    4 комментария
  • Когда используют низкоуровневый ADO.net, а когда Entity Framework?

    IlyaMS
    @IlyaMS
    EF (особенно с CodeFirst) позволяет разрабатывать БД и логику работы с ней быстрее и на C# (практически не залезая в SQL). Кроме того, благодаря миграциям обеспечивается консистентное состояние структуры БД (Петя и Вася не смогут поменять что-то в базе, не получив конфликта в системе контроля версий при мердже). Из минусов - ограничения, которые EF накладывает на ваши возможности (ADO в этом плане более низкоуровневое => более мощное средство), а также неоптимальность и нечитабельность SQL-кода, который EF генерирует в ответ на ваш красивый и понятный код с использованием LINQ (достаточно залезть в то, что генерит EF на любой среднестатистический нетривиальный запрос с несколькими связанными сущностями - и ужаснуться).
    Ответ написан
    Комментировать
  • Где посмотреть реальные примеры использования "правильных" клиентских javascript?

    @everdimension
    Отличный вопрос, а большинство ответов дурацкие. Да, до "однозначно идеальной" архитектуры коммьюнити пока не доросло, но это не значит, что не надо интересоваться тем, как можно сделать лучше и опираться на чей-то опыт.

    Как раз за последнее время с появлением es2015 и webpack дела стали куда лучше, чем когда-либо.
    Однако в сводобном доступе больших полноценных проектов я встречал мало, хотя может быть не так хорошо искал. Но известные примеры есть, посмотри вот —

    https://github.com/andrewngu/sound-redux
    https://github.com/vslinko/ripster

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

    Посмотри на react-starter-kit. Там собрано очень много полезного. Хотя я и не советую вслепую брать бойлерплейты и разворачивать на них свой проект, но очень советую на них посмотреть "изнутри" и узнать много интересного или просто нового.

    Посмотри на examples в react-router'е. Конкретно в примере huge-apps показывается, как можно бить вебпаком код на куски и подгружать только необходимое на лету.

    Может смутить то, что во всех приведённых ссылках используется react, но для твоей цели (узнать о хорошей архитектуре приложений) это большого значения не имеет. Хотя реакт и сыграл большую роль в "компонентном" мышлении и представлении и повлиял — в хорошем, на мой взгляд, смысле — на то, какими сейчас видятся клиентские js приложения. Из большинства упомянутых проектов реакт убирается довольно легко и заменяется другой понравившейся библиотекой, а именно такая лёгкость смены технологий и является одним из критериев хорошей архитектуры.
    Ответ написан
    Комментировать
  • Match.round, где ошибка?

    IonDen
    @IonDen
    JavaScript developer. IonDen.com
    Ваша проблема в том, что вы пытаетесь округлить строку.
    Нужно вначале сделать округление, а потом уже добавлять всякие тексты, вроде "Второй платеж" и т.п.

    Т.е. НЕ(!) так:
    var secondSend = "Второй платеж: " + Number(creditGetPrice / 2) / 3 + " грн";
    document.getElementById('itemsecondSend').innerHTML = Math.round(secondSend);

    А вот так:
    var secondNumber = Math.round((creditGetPrice / 2) / 3);
    var secondSend = "Второй платеж: " + secondNumber + " грн";
    document.getElementById('itemsecondSend').innerHTML = secondSend;
    Ответ написан
    2 комментария
  • Где брать красивые фоны для сайтов?

    @iulimel
    pixabay.com - работают по лицензии Creative Commons (передача в общественное достояние. Бесплатно, большой выбор, примерно 620 000 изображений и векторов, не нужно ссылок на автора или источник)
    Ответ написан
    Комментировать
  • Сервис для отправки email с JS API?

    rpsv
    @rpsv
    делай либо хорошо, либо никак
    1. AJAX в принципе обращается к серверной стороне
    2. Какой нибудь сервис - это тоже серверная сторона.

    Так что на ваш вопрос ответ - НЕТ. Так что лучше перефразируйте: с помощью какого сервиса можно отправлять email?

    И собственно вопрос по данной теме: Какие существуют сервисы отправки email?
    Ответ написан
    Комментировать
  • Что отличает freelance программиста от корпоративного?

    Тут сложный момент. Не рискну говорить за всех, но расскажу о своём личном опыте и опыте моего друга.
    Мне на данный момент 33 и я всю жизнь проработал в офисе, никогда ни одного дня не фрилансил. Хотя понимаю, что во фрилансе больше денег. Но. Находясь в офисе ты находишься во взаимодействии с коллегами, а значит возможен очный обмен опытом, который, как ни крути, более интенсивен и более значим, нежели заочное общение на форумах. Просто потому что очно общаться проще и продуктивнее. Кроме того, для фриланса важна сильная самодисциплина: слишком много дома есть отвлекающих факторов и, лично мне, трудно находясь дома сосредоточиться на работе; далее, я разделяю среду обитания: на работе я работаю, а дома я отдыхаю. Ввиду таковой психологической установки мне трудно дома переключиться на рабочий режим. Ну и плюс к этому, о доходе в полмиллиона деревянных мне можно лишь мечтать, но меня деньги не интересуют как таковые, а потому мотивацией являются не деньги, а делание полезного и большого продукта, т.е. относительно маленькие проекты (с ограниченным сроком разработки и поддержки) меня не интересуют. Потому я всегда работал в ай-ти-шных интернет-компаниях над большими проектами, но никогда не рассматривал возможность трудоустройства в студию.

    Далее про друга. Он фрилансит уже более 10 лет. И, когда начинал, то немного троллил на тему "а я вот не работаю на дядю". Спустя 5 лет, он понял, что всё-таки работает. Но только на много разных дядь.
    Далее, есть момент в сложности самообразования: когда он не взаимодействует с большим коллективом таких же умных людей, то обмен опытом происходит гораздо слабее (писал выше), а потому знания необходимо самостоятельно подчерпывать из разных источников (хабр, англоязычные статьи, книжки, блоги умных разработчиков, и т.д.), но вот ведь вопрос: а когда это всё читать?, и каким образом это можно опробовать (если только не вести собственный(ые) опен-сорс проектики)? А значит, если нет жажды знаний, то варясь в зафиксированном стеке технологий начинается профессиональная стагнация. На что друг стал жаловаться мне 3 года назад: он понял, что очень много не знает, что появилось много нового и интересного, но он из-за того, что "просто решал прикладные задачи конкретного заказа" пропустил это всё. Было интересно за ним наблюдать, когда рассказывал ему про Git, DIC, модульное тестирование и т.д. --- то были удивлённые глаза ребёнка.
    Кстати, о детях. Упомянул выше, что для фриланса нужна сильная самодисциплина. У него тоже было такое: когда начал фрилансить, то он уже жил с девушкой (ныне женой) и она никак не могла понять почему нельзя отвлекать: ну вот же он!, что такого, чтобы помочь что-нибудь сделать по дому по-быстрому (например помыть посуду или вынести мусор): работа ж не убежит?, а что такого, чтобы подойти и спросить что он хочет на ужин? В конечном итоге проблема решилась тем, что договорился с ней о том, что в период с 2-х часов дня до 6-ти часов вечера, она к нему даже близко не подходит, не спрашивает, не отвлекает и вообще старается не шуметь. Вроде, всё стало хорошо... пока не родился ребёнок, а вот там уже не объяснить ребёнку, что папа работает и не надо мешать. Поэтому всё закончилось тем, что он снял комнату в офисе и теперь каждый день, как и многие другие люди, ездит работать в офис.

    Собственно к чему я это всё. И там и там есть плюсы и минусы. И каждый находит и занимается тем, что ему интересно, к чему больше лежит душа.
    Но лично я с большой настороженностью отношусь к найму фрилансеров в штат компании лишь по одной причине: если недостаток знаний всегда можно восполнить общением и обучением, то вот с коммуницированием возникают (по моему опыту) значительные проблемы: нежеление (а иногда и саботаж) в части принятия используемого код-стайла; нежелание исправлять замечания, оставленные во время код-ревью; притаскивание сторонних говно-библиотек без необходимости; нежелание писать модульные тесты; а в отдельных случаях, даже эгоизм. При этом, уточню, что это относится не ко всем! Далеко не ко всем! Во всей моей практике такое было лишь дважды и то были молодые фрилансеры. Так же замечу, что опытные фрилансеры (ввиду большего жизненного опыта) гораздо спокойнее и легче вливаются в команду (такие тоже приходили и у меня был опыт работы с ними).
    Ответ написан
    2 комментария
  • Почему (function($){…})(jQuery)?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Конструкция (function($){…})(jQuery) изолирует пространство имён плагина. Это гарантия того, что плагин не затрёт чужую переменную, например.
    Ответ написан
    4 комментария
  • В запросе пишем в несколько таблиц. Если в первую данные записались, а при записи во вторую вылетело исключение, то запись в первую откатится?

    Winsik
    @Winsik
    сис.админ, недопрограммист :)
    если открыть транзакцию то конечно
    то есть открываете транзакцию , все обновления в трайблок и если ошибка делаете ролбэк, если всё хорошо то коммит
    Ответ написан
    6 комментариев
  • "switch case" - плохо?

    Nipheris
    @Nipheris Куратор тега C#
    О неписанных правилах по написанию какого-либо кода нужно уточнять сначала у того, кто этот код писал или кто его поддерживает сейчас. У конкретного разработчика/команды могут быть свои неписанные правила, которые нужны лично им.
    А сам switch используется достаточно часто, чтобы не считать его злом. Уж гораздо чаще, чем goto. Тем более, switch в шарпе гораздо "безопаснее", чем в том же С++, например компилятор следит, чтобы вы поставили break, если у вас есть код после case.
    Почитайте код популярных библиотек на codeplex или гитхабе, чтобы самому все увидеть.
    Ответ написан
    Комментировать
  • По какой причине JS результатом к выражению 1.4 + 0.2 возвращает 1.5999999999999999?

    khipster
    @khipster
    Это называется неточные вычисления. Всё дело в том, что в стандарте IEEE 754 на число выделяется ровно 8 байт(=64 бита), не больше и не меньше. Например число 0.1 (одна десятая) записывается легко в десятичном формате. Но в двоичной системе счисления это бесконечная дробь, так как единица на десять в двоичной системе так просто не делится. Вообщем складываются неточности, надо округлять.
    Ответ написан
    1 комментарий
  • C#. Где может быть полезна явная реализация интерфейса?

    @JuniorNoobie
    Сижу в поддержке, пишу мелкие проекты
    Ну есть у вас, предположим, два интерфейса (IDollar и IEuro) в которых описан метод с одним и тем же именем (getPrice). Если у вас случится так, что будет класс (Car), который будет реализовывать эти интерфейсы, то для корректной работы, а именно, чтобы возвращать цену в долларах и евро, необходимо явно реализовать оба метода интерфейсов в классе и вызывать так:

    (IEuro)car.getPrice() - цена в евро
    (IDollar)car.getPrice() - цена в долларах
    Ответ написан
    2 комментария
  • Как сделать автодобавление кода?

    AnnTHony
    @AnnTHony
    Интроверт
    В чем конкретно проблема?
    Выбирается картинка, пишется текст. Далее:
    - загружаете файл (картинку) к себе на сервер
    - запоминаете в базе или где пожелаете путь к этой картинке и подпись (текст)
    - формируете html-разметку (шаблон) для показа картинки с подписью
    - добавляете в галерею новую картинку
    Ответ написан
    Комментировать
  • Возможно ли при клике по ссылке выбрать option в select?

    @lemme
    Frontend
    Вешаете событие клик на ссылку и меняете selectedIndex списку.
    Ответ написан
    Комментировать
  • В чем различие между?

    petermzg
    @petermzg
    Самый лучший программист
    function Person(){} - Вы обьявляете функцию с именем Person.
    var person = Person() - Вы вызываете функцию Person и результат сохраняете в переменную person
    var person = new Person()- Вы создаете новый обьект использую функцию-конструктор Person
    Ответ написан
    Комментировать
  • Как поддерживать две версии приложения (платная и бесплатная)?

    onqu
    @onqu
    weasy
    Конечно, можно использовать 2 ветки, конечно, можно делать все в одной ветке и понатыкать везде #ifdef FOR_NISCHEBROD, FOR_REGULAR_CLIENT, FOR_RICH_ONE, конечно, можно расставить тэги, чтобы было проще искать эти места в будущем.

    Но, при увеличении объема логики придется прибегнуть к использованию шаманского бубна, ритуалу выстрела в свою ногу и мольбы праотцам. Добавлять/править логику в этих кусках будет очень непросто.

    Другой вариант.
    Делать приложение модульным, где основное приложение является лишь каркасом с базовой функциональностью, лежит в отдельной репе, тестируется отдельно от всего, и где модули это подключаемые расширения (Компоненты, DLC, LIB, Whatever), у которых есть API интерфейс для расширения функциональности основного приложения, и каждый лежит в своей репе.
    Более того, их можно будет тестировать, как вкупе, так и отдельно от основного приложения. При сборке указываем только требуемые расширения. Нэкст лэвэл - подключать расширения динамически, то есть без сборки с приложением.
    Ответ написан
    2 комментария
  • Можно ли начинать верстать админку сразу, не приступая пока к серверной части самой админки?

    @yuriyant
    web программист
    Можно. Часто именно такой жизненный цикл разработки ведется и считается оптимальным.
    1. Прототипы, Дизайн
    2. Верстка
    3. Разработка Front-end и Back-end
    Ответ написан
    Комментировать
  • С#. Почему локальным переменным, определенным в методе, необходимо задавать начальное значение, а полям класса можно не задавать?

    BasmanovDaniil
    @BasmanovDaniil
    Геймдизайнер-телепат
    И там и там можно не задавать, нужно понимать что вы хотите сделать.
    using System;
    
    public class Test<T>
    {
        // Перед вызовом конструктора выставится в default(int), то есть 0 
        private int i;
    
        // Для ссылочного типа default(object) будет null
        private object obj;
    
        // default(T)
        private T t;
    
        public Test()
        {
            // Не инициализированная переменная
            int foo;
    
            // error CS0165: Use of unassigned local variable 'foo'
            Console.WriteLine(foo.ToString());
    
            foo = 0;
    
            // У foo появилось значение, теперь переменной можно пользоваться
            Console.WriteLine(foo.ToString());
    
            int bar;
    
            // error CS0165: Use of unassigned local variable 'bar'
            Ref(ref bar);
    
            // Для ref нужна инициализированная переменная
            Ref(ref foo);
    
            // Для out не нужна
            Out(out foo);
            Out(out bar);
        }
    
        private void Ref(ref int r)
        {
            r = 0;
        }
    
        private void Out(out int o)
        {
            o = 0;
        }
    }

    Подробнее читайте в MSDN здесь и здесь.
    Ответ написан
    Комментировать
  • C# конкатенация строк?

    newross
    @newross
    Product owner
    Используйте параметры команды вместо конкатенации.
    var commandText = "UPDATE Sales.Store SET Demographics = @demographics WHERE CustomerID = @ID;";
    
        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            SqlCommand command = new SqlCommand(commandText, connection);
            command.Parameters.AddWithValue("@ID", customerID);
            command.Parameters.AddWithValue("@demographics", demoXml);
    
            connection.Open();
            command.ExecuteNonQuery();
        }
    Ответ написан
    1 комментарий