• В чем разница императивного и декларативного подхода в javascript? Это процедурный и ООП стили?

    @pikkvile
    developer
    Моё понимание такое.
    Декларативное программирование - это когда в коде описано что должно получиться, а императивное - когда написано как это сделать. Т.е. в первом случае мы совершенно не интересуемся, каким именно образом машина сделает работу, какие инструкции в каком порядке выполнятся и так далее, мы просто объясняем ей, что хотим увидеть в результате. Примеры декларативных языков - html, css, sql, конфиг nginx. Ещё тут стоит упомянуть функциональные языки (lisp, haskell), программы на них тоже, как правило, являются описанием (декларацией) того "что должно получиться". Ну, короче говоря, мы говорим компьютеру: вот смотри, мне надо чтобы было так, а как ты это сделаешь, мне не интересно. Аналогия такая: у меня есть чертёж бани, я даю его бригаде строителей и уезжаю. Как именно они там будут таскать брёвна, пилить доски и прочее - я не в курсе.
    Программируя императивно, мы описываем конкретные шаги, действия и точный порядок, в котором их нужно исполнять. Напрямую руководим процессом, непосредственно отдаём приказания. Примеров масса, большинство популярных языков императивны, в том числе и javascript. Ты пишешь: вот, сделай-ка переменную myVar, потом запиши туда число 5, повторяй это до тех пор, пока что-то не случится... и так далее. Возвращаясь к примеру с баней, ты теперь - начальник бригады, именно говоришь какое бревно куда класть.
    Что касается процедурного и объектно ориентированного стилей, это немного о другом. Я бы сказал, что это два разных способа писать императивные программы. В процедурном случае мы организуем код, наши команды (приказы машине) в виде процедур. Процедура - набор команд. Это довольно простой способ организации кода и исторически более ранний. ООП - это чуть более сложный подход к организации кода, когда мы группируем инструкции и данные, которыми они манипулируют, вместе. Объект - это состояние (данные) плюс поведение (набор методов). Но это уже немного другая история.
    Ответ написан
    2 комментария
  • Какому языку, в какой среде начинать учить ребенка программированию 10 лет?

    10 лет это 3 класс

    Отстаньте лучше от ребёнка. Ему всего лишь 10 лет - какое программирование? Пусть он сначала насладится детством. А уже после - сам начнёт ковыряться в том, что ему понравится
    Ответ написан
    7 комментариев
  • Отсутсвие await гарантирует выполнение async метода?

    shai_hulud
    @shai_hulud
    await только подписывается на результат awaitable (в нашем случае Task). И то будет ли выполнятся этот не зависит от await т.е. от тех кто его может ждать. т.е. ответ - Да, Notify() будет себе часами молотить. Если внутри будет ошибка, то лучше подписаться на результат и скипнуть ошибку. Notify().ContinueWith(t=> { var x = t.Exception; ... });

    Task.Run(async () =>
    Так делать не стоит, это ошибка, которую часто совершают. 'async => ()' это уже стейт-машина которая запускается вызовом, ее не надо шедулить через таски.
    Правильный пример:
    new Func<Task>(async =>  {
        try
        {
            await _notification.Notify();
        } catch(Exception ex) {
            // TODO: Логируем исключение
        }
    }).Invoke();

    Но опять же это всё не нужно в текущей задаче, можно вызвать ContinueWith.
    Ответ написан
    2 комментария
  • Redis vs SQLite vs PostgreSQL

    @Ghostwriter
    1. В Redis лучше представлена работа с коллекциями. Простой пример — инкрементальный счётчик. Вы делаете incrby/hincrby для любого ключа, не заботясь о его наличие в хранилище. В Postgres аналогичная функциональность на основе последовательностей (nextval('foo')) подразумевает, что вы уже создали последовательность 'foo' ранее. Это подталкивает вас на написание процедур, которые перед попыткой изменить счётчик, сначала проверяют его наличие, при необходимости создают его и только потом изменяют. Больше ручной работы.

    2. Структуры данных в Redis оптимизированы либо под быстрый поик О(1), либо под компактность и приемлемую произволительность O(N), O(log(N)). Практически всегда получается обходиться простыми или вложенными хеш-таблицами с О(1) или О(n). В Postgres вы практически всегда пользуетесь той или иной разновидностью B/R-tree, GiST/GIN индексов со сложностью O(log(N)(+N)). До версии 8.4, индексы типа HASH в Postgres имели практически схожую с B-tree скорость поиска, поэтому их применение не имело никакого смысла. Сейчас, в версии 9.1, смысла стало больше, но не намного — HASH индексы не поддерживают Write-Ahead Log и при сбоях требуют ручной переиндексации:
    "Hash index operations are not presently WAL-logged, so hash indexes might need to be rebuilt with REINDEX after a database crash. They are also not replicated over streaming or file-based replication. For these reasons, hash index use is presently discouraged." http://www.postgresql.org/docs/9.1/static/indexes-types.html

    У себя в проектах, я использую и Redis, и Postgres. Первый — как эффективную систему для сбора онлайн-статистики (счетчики-лайки, различные метрики), а второй — как хранилище для пользовательских аккаунтов и контента с его мета-информацией. При этом, наметилась тенденция переносить контент на HBase, оставляя для Postgres только задачи по ACID-обслуживанию операций с пользовательскими аккаунтами.
    Ответ написан
    Комментировать
  • Почему в рекурсивном обходе значение переписывается к последней итерации?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Потому что у вас при рекурсивном вызове обратно ничего не возвращается.
    https://jsfiddle.net/x4gyg9qp/10/
    Ответ написан
    Комментировать
  • Как настроить gitlab?

    @alexdash Автор вопроса
    Разобрался.
    Необходимо использовать localhost:8080 , а не домен, как пишут в гайдах
    Ответ написан
    Комментировать
  • Angular: как проверять тип данных у свойства компонента?

    @alexs0ff
    Компилятор typescript не обрабатывает шаблоны компонентов, поэтому при компиляции мы не получим ошибку. Как workaround могу предложить следующее - преобразуйте data в проперти и в методе set уже в рантайме проверяйте входящий тип. Или напишите свой декоратор, который будет уже в декларативном стиле проверять входящие типы значений.
    Ответ написан
    Комментировать
  • Почему на некоторых фотографиях на iPhone снизу появляется зеленая полоса?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    При увеличении - видно, что контуры снимка над полосой влияют на изменение цвета в этой полосе. Могу предположить, что неисправность в матрице/контроллере камеры на 2 цветовых канала: RED и BLUE, их сумма сбрасывается в GREEN-канал, образуя зеленую полосу с разной интенсивностью зеленого, который зависит от изображения.
    Ответ написан
    Комментировать
  • В чем вести проекты?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    Trello
    Ответ написан
    Комментировать
  • В чем вести проекты?

    У меня простая логика:

    YouTrack. В нем разделил проект на составные части:

    - Редакция (статьи, фото-материалы, контент, графика)
    - Бекенд (Разработка логики сайта)
    - Фронтенд (Разработка фронта)
    - Тестирование - линк идет на Бекенд и Фронт
    - Банкинг (все, что связано с деньгами)
    - Персонал (все, что связано с людьми - в данном случае у меня таски для фрилансеров там в том или ином виде).
    - Идеи (Пихаю туда все идеи, которые в последующем либо удаляются, либо переходят в нужный раздел)

    И работает это неплохо у меня
    Ответ написан
    7 комментариев
  • В чем вести проекты?

    lxsmkv
    @lxsmkv
    Test automation engineer
    для небольшого проекта пользовался в свое время Mantis BT это бесплатный багтрекер, с возможностью комбинировать набор задач/тикетов в milestone. Это важная фича, чтобы решать что мы будем делать сейчас а что потом. Документы там можно прикреплять к задаче. Это действительно удобно когда к задаче прикреплены все необходимые к ознакомлению документы.

    Есть системы где и багтрекинг можно делать и документы писать и рисовать и чатиться но это все будет стоить денег. Для стартапа это наверное лишная обуза. Например Jira+Trello+Confluence+Bamboo от Atlassian. Можно посмотреть zoho.com там тоже все можно делать, не знаю только можно ли установить все это на своем сервере. Можно Microsoft Sharepoint + MS Project использовать. Есть Assembla.com. Многие малые бизнесы спокойно хранят свои данные в бесплатных облачных сервисах. Я считаю что этого делать нельзя ни в коем случае. Но это кому как нравится.
    Вобщем вариантов масса, и каждый из них нужно пробовать и смотреть нужно ли оно вам в таком обьеме.
    Ответ написан
    2 комментария
  • Как работать с работающим контейнером Docker?

    @Kroid
    В работающий демоном контейнер залезть можно:
    docker exec -it container_name /bin/bash
    Этим мы запустим bash процесс внутри контейнера и подключимся к нему. Выйти из контейнера через команду exit.
    Ответ написан
    Комментировать
  • Как перевести код Delphi в .NET?

    evnuh
    @evnuh
    Поиск Гугл помог мне, впусти и ты его в свой дом
    головой + руками
    Ответ написан
    1 комментарий
  • Правильно ли я понял, что если осилить C#, то..?

    GavriKos
    @GavriKos
    На все вопросы - нет. Потому что C# - не более чем инструмент. И он не научит вас решать задачи, а всего лишь даст инструмент для их решения. Аналогия - осилив калькулятор можно решать уравнения? Осилив русский можно написать войну и мир?
    Ответ написан
    Комментировать
  • Правильно ли я понял, что если осилить C#, то..?

    sim3x
    @sim3x
    1. Нет, нужно будет еще изучить апи юнити, и др вещи, которые необходимы в игроделе
    2. Нет, в здравом уме никто так не делает
    3. Да, если доучишь винапи
    4. Если доучишь технологию
    Ответ написан
    2 комментария
  • Алгоритм поиска паттерна в неупорядоченной последовательности?

    @fireSparrow
    С учётом вашего комментария к ответу x67:
    В этом случае можно попробовать проверять только каждый пятый байт. Если там ноль - от него шагаем по одному символу влево до тех пор пока не наткнёмся на не ноль. После чего отходим ещё на пару символов влево и уже с этого символа проверяем вхождение паттерна.
    Теоретически можно получить экономию почти в пять раз.
    Но это будет хорошо работать только если в массиве мало нулей, не являющихся частью паттерна. Если же в массиве много посторонних нулей - то может получится даже хуже, чем при линейном поиске.
    И всё-таки рекомендую попробовать реализовать этот вариант и замерить время работы по сравнению с линейным поиском.
    Ответ написан
    Комментировать
  • Алгоритм поиска паттерна в неупорядоченной последовательности?

    x67
    @x67
    Ну в общем-то, как заметил Александр, вы хотите чуда, но алгоритм можно оптимизировать, если есть какая-либо закономерность, которая позволяет предсказать, в каких областях может быть искомый паттерн.
    Также если местоположение начала паттерна не может быть произвольным (то есть паттерн может начинаться в 1, 11, 21 байте, но не может начинаться в 37 к примеру), то время поиска можно сократить менее, чем в 10 раз, сначала поискав все первые байты, а потом проверив эти места уже полностью.
    Также можно поискать закономерность в этом паттерне.
    Но в целом, если это будет регулярной задачей, прикрутите что-нибудь для первоначальной обработки массива.
    Ответ написан
    2 комментария
  • Есть ли смысл в рекламировании себя, как специалиста, в соц. сетях?

    @jkotkot
    режим сарказма
    В linkedin создай профиль и тебя достанут приглашениями. И гугл и все остальные.
    Ответ написан
    31 комментарий
  • Как ускорить работу стека построенного на массиве размером 100М элементов?

    @none7
    Это невозможно! В тесте метод inc выполняется 108 раз. В среднем считывая по 2 * 108 байт данных за 1 проход. Даже если этот массив будет считать видеокарта GT 970, она сможет переварить чуть больше 1000 вызовов inc в секунду в среднем. В условие секунды можно вписаться если только переписать тест и класс и свести все 555 + 555 + 555 + 555 + ... в один 555 * n.
    Ответ написан
    5 комментариев
  • .NET неоправдано сжирает память?

    ayazer
    @ayazer
    Sr. Software Engineer
    1) алгоритмы сжатия изпользуют доп. память для генерации словарей. Размер словаря будет зависеть как от алгоритма сжатия, так и от данных которые надо сжать.
    2) для того чтоб освободить память от кучи хлама - можно сделать GC.Collect для инициализации сборщика мусора. В данном случае прийдеться делать GC.Collect(2), что достаточно дорогая операция.

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