• Правильно ли я понимаю суть RESTFul?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Есть хорошая статья: habrahabr.ru/post/204958
    Если кратко: на чистом REST не получится сделать сложную бизнес логику.
    Ответ написан
    Комментировать
  • Реализация функционала сайта. Как делать это правильно?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Хранить html как мне кажется точно не лучшая идея.
    Я бы сформулировал все возможные типы уведомлений, предполагается ли по ним поиск, и в зависимости от того насколько они различные уже думал. Вариантов может быть море:
    1) если уведомления однотипные - поля в базе (условно event_type, date, user_id, post_id итд)
    2) если уведомления частично однотипные - часть полей в общей базе (event_type, user_id, date), а часть
    2.1) в виде json объекта в строке
    2.2) в виде отдельной таблицы на каждый event_type с доп полями
    3) какие то денормализированные варианты.
    Мы делали однажды очередной клон инстаграма, уведомлений было море - мы хранили сами события в sql, а в redis хранили для каждого user список id уведомлений которые он должен увидеть.
    Ответ написан
    2 комментария
  • Front-end или back-end, как вы определились?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Depends от того что Вам вкладываете в понятие "работу от которой я бы был доволен".
    Если речь идет про сложную математику - то её в вебе действительно очень мало.
    Навскидку распознавание голоса, изображений, pathfinding какой то, анализ bigdata.

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

    Это очень обманчивое заблуждение.
    Сложная логика появляется там где есть сложные бизнес требования.
    Если под интернет магазином подразумевается 3 продажи в день - то тут вообще программировать не нужно, любого готового движка хватит.
    А вот если это какая нибудь условная www.lamoda.ru - со своим достаточно нелинейным маркетингом, своей системой складского учета, своей системой автоматизации и оптимизации логистики итд - там в штате ~300 разработчиков сидит, а задача "вывести из базы товары" трансформируется в 100 страничное тз кому, когда и какие товары надо выводить.
    Ну и от нагрузки многое зависит. Сделать систему которая бронирует 1 квартиру в секунду и 1000 квартир в секунду - принципиально разная сложность и объем кода.
    Ответ написан
    1 комментарий
  • Почему не все серверы пишутся на 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 комментариев
  • Какой из способов безопасного хранения критически важных переменных оптимален?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Поймите, все утечки которые происходят - в 99% это не exploit, а тупо человеческий фактор.
    Все решения с конфигами сервера, ORM и прочим - абсолютно бессмысленны когда вашему сисадмину подарят новый X6 и он сольет дамп сервера целиком.

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

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

    Решение 1:
    Пишем хранимку которая отдает связанные логины-пароли от внешнего сервиса по логину-паролю от нашего мульти-мессенджера.
    Доступ к изменению хранимки и к базе в которой лежат все пароли есть у 1 человека в компании. Остальные тупо ходят через хранимку. Способа получить полный список логинов-паролей сервиса не существует.

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

    Решение 2:
    Разделяем каждый пароль от внешнего сервиса на N частей (N >= 3)
    Дублируем решение 1 на N серверов, каждый пароль получается размазан на N серверов.
    Первоначальная хранимка занимается тем что собирает данные из N хранимок с N серверов.
    У каждого сервера - свой ответственный человек. Доступ к каждому серверу есть только у ответственного и у bigboss (на случай внештатных ситуаций).

    Решение достаточно дорогое и по людям и по железу и по скорости работы - но я за всю свою трудовую деятельность, так и не увидел ничего лучше.
    Ответ написан
  • Как использовать поле класса в SQL запросе?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Ой ёёёё.

    1) Зачем Вы создаете класс для работы с базой данных который четко завязан на 1 таблицу?
    Создайте общий класс для работы с базой, от него наследуйте класс модели для конкретного функционала.
    Советую почитать про MVC.
    Вообще сама идея передачи названия таблицы какая то странная. У Вас много таблиц в которых лежат юзеры?

    2) Никогда не используйте оператор подавления ошибок "@"
    Код
    @mysql_query("set_character_set_client='utf8'");
        @mysql_query("set_character_set_results='utf8'");
        @mysql_query("set collation_connection='utf8_unicode_ci'");
    абсолютно бессмысленный, он не выполняется - тут внезапно mysql, а соединения в mysql то и нет, соединение в mysqli

    3) Никогда не передавайте данные в базу без обработки. Все данные должны быть как минимум обернуты в mysqli_real_escape_string. Ну или PDO используйте
    Ответ написан
    2 комментария
  • Как хранить токены пользователя?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Шифровать не получится. Plain text.

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

    upd смежный вопрос:
    Какой из способов безопасного хранения критически важных переменных оптимален?
    Ответ написан
    2 комментария
  • ФИАС SQL, от куда взять?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Не знаю кто такие эти ваши basicdata.ru, есть официальный сайт:
    fias.nalog.ru/Public/DownloadPage.aspx
    1. Скачайте полную версию в dbf.
    2. Любым конвертером например https://github.com/xtranophilist/dbf2sql сконвертируйте в sql.
    3. ????
    4. PROFIT
    Ответ написан
    Комментировать
  • Как сделать авторизацию для сервера с API?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Например считать хеш с солью по данным каждого запроса.
    Совсем хорошо соль считать динамически от времени например.
    И всё это по https обязательно.

    Захотят вскрыть - вскроют, но уже с геморроем.
    Ответ написан
    Комментировать
  • Критично ли отсутствие ИП/ООО у web-разработчика для поиска клиентов?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Если заказчики юр.лица - 99% комфортней заказывать у юр.лица.
    В целом наличие юр.лица придает некую серьезность в глазах людей далеких от IT.
    UPD
    С чего такие заблуждения? Самая главная причина, это списание средств со счёта юр лица. В налоговую нужно принести бумажное подтверждение траты этих денег. И просто вася с улицы, это геморрой списывания на левые траты этих денег. А ИП или ООО даст нормальные акты, договор. Всё с печатями. Налоговая довольна, заказчик не ломает голову, как снять со счёта юрика денег, для оплаты работы васи.
    А вот Петя умный. Петя готовит типовой договор подряда на свои услуги. Договор подряда между физ лицом и ИП, физ лицом и ООО. И сразу говорит об этом заказчику. Тогда заказчик не ломает голову, как оплатить работу. Ибо договоры подряда "не привычны" многим заказчикам. Они привыкли работать с юрлицами и тупо забыли/не знают о договорах подряда.

    А еще "умный" Петя стоит примерно на 30% дороже чем его конкуренты с юр.лицом. Потому что 13% НДФЛ, 22% ПФ, 2.9% ФСС и 5.1% ФОМС явно проигрывают схеме с ООО (6+9 легально или 6+7 не совсем легально), не говоря уже про ИП. (крайне актуально как для компаний с ограниченным бюджетом (берегут каждую копейку), так и для дорогих проектов (сумма отличий в абсолютных значениях будет велика))

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

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    imho:
    1. Портфолио собрать обязательно. Выложить на любой сайт - можно на https://www.behance.net/ , можно на тот же https://moikrug.ru/
    2. Теряюсь от вопроса. Если он работает в сфере где доступ к фотобанку нужен - почему у него его до сих пор нет?
    3. Надо посмотреть по основным где есть в текущий момент поток заказов актуальной тематике и идти туда.
    Сразу покупать "PRO" нужно.
    Любые сайты визитки, они же портфолио нужны исключительно как ссылки которые можно послать клиенту.
    Для получения денег нужно иметь минимум:
    • счет в банке
    • яндекс деньги
    • Webmoney
    • qiwi кошелек
    Всюду где сервис предусматривает привязку к персональным данным - лучше привязаться иначе замучают лимитами.
    ИП не нужен пока у вас нет объемов хотя бы в 200-300к в месяц.
    Ответ написан
    Комментировать
  • Как правильно сформулировать ТЗ по дизайну сайта?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Абсолютно то что вы сейчас написали в качестве вопроса и является простейшим тз.
    Вот сайт на joomla, вот шаблон который должен работать.

    UPD
    А сколько это стоит обычно? Я вижу, что шаблон с нуля по картинке в psd стоит в районе 5 тысяч, но там же надо все с нуля делать, а тут уже все готовое, только копируй код из html, css и скриптов. Это должно удешевлять работу?

    RadialAdmin: вопрос сколько стоит бессмысленный. Работа стоит столько, за сколько её готовы выполнить на свободном рынке с устраивающим заказчика качеством.
    Зависит от квалификации специалиста и его самооценки.
    Создайте задание с открытой ценой, да выберите из ответов.
    Ответ написан
    3 комментария
  • Стоит ли исправлять предупреждения интерпретатора PHP?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Я в шоке от того что люди на полном серьезе задают такие вопросы.
    Единственный вариант который имеет право на существование: на локальных, тестовых и прочих не продакшен серверах вывод всех ошибок и нотисов является строго обязательным, как и их исправление.

    Напомню, что при включении предупреждений выводятся сообщения о необъявленных переменных и индексах массивов.

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

    Мало того что ошибки нужно исправлять, по хорошему код нужно писать с обработкой exception и логикой "что делать если что то вдруг сломалось".
    Единственное место где вывод любых ошибок должен быть отключен для пользователя (но они все равно должн ы логироваться, обрабатываться и исправляться) - это production.

    PS
    Больше приходится писать код, меньше сил остаётся на разработку.

    Разработка это и есть написание кода который максимально правильно работает при любых внешних условиях.
    Ответ написан
    2 комментария
  • Как защитить свою разработку?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    saas.
    иначе - никак.
    Ответ написан
    Комментировать
  • Как подружить фискальный регистратор с браузерной CRM?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    В общем случае пишется маленькая десктопная софтинка которая ставится на компьютер клиента, висит в фоне, тем или иным способом (вебсокеты, http long polling) получает от Сервера информацию о том что нужно печатать, ну и собственно печатает.

    По моему опыту в давние времена(возможно с тех пор что то стало лучше) производители фискальников по запросу высылали .dll и даже примеры кода. Зачастую эти dll различались даже между разными моделями одного производителя. Соответственно вопрос поддержки разных фискальников - решается хардкодом в этой софтинке определенного списка поддерживающихся dll и разных реализаций печати в них, включая как фискальные заморочки, так и разную ширину печати, ограничения по максимальной длине, etc

    Я честно говоря от этой темы несколько отстал, последний раз занимался лет 10 назад.
    Мне кажется стоит начать с определения списка поддерживаемого оборудования и обращения к их поставщикам/дилерам.
    Ответ написан
    4 комментария
  • Как сделать такое с помощью Open Street Map на сайте?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    С картами OSM умеет работать например leafletjs.com
    На близком зуме то что Вы видите называется кластеризацией (cluster) - пример https://www.mapbox.com/mapbox.js/example/v1.0.0/le... или любой другой плагин
    На высоком зуме - тепловой картой (heatmap) - пример https://github.com/Leaflet/Leaflet.heat
    В зависимости от уровня зума метки скрываются а слой с тепловой картой выводится и наоборот.
    Ответ написан
    Комментировать
  • Как конвертировать базу данных MySQL сайта на Wordpress из utf8mb4_general_ci в utf8_general_ci?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1. уйти с этого хостинга нафиг. Иметь меньше чем 5.5 западло imho
    2. если уже совсем надо - откройте свой дамп любым текстовым редактором и замените строку "CHARSET = utf8mb4" на "CHARSET = utf8"
    Ответ написан
    2 комментария
  • Попрет ли авторизация без входа в аккаунт (через email)?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Риск изначального ввода не верного email с последующей потерей возможности что то делать со своим объявлением. Лучше прозрачно регистрируйте&авторизируйте пользователя при создании первого объявления.
    Ответ написан
    Комментировать
  • Должен ли знать php-разработчик популярные CMS?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    Хотите работать в местах где пишут на cms - учите cms.
    Вот и весь ответ.
    Ответ написан
    Комментировать