• Кто-нибудь пробовал использовать Raspberry Pi + Z-Wave (для умного дома)?

    @tangro Автор вопроса
    Если кому интересен финал истории — купил, всё работает, рекомендую.
    Ответ написан
    Комментировать
  • Как сайт может узнать id пользователя в соц. сети?

    @djerom
    Обновил, может кому пригодится
    <html>
    <head>
    	<script src="//vk.com/js/api/openapi.js" type="text/javascript"></script>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
    <script>
    window.onload = (function() {
        VK.init({
              apiId: 4983778 //ВАШ_IP_ID
            });
        function authInfo(response) 
        {
          if (response.session)
          {
            document.getElementById('id').innerHTML = "Your ID: " + response.session.mid;
          } 
          else 
          {
            document.getElementById('id').innerHTML = 'Вы не авторизованы вконтакте.';
          }
        }
        VK.Auth.getLoginStatus(authInfo);
    });
    </script>
    <div id='id'></div>
    
    </body>
    </html>
    Ответ написан
    5 комментариев
  • Как могут взломать базу данных MySQL?

    @Z1odeypnd
    Здравствуйте.
    Технологий взлома уйма.
    В зависимости от того, какие привелегии получил "хакер" при вломе вашей БД - зависит очень много.
    Если он получил доступ только на чтение, то захешированные в MD5 пароли ему мало чем помогут, т.к. MD5 не имеет алгоритма обратной расшифровки и хэширование спасёт тем, что взломщик получивший доступ на чтение паролей - самих паролей не получит (есть конечно словарь MD5 хешей, то это другая история).
    Вообще для защиты любой БД есть несколько золотых правил:
    0. Переименовать дефолтного админа и защитить его сложным паролем.
    1. Для каждой БД должен создаваться свой владелец и несколько пользователей с разными наборами привелегий.
    2. Ни у одного из пользователей, созданных в п.1 не должно быть прав на изменение таблиц в соседней БД.
    Если есть необходимость обновлять соседние БД - делайте это триггером в соседней БД.
    3. Каждый внешний веб-сервис должен ходить в БД только с тем набором прав, которых ему достаточно для работы. Т.е. не нужно везде прописывать root и надеяться на лучшее.
    В этом случае, если взломщик получит привелегии этого пользователя, то сможет сделать только то, что разрешено этому пользователю. Тогда не выйдет "удалить все и сразу".
    Например, для наполнения католога товаров в интернет-магазине может быть отдельный пользователь, с правами на SELECT, INSERT, UPDATE, DELETE в таблице SHOP_PRODUCTS, например. И ничего более.
    А пользователи, приходящие в магазин за покупками могут делать SELECT, INSERT, UPDATE, DELETE только в таблицу CUSTOMER_CART. В коде веб-сервиса, естественно должна быть проверка, что покупатель редактирует СВОЮ корзину.
    Для показа каталога товаров - отдельный пользователь, имеющий право только на SELECT из таблицы SHOP_PRODUCTS.
    А продажу товара может делать отдельный пользователь, с правом только на UPDATE колонки AMOUNT в таблице SHOP_PRODUCTS. Пример:
    GRANT SELECT ON shopdb.SHOP_PRODUCTS TO 'trader_bot'@'shophost';
    GRANT UPDATE (AMOUNT) ON shopdb.SHOP_PRODUCTS TO 'trader_bot'@'shophost';

    И т.п. По принципу "Разделяй и властвуй."
    4. Писать запросы с использованием placeholder'ов (подстановку данных), что убережёт от SQL-инъекций.
    Пример:
    $DB->select('SELECT * FROM tbl WHERE a=? AND b=?', $a, $b);

    5. Если и БД и приложение, используещее БД установлены на одном сервере - отключить удалённый доступ к БД и работать через сокеты.
    6. Последний, но самый важный - БЕКАПЫ. При удалении всего и вся - нужно откуда-то восстановиться. Делайте бекапы и храните на отдельном сервере (не выставленном наружу).
    Ответ написан
    3 комментария
  • Как в строке оставить только кириллицу?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Файл должен быть в кодировке Unicode UTF-8 и в регулярке /[^а-я ]/u
    Ответ написан
    5 комментариев
  • Как оптимизировать видео, вставляемое в качестве фона?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Уменьшите битрейт и разрешение видео.
    Переместите метаданные в начало mp4 контейнера
    Установите preload="metadata"
    htmlbook.ru/html/video/preload

    Чтобы пиксели в глаза не бросались наложите на видео сеточку из маленьких черных точек
    https://jsfiddle.net/soumyabg/wefLyrhp/
    css background dotted overlay
    Ответ написан
    5 комментариев
  • Есть ли аналог Remmina под Windows?

    @glebofff
    Для только rdp - есть rdtabs. Очень удобная штуковина.
    Ответ написан
    Комментировать
  • Научиться парсингу - с чего начать?

    @Unknown007
    Отличная библиотека для парсинга сайтов - grab. Правда, на питоне. Самому пришлось изучить python только ради использования этой библиотеки, и не пожалел - удобный язык, как и библиотека - делаете запросы на xpath и сохраняете результаты:
    g = Grab(log_file='parse_log.html')
    g.go(url)
    pages_block = g.doc.select('//div[contains(@class,"pager")]/div[contains(@class, "pages")]')
    if pages_block:
        pages = pages_block.select('.//li/a[not(@title="Next" or @title="Previous")]')
        page_hrefs = []
        for page in pages:
            href = page.node.attrib['href']
            page_hrefs.append(href)
            print "Page: %d" % int(page.text())
    Ответ написан
    4 комментария
  • Научиться парсингу - с чего начать?

    @kryvel
    Системный администратор
    Для парсинга я бы посоветовал использовать Python. Он довольно гибкий и простой в изучении. И для этих целей подходит как нельзя лучше. Особенно если нужно парсить динамический контент (AJAX, javascript и постзагруза)
    Альтернативой здесь может быть Java, но это слишком сложно для начинающих
    Можно использовать такую связку:
    Python, Selenium+phantomjs ( загрузка страниц ), beautifulsoup (парсинг html), pymysql (для выгрузки в ДБ).
    Если контент статический то все еще проще - Python + beautifulsoup
    Работает все очень быстро. А главное api очень интуитивное и разобраться в функционале очень легко.
    Ответ написан
    Комментировать
  • Как может заработать чистый математик?

    @spr53
    Позволю себе немного дополнить предыдущие ответы цитатой:

    "Любая новая область деятельности порождает новые профессии. Специалист по работе с данными, Data Scientist, и специалист по машинному обучению – это новые самые завидные специалисты будущего. Они – не программисты. Это великолепные математики с большими кросс-дисциплинарными знаниями и суперспособностью к анализу, подкрепленной упорством – потому что шансы с первого раза найти идеальную формулу для обучения искусственного интеллекта близки к нулю. Они должны отыскивать среди всех существующих алгоритмов тот, который лучше подходит для решения задач проекта и понимать, когда что-то идет не так, что именно идет не так."
    Ответ написан
    Комментировать
  • Какую библиотеку использовать для написания парсинга и сайт бота на Python?

    Gasoid
    @Gasoid
    Заточенные под парсинг:
    grablib (поддержка прокси, многопоточность, сессии, смена агента, и т.д.)
    scrapy

    Ну или руками как выше написали:
    requests, lxml, soup
    Ответ написан
    Комментировать
  • Как верстальщику сделать пассивный доход?

    @private_tm
    JAVA dev
    Реально ток смотри бурж сайты и ориентируйся на то что там продаеться. (тефорест, теам монтсер, кодеканйон и тому подобных). У нас пока мало кто дошол чтоб за это деньги платить проще скачать в нете или на торентах платную тему бесплатно(п.с на ру аудиторию лучше не работать ).
    Ответ написан
    Комментировать
  • Что нужно знать php разработчику для изучения фреймворка? Ваше мнение?

    iCoderXXI
    @iCoderXXI
    React.JS/FrontEnd engineer
    За любым фреймворком лежит опыт и мировоззрение его разработчиков. У любого фреймворка есть глубинная философия, его смысл, для чего он создан, какие проблемы решает, в каком контексте. Не смотря на то, что, казалось бы, разные фреймворки решают набор примерно одних и тех же проблем, делают они это очень по разному.

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

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

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

    И вот тут, чтобы действительно справляться, необходимо ПОНИМАТЬ, как это работает, почему так а не иначе, и как с помощью этого решать поставленные задачи. Если чего-то не хватает, или оно работает не так как надо, а это весьма частые явления, то ПОНИМАНИЕ процессов дает свободу РЕШАТЬ эти тупиковые, казалось бы, вопросы.

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

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

    Я сильно сомневаюсь, что даже многие из тех, кто сегодня зовутся синьорами, в достаточной степени владеют контекстом.

    Возвращаясь к фреймворкам - освоение фреймворка следует, на мой взгляд, начинать с ознакомления с контекстом, в котором функционирует фреймворк, и с глубинной философией, заложенной в его архитектуру. Только поняв зачем и как, можно надеяться уверенно применять инструмнет в своих целях.

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

    В результате я плюнул на тщетные попытки, и просто, из проекта в проект, собрал свой мини фреймворк, который решает задачи в том контексте, который выработался за годы у меня, решает понятным и прозрачным для меня способом, под полным, 100% контролем с моей стороны.

    Сейчас же я взял паузу, и намерен полностью мигрировать с PHP на JavaScript. При всей моей любви и уважении к PHP, в нем определенные вещи даются слишком большими усилиями, так-что игра не стоит свечей.
    Ответ написан
    1 комментарий
  • Чем зашифровать/обфусцировать код php (бесплатные решения)?

    Stalker_RED
    @Stalker_RED
    Например www.phpprotect.info
    Не самый "запутанный" код, но довольно быстро и бесплатно.
    Ответ написан
    1 комментарий
  • Как правильно написать авторизацию/аутентификацию?

    dasha_programmist
    @dasha_programmist
    ex Software Engineer at Reddit TS/React/GraphQL/Go
    Есть два варианта хранения данных об авторизованном пользователе:
    1) В куки (так по умолчанию используется в асп.нет): необходимые данные (claims) шифруются machineKey и отдаются пользователю в http-only куках, таким образом при каждом запросе на сервер они присылаются, расшифровываются и далее можно проверить в необходимых местах.
    плюсы: полностью stateless, нет надобности обращаться к БД
    минусы: при необходимости "выбить" сессию со стороны сервера нужно поднимать более сложную логику и хранить флаги в промежуточном хранилище (проверять что если для такого-то пользователя требуется завершить, то такие действия, иначе другие);
    2) Ключ сессии: после успешной аутентификации авторизуем пользователя и claims храним на сервере в быстрой памяти или БД (key-value), где ключ - ключ сессии, значение - любые данные.
    плюсы: есть полный контроль состоянием авторизации (как и возможность завершить сессию со стороны сервера, так и сменить пользователю роль(или другие параметры) "на лету")
    минусы: организация доп. прослойки - кэша или хранение в БД (медленно), при перезапуске/падении сервиса сессии клиентам потребуется перелогиниться.

    1
    1.1 В куки писать или ключ сессии или шифрованные данные о пользователе, сессия - абстрактное понятие (это пара: ключ и данные), ключ должен быть защищенным, т.е. трудным к копированию (хотя бы зрительно трудно запомнить), уникальным (чтобы не возникло коллизий: двум разным пользователям выдался один и тот же ключ, т.е. это не должна быть хэш-функция от логина-пароля или IP или чего-то неуникального).
    1.2 В асп.нет существуют атрибуты авторизации (в которых можно расставлять проверки на требование таковой, роль, конкретный пользователь), в общем смысле логика такова: поступил запрос на сервер, далее нужно посмотреть к какому ресурсу идёт обращение (защищенному или свободному), если ресурс защищен, то проверить куки (ключ сессии или шифрованные данные), расшифровать/получить данные о сессии из кэша и предпринять решение: пускаем или не пускаем (отдаём 401/403 или отдаем 200/404/...).
    1.3 Завести на сервере (в кэше или БД) словарь , при алгоритме проверки сессии добавить условие проверки на наличие записи в словаре.
    1.4 С нескольких - словаря не нужно.

    2
    2.1 Даже если пользователь входит через ВК всё равно нужно отдавать свои ключи сессий/шифрованные данные, а вот внутри данных уже хранить access_token от вк-шной сессии, так очень маленькая вероятность, что токен ВК утечет, а если утек ключ сессии, то действия будут ограничены только функционалом сайта.
    2.2 После расшифровки куки или данных по ключу сессии делать доп запрос на сервер ВК с токеном, который сохранился при аутентификации (access_token), запрос простой, например получить имя пользователя, если ВК выдал что токен просрочен или ошибку, то сессию закрывать или куки с данными обнулять.
    Ответ написан
    3 комментария
  • Где заработать портфолио?

    ManWithBear
    @ManWithBear
    Swift Adept, Prague
    Вы наверное не знаете. Но у вас уже есть один идеальный и не привередливый заказчик, которого вы к сожалению выпускаете из виду и обделяете вниманием. Это ВЫ САМ.
    Ответ написан
    4 комментария
  • Как написать универсальный парсер для множества однообразных сайтов?

    @Stasy_sin
    У меня много косяков в парсинге выходит, вчера напала на вебинар, может можно записаться тем, кто у него не постоянно учится https://dmitrylavrik.ru/php-parser
    Ответ написан
    Комментировать