• Какую виртуальную учебную доску (похожую на Miro) можно интегрировать на сайт?

    @Ezekiel4
    Охотник на пиратов и сборщик монолитов
    Нужно уточнить спецификации, что конкретно нужно. Вариантов досок много, можно хотя бы начать с их стоимости. Указанный вами Miro очень хорош, и я не могу представить чем он не угодил, но если нужны альтернативы, могу привести минимум 3: Conceptboard, Padlet и Stormboard. Все три норм, но если бы мне нужно было выбрать что-то одно, то это Conceptboard просто из-за простой интеграции с другими сервисами, типа Google Drive и Slack.
    Ответ написан
    Комментировать
  • Какие существуют "общие" правила по верстке web страниц?

    @itsjustmypage
    Перевести блочную модель в привычный вид (*, *::before, *::after {box-sizing: border-box;}
    Подключить normalize.css (body margin 0 там тоже есть).
    Верстка семантическими тегами. Header, main, footer, section, article, aside, вот это всё. О том где и как их применять подробно в спецификации https://www.w3.org/TR/html/fullindex.html#index-el...
    Сохранять семантичность и доступность при кастомизации форм всех видов (input, button). Пример правильной кастомизации чекбоксов https://www.youtube.com/watch?v=E6kLaaQFctU
    Размечать документ, сохраняя правильную структуру заголовков (h1-h6), что такое правильная структура есть в спецификации https://www.w3.org/TR/html/sections.html#the-h1-h2...
    Использовать какую-либо методологию вёрстки (обычно БЭМ).
    Верстать модульно, максимально независимыми блоками (см пункт о методологии).
    Сжимать изображения, использовать SVG при возможности (векторные иконки, косые и криволинейные украшательства и т.д.)
    Использовать автопрефиксер для автоматического проставления префиксов в CSS.
    Стили для обработки пользовательского ввода (на случай, если текста будет слишком много/мало, длинные слова и т.д.)
    Как-нибудь обработать FOUT(мерцание нестилизованного текста)/FOIT(мерцание невидимого текста). Как правило это просто font-display: swap.

    Пока не знаю что ещё добавить, можешь погуглить чеклисты вёрстки, взять что-то из них.
    И здесь посмотреть webmasters.teamdev.com
    Ответ написан
    Комментировать
  • Логгер для NodeJS?

    mahnunchik
    @mahnunchik Автор вопроса
    https://about.me/vlasenko
    Прошёл год, написан и используется свой логгер. Ниже хочу описать причины и что получилось.

    Требования поменялись и в настоящее время они отлично ложатся на идеологию 12 factor app 12factor.net/logs

    А именно: логгер и само приложение не занимаются записью лога ни в файл ни в базу. Никаких транспортов. Лог пишется только в stdout.

    Мотивация:
    1) Мы получаем отличный лог в консоле во время разработки просто запустив приложение. Без всяких "девелоперских" режимов транспортов.
    2) В продакшене сбором и транспортом лога занимается то, что запускает наше приложение (forever, upstart, supervisor). Процесс транспортировки лога лежит не на самом приложении - это развязывает руки в использовании как своих сервисов агрегации логов (logstash), так и сторонних (loggly).
    2) Как логгер, так и само приложение избавлены от багов "толстого" логгера и транспортов.

    Требования к реализации:
    1) Быстрый старт - возможность начать использовать логгер без первоначальной конфигурации
    2) Пространства имен
    3) Гибкость в настройке формата сообщений (которые мы пишем в stdout)

    Вот так получился mag логгер

    Быстрый старт
    var logger = require('mag')();
    logger.info('my great application is running!');


    Пространства имен
    var mag = require('mag');
    var logger = mag('my-app');
    logger.info('my great application is running');


    Настройка формата сообщений.
    Мы можем подключать mag сколько угодно раз, даже в подмодулях. Подключив один раз модуль mag-hub - все сообщения пойдут через него. mag-hub - это стрим в режими объектов. Мы можем читать из него и делать с объектами логов всё что угодно, записав потом в stdout конечно.

    При написании подмодуля приложения о логировании заботиться также не нужно: https://github.com/mahnunchik/mag#for-module-developers

    Ссылки:
    1) mag logger
    2) API логгера
    3) Модуль агрегации логов в одном стриме mag-hub
    Ответ написан
    2 комментария
  • Есть ли единое API для доступа к данным чека онлайн касс?

    @IvanG
    <тут был старый ответ, на устаревшее апи>
    информация по новому апи (август 2020)
    тут в комментах: leftjoin.ru/all/sobiraem-dannye-s-chekov-gipermark...
    и тут в ишью разбирают новый формат запросов:
    https://github.com/kosov/fns-check/issues/3#issuec...
    https://github.com/DmitriyBobrovskiy/CheckReceiptS...

    спойлер - чуть усложнилось, нужно получать сессионный айди, который живет пару дней, а после обновляеть его по токену (сессия и токен первоначально при верификации номера / регистрации выдаются, дальше при обновлении сессии сразу пара обновляется токен/сессионный ключ)

    p.s. ссылки взяты из темы обсуждения приложения, может еще что полезное там есть: https://4pda.ru/forum/index.php?showtopic=835790&s...
    Ответ написан
    3 комментария
  • Объясните простыми словами как работает Redux?

    Laiff
    @Laiff
    Front-end developer
    Отличный мануал от самого Дани https://egghead.io/series/getting-started-with-redux
    Документация переведенная на русский https://github.com/rajdee/redux-in-russian там почти все есть.
    Есть еще приятная статья на хабре чисто по базовым принципам, но в некоторых местах не полная habrahabr.ru/post/269831
    Ответ написан
    3 комментария
  • Объясните простыми словами как работает Redux?

    У вас есть одно большое дерево, в котором хранится все состояние (state) приложения - это хранилище (store).
    Также у вас есть набор редьюсеров (которые скомбинированы в один общий rootReducer) - это функции, который принимают текущее состояние и действие и возвращают новое состояние:
    function someReducer(state = initialState, action) {
      // обычно выглядит как switch 
      // action - простой js-объект
      //              и обязательно имеет строковое поле type
      switch(action.type) {
        // обрабатываем действие с типом SOME_ACTION_NAME
        case 'SOME_ACTION_NAME':
          // берем какие-то данные из экшена и возвращаем новое состояние
          // при этом менять sate нельзя!
          // state.someProperty = action.newStateData <--- НЕТ!
          return { ...state, action.newStateData };
        // Если мы не обрабатываем действие - просто возвращаем старое состояние
        default:
          return state;
      }
    }


    Также есть экшен креаторы (actionCreators) - это функции, которые возвращают действие. затем это действие вещается в хранилище (диспатчится). Типичный пример:
    function someActionCreator(someArg) {
      return {
        type: 'SOME_ACTION_NAME',
        newStateData: someArg + 5, // <-- разная логика
      };
    }


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

    Если мы хотим получить доступ к состоянию в экшен креаторе - воспользуемся thunkMiddleware:
    import thunkMiddleware from 'redux-thunk';
    
    function createStore(initialState) {
      const reducer = combineReducers(reducers);
      const finalCreateStore = applyMiddleware(
        thunkMiddleware // <-- добавляем middleware
      )(defaultCreateStore);
      return finalCreateStore(reducer, initialState);
    }


    Теперь мы можем делать так:
    function someActionCreator(someArg) {
      return (dispatch, getState) => { // <-- возвращаем фукнцию, а не объект!
        const someState = getState().reducerName;
        return {
          type: 'SOME_ACTION_NAME',
          newStateData: someArg + someState, 
        };
      };
    }


    В общем схема выглядит так:

    actionCreator --action--> dispatch --action--> middleware --action--> store --action--> reducer --> newState


    Затем мы берем из react-redux метод connect, который подключает Ваш умный компонент к хранилищу:
    import { connect } from 'react-redux';
    import { bindActionCreators } from 'redux';
    
    class MyComponent extends Component {
      static propTypes = {
        someProp: PropTypes.string.isRequired,
        someFunc: PropTypes.func.isRequired,
      };
    }
    
    // Тут мы берем из глобального состояния необходимую нам часть
    // В ownProps - свойства компонента. Тут могут быть например свойства от роутера
    function mapStateToProps(state, ownProps) {
      return {
        someProp: state.someReducer,
      };
    }
    
    function mapActionsToProps(dispatch) {
      return bindActionCreators ({ // <-- биндим все на disptach для удобства
        someFunc: (someArg) => someActionCreator(someArg + 1),
      }, dispatch);
    }
    
    export default connect(
      mapStateToProps,
      mapActionsToProps
    )(MyComponent);
    Ответ написан
    3 комментария
  • Кто как делает html формы?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    Я много, долго и упорно делал на jQuery+Vanilla JS сложные динамические формы, которые строил генератор по мета-данным.

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

    К тому же прямые манипуляции на DOM для меня стали еще большим злом.

    В общем от jQuery как основного движка на фронтенде я отказался категорически, сейчас плотно изучаю React+Redux и ище с ними, предварительно проведя исследования по основным мейнстримовым фреймворкам и библиотекам для фронтенда.

    Мне зело симпатишна идея рулить состоянием, а чтобы интерфейс при этом выстраивался автоматически.

    Ну и на бэкенде до кучи решил мигрировать на Node.JS, ибо это позволяет отказаться от веб сервера как обязательного элемента-посредника между фронтендом и бэкендом, к тому же это позволяет хранить активное состояние нативно, что доставляет неимоверно.

    В совокупности с ES-2015 это всё становится приятнее и интереснее.

    Да, безусловно, есть там и свои проблемы, тем не менее прогресс не стоит на месте.
    Ответ написан
    Комментировать
  • Кто как делает html формы?

    PretorDH
    @PretorDH
    HTML5, CSS3, PHP, JS - люблю в чистом виде.
    Современная форма - это комплекс решений, в разных областях. И поставить один модуль который решит проблему - не возможно в принципе. Каждый специалист может собрать свою часть. Но без архитектора который скажет как это скрутить в кучу, будет велосипед с квадратными колесами - ехать можно но по специальной дороге.

    1. Разметка:
      • пишу всегда вручную;
      • длинные селекты тянутся из базы посредством шаблонизатора (например серверного TWIG);
      • прописываю полностью с атрибутами валидации HTML5 (благо все современные браузеры потдерживают);
      • выдумывать JS-велосипеды для валидации не стоит уже давно;
      • для зависимых полей пока есть простой js-клаcс сверяющий их.
      • drag&drop файлов давно уже работает без JS;
      • для подгрузки изображений в страницу на стороне клиента js-класс.

    2. Стили:
      • один раз прописаны стили для разных-форм на уровне тегов и взаимоотношений тегов (в итоге все формы на сайте виглядят в одном стиле);
      • класы только для самой формы, определяет как одна выводится: локально, модально или в теле контента;
      • кому сложно написать 300 строчек CSS, пользуйтесь фреймворками;
      • ни в коем случае не делайте стили форм для каждого раза как онные встречаются (придет дядя даст по рукам :) ).

    3. Отправка:
      • пользуйтесь action, submit и target;
      • нужны данные как модальное окно есть iframe;
      • ajax с формами не использую он изначально предназначен для другого:
        • для подгрузки полей в селектор, но только если селектор очень большой;
        • для поиска налету.


    4. Сервер:
      • использую специальный статический класс, который делает валидацию и XSS/injection-очистку;
      • как минимум PDO с подготовленными запросами;
      • Doctrine;

    5. База-данных:
      • наименования полей в базе соответствуют наименованиям полей в формах (с префиксом);

    Ответ написан
    1 комментарий
  • Где найти клиентов для разработки HTML5-решений?

    Zifix
    @Zifix
    Barbatum
    Ребят, ну чего вы как маленькие, идите к веб-студиям и предлагайте, одна из сотни-то согласится. Идите на фриланс и предлагайте, если востребовано — купят. Не можете сами — наймите продажника. Сформулируйте несколько разных предложений, давайте рекламу, смотрите на что отклик будет больше.
    Ответ написан
    Комментировать
  • Где найти клиентов для разработки HTML5-решений?

    vigame
    @vigame
    На Западе.
    *** добавлено ***
    Возьмите (скопируйте) страницу сайта у какого-нибудь крупного клиента: банка или торговой сети. Встройте свое веб-приложение. Покажите ему. Если действительно сделаете, что-нибудь крутое, то они скорей всего купят и разместят у себя. Дальше по аналогии.
    Ответ написан
    Комментировать
  • Desktop или Web?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    • лучший в мире продукт по управлению проектами - Microsoft Project
    • любой офисный пакет (шо, гугл док? ну вставь туда формулы или сводные тыблицы)
    • все продукты Adobe
    • спец софт Trados, Promt, Autocad, Ansys, OCRы
    • софт для говнарей (типа finalCUt или от sony там что-то есть)
    • продукты 1С (заприте в конце квартала, а лучше - в конце года, бухгалтера и этого из Центра технологий, посмотрите, кто выживет)) )

    НИ-КОГ-ДА не будут иметь ВЕБ-интерефейса, скорее, как роботы, будут работать без человека
    однако это не отменяет сетевых-коммуникаций, которые через Vlan/VPN соединяются в разлчных офисах через

    поэтому первый вопрос - не состоятелен

    на второй - ответьте сами, перечитав список и написав такой же для Веб - приложений

    а вот с третьим сложнее - дело в том, что на фрилансе найти работу, за которую хорошо платят (на буржуев) гораздо проще с ВЕБ технологиями. Субьективно - 90/10.

    Если я правильно понял - Вы хорошо знакомы с продуктами Микрософт? Так и развивайтесь в этом направлении - MS SQL, по отзывам техлида, которому доверяю - лучшая СУБД которая только есть, офисные продукты (SharePoint etc.) прочно занимают свою нишу и требуют поддержки.

    Если же очень хочется именно в Веб и тоже поближе к корпоративному - Java
    Ответ написан
    2 комментария
  • Desktop или Web?

    На С# в веб делать тоже нечего.
    Определять нужно веб-приложение или десктоп зависит от множества факторов:
    1. Безопасность (дубль на десктопе спокойнее)
    2. Доступность (evernote и без интернета можно открыть)
    3. Сложность (фотошоп в вебе нормальный ещё не придумали как и 3D-редактор)

    Я сам работаю на трёх ПК и конечно меня парит устанавливать нужное ПО на каждый из них, поэтому я обоими руками за веб-приложения.
    Сейчас все кинулись делать мобильные приложения, но и на них мода пройдёт, непонятно зачем фитнес-приложение или приложение СМИ ставить себе на телефон ведь вести программу тренировок и читать новости я и в вебе могу.
    Ответ написан
    5 комментариев
  • Desktop или Web?

    @nirvimel
    Во-первых: Разработка под веб != PHP.
    Во-вторых: Грамотного проджект менеджера он неграмотного отличает способность делать обоснованный выбор технологий для каждого проекта не по советам преподавателя какого-то курса (насколько бы уважаем он не был), а исходя из специфики задачи (главное!) и (иногда) из наличия/отсутствия разработчиков с соответствующей квалификацией или наличия/отсутствия соответствующей квалификации у разработчиков (или разработчика).
    Да, есть такая тенденция, что десктор-приложения постепенно вытесняются веб-приложениями. И причины в основном кроются в, я бы сказал, "негибкости" десктор-разработчиков. Уцепившись за какую-то одну технологию (например .NET) они часто забывают, что их клиентское приложение - всего-лишь пользовательский интерфейс к бизнеслогике на сервере. Задача клиента - быть гибким, то есть не зависеть от окружения, в котором приложение запущено. Веб-приложения на 100% удовлетворяют этому требованию, они работают в любом (современном) браузере, под любой ОС, на любой мобильной/стационарной платформе и не требуют никакой предварительной подготовки среды (типа установки java, silverlight или adobe <очередная их платформа>). И только этим они побеждают. Для разработчиков по настоящему кроссплатформенных приложений (включая мобильные платформы), не завязанных на какую-то специфическую технологию (особенно проприетарную) и нетребовательных к среде исполнения, угроза со стороны наступающего веба - минимальная. Они еще долго будут спокойно сосуществовать рядом с веб-приложениями и ни один руководитель не упрекнет команду разработчиков в их выборе.
    Ответ написан
    1 комментарий
  • Какие существуют алгоритмы зашумления/искажения изображений?

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


    + последовательное объединение перечисленных выше алгоритмов
    Ответ написан
    1 комментарий