• Какова суть генерации своих событий в JavaScript?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Попробую на пальцах объяснить.

    Событие – это конверт, на котором написано его название. Внутрь конверта можете вложить что-нибудь, а можете оставить конверт пустым.

    Элемент – это столик. Кто угодно может подойти и положить на столик свой конверт.

    Слушатель – это мужик, который топчется около столика и смотрит, нет ли чего с интересующим его названием. Может несколько человек поджидать конвертики с определённым названием – прочтут все, если только в конверте не написано «по прочтении съесть» – тогда кто-то съест и дальше не передаст.

    Как создать/отправить конверт. В любом месте кода создайте конверт и дайте ему название: var myEvent = new Event('teaTime'); Остается положить конверт на нужный столик:
    document.getElementById('stolik').dispatchEvent(myEvent);


    Чтобы в событие вложить какие-то данные, нужно использовать другой конструктор и передать нагрузку в поле detail:
    var event = new CustomEvent('saySomething', { detail: "Hello there!" });


    Для чего нужно создавать свои события? Чтобы развязать куски кода. Например, в разных местах документа можно нажать на кнопку повторяющегося виджета. Виджет создаст на document событие "widgetClicked". А ещё несколько одинаковых компонентов в странице, слушающих document на предмет события "widgetClicked", получат пинок и что-нибудь вытворят.
    Ответ написан
    2 комментария
  • Как с Facebook извлечь данные (парсинг/api)?

    @megastudio
    Касательно парсинга данных - не всегда это есть нарушение, поскольку если вы никак негативно не влияете на программное обеспечение Facebook + не совершаете действий, направленных на получение приватной информации пользователей, которая не открыта общественности либо вам, то абсурд трактовать такие действия противоправными (равносильно судить сервисы-агрегаторы, тот же самый Google за сбор базы в сети). Если ваша "жертва" осознанно сделала данные доступными всем - значит это не есть приватные данные.
    Мой опыт сбора баз из ФБ говорит, что крайне не стоит использовать парсер Facebook, который десктопный - в моем случае пришлось докупать прокси + были большие проблемы с нагрузкой на компудактер. Среди web-решений, могу выделить b2b-group.xyz (то, что пользую лично), по другим решением слышал об API Ulitka, но не находил сайт сего чуда Как-то так :-)
    Ответ написан
    1 комментарий
  • Загрузка файла в хранилище Postgres без прав суперпользователя на PHP?

    @alexalexes
    Если нельзя управлять пользователями, то нужно создать такое приложение, которое может подключиться от имени другого пользователя с нужным набором прав.
    Только это приложение должно быть запущено на сервере на постоянной основе и уметь обмениваться по http с PHP через curl.
    Ответ написан
    1 комментарий
  • Для парсера с поддержкой JavaScript, кукисов какую связку посоветуете?

    @Verz1Lka
    Web scraping expert
    В scrapy всё это можно запихать
    Ответ написан
    Комментировать
  • Как устроена авторизация по паролю в web-приложениях?

    @Alexander1705
    Обычно разделяют сессии и авторизацию:

    Сессия. Чтобы реализовать сессии сервер при первом соединении с клиентом может генерировать некоторый случайный токен и устанавливать его в куки. Тут важно, что куки должны передаваться по защищённому каналу (HTTPS). Таким образом можно сохранять некоторую информацию о сессии в базе данных или же в самих куки, но тогда нужно подписывать куки, чтобы пользователь не мог их изменять.
    В любом случае, сервер будет хранить информацию о активных сессиях в БД.
    Подписать куки можно, например, добавив в них помимо нужной вам информации какой-нибудь HMAC.

    Авторизация. Сервер никогда не хранит пароли. В базе данных хранят логин и хеш пароля (на самом деле нет). Для авторизации пользовтель передаёт логин и пароль (HTTPS). Сервер вычисляет хеш от пароля и, если он совпадает, сессия помечается как авторизованная.

    Соль. Теперь представим, что вы действительно храните логин и хеш пароля в таблице:
    login | pass_hash
    ------+----------
    vasya | 4B32E1C...

    В идеальном мире это бы неплохо работало. Но в реальном мире 90% ваших пользователей будут иметь пароль вида 12345, password, password123, etc. Соответственно в базе данных будет много одинаковых хешей и злоумышленнику не составит труда быстро подобрать пароли большинства ваших пользователей.
    Для этого для каждого пользователя сервер сохраняет некоторые уникальные случайные данные (соль). А вместо хеша пароля хранится hash(pass + salt).
    login | salt   | hash
    ------+--------+-----
    vasya | 4B3... | 2A3B9...

    Таким образом усложняется перебор паролей по словарю.

    Хеш. Возможно вы где-то видели или слышали про MD5. Так вот, MD5 на сегодняшний день не является надёжной криптографической хеш функцией и даже если вы примените MD5 сто или тысячу раз, это не сильно изменит ситуацию. На сегодняшний день рекомендуется использовать SHA-2 или SHA-3.

    P. S. Соль и токены обязательно должны быть сгенерированы с помощью CSPRNG.
    Ответ написан
  • Абстракция в JavaScript?

    @TimurBaiguzhaev
    Backend Golang Developer
    Помните, как родители заставляли вас играть на фортепиано или учить стихи?.. Так вот, Абстрактные классы также как и многие родители вовсе и знать не знают зачем ребенку-потомку это будет нужно, и как он это будет использовать, но уверены, что так НАДО! Т.е. такие классы содержат абстрактные методы, которые являют собой объявление метода без самой реализации, как фантик без конфетки, тем самым обязывая потомка, этот метод реализовать. Как и в жизни, где родители нередко перекладывают на детей свои нереализованные мечты…

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


    Источник : habrahabr.ru

    Abstract classes in JavaScript
    Ответ написан
    Комментировать
  • Как сделать интерактивную карту?

    dummyman
    @dummyman
    диссидент-схизматик
    Есть такой фреймворк openlayers
    Вот ссылка на пример openlayers.org/en/latest/examples/select-features.html
    там разделение по государствам, нужно будет вместо https://openlayers.org/.../geojson/countries.geojson составить свой файл geojson по областям
    Данные берем отсюда gis-lab.info/qa/osm-adm.html
    Стили карт берем тут https://www.mapbox.com/maps/
    15-30 минут на все и карта готова.
    Ответ написан
    2 комментария
  • Какой js - компонент типа TreeGrid (функционал дерева + таблицы) посоветуете?

    devspec
    @devspec
    Помогло? Отметь решением
    https://paramquery.com/demos
    не совсем "дерево", но есть возможность настроить иерархический вывод
    Ответ написан
    Комментировать
  • Как к bigint из базы прибавить число без потерь?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Получать из базы сразу число+1
    Ответ написан
    Комментировать
  • Как к bigint из базы прибавить число без потерь?

    Melkij
    @Melkij
    PostgreSQL DBA
    Либо используйте 64-битный PHP.
    php > $a = 1122333399002222;
    php > $a += 1;
    php > var_dump($a);
    int(1122333399002223)
    Ответ написан
    3 комментария
  • Как к bigint из базы прибавить число без потерь?

    nazarpc
    @nazarpc
    Open Source enthusiast
    Есть вариант написать свою функцию для такой простой операции. Разве сложно пройтись циклом по символам от последнего до первого?
    Ответ написан
  • Как с Facebook извлечь данные (парсинг/api)?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Через Graph API это сделать нельзя. Только парсинг, что означает автоматическое нарушение соглашения использования Facebook со всеми вытекающими последствиями.
    Ответ написан
  • Как быстро сформировать сложный Excel-документ?

    PQR
    @PQR
    На тостере есть похожий вопрос по оптимизации генерации Excel из PHP, посмотрите, там дельные ответы: Оптимизация генерации excel из php?

    Расскажу также свою историю, не про запись, а про чтение большого Excel файла (несколько десятков страниц, на каждой странице 1000+ строк * 30 столбцов). PHPExcel работал но медленно. Классическая PEAR библиотека оказалась быстрее в 2 раза, но и она в итоге отрабатывала за 60+ секунд (время чтения xls файла в память PHP). Поскольку входной формат файла был известен заранее, я открыл исходники и начал выпиливать оттуда фишки, которые мне не нужны, удаляя лишний код! Некоторые функции вручную инлайнил. В итоге время чтения сократилось до 5 секунд. Резюме: если формат зафиксирован и гибкость не нужна, узкозаточенное решение (после некоторых усилий по заточке) даст хороший результат!

    Также на этот вопрос есть классический ответ на StackOverflow, который собрал все альтернативы: stackoverflow.com/questions/3930975/alternative-fo...

    Процитирую здесь, чтобы далеко не ходить или на случай если stackoverflow.com будет не доступен (валидность всех ссылок не проверял):

    For Writing Excel

    PEAR's PHP_Excel_Writer (xls only)
    php_writeexcel from Bettina Attack (xls only)
    XLS File Generator commercial and xls only
    Excel Writer for PHP from Sourceforge (spreadsheetML only)
    Ilia Alshanetsky's Excel extension now on github (xls and xlsx, and requires commercial libXL component)
    PHP's COM extension (requires a COM enabled spreadsheet program such as MS Excel or OpenOffice Calc running on the server)
    The Open Office alternative to COM (PUNO) (requires Open Office installed on the server with Java support enabled)
    PHP-Export-Data by Eli Dickinson (Writes SpreadsheetML - the Excel 2003 XML format, and CSV)
    Oliver Schwarz's php-excel (SpreadsheetML)
    Oliver Schwarz's original version of php-excel (SpreadsheetML)
    excel_xml (SpreadsheetML, despite its name)... link reported as broken
    The tiny-but-strong (tbs) project includes the OpenTBS tool for creating OfficeOpenXML documents (OpenDocument and OfficeOpenXML formats)
    SimpleExcel Claims to read and write Microsoft Excel XML / CSV / TSV / HTML / JSON / etc formats
    KoolGrid xls spreadsheets only, but also doc and pdf
    PHP_XLSXWriter OfficeOpenXML
    PHP_XLSXWriter_plus OfficeOpenXML, fork of PHP_XLSXWriter
    php_writeexcel xls only (looks like it's based on PEAR SEW)
    spout OfficeOpenXML (xlsx) and CSV
    Slamdunk/php-excel (xls only) looks like an updated version of the old PEAR Spreadsheet Writer

    For Reading Excel

    php-spreadsheetreader reads a variety of formats (.xls, .ods and .csv)
    PHP-ExcelReader (xls only)
    PHP_Excel_Reader (xls only)
    PHP_Excel_Reader2 (xls only)
    XLS File Reader Commercial and xls only
    SimpleXLSX From the description it reads xlsx files , though the author constantly refers to xls
    PHP Excel Explorer Commercial and xls only
    Ilia Alshanetsky's Excel extension now on github (xls and xlsx, and requires commercial libXL component)
    PHP's COM extension (requires a COM enabled spreadsheet program such as MS Excel or OpenOffice Calc running on the server)
    The Open Office alternative to COM (PUNO) (requires Open Office installed on the server with Java support enabled)
    Nuovo's spreadsheet-reader (csv, xls, xlsx, and ods)
    SimpleExcel Claims to read and write Microsoft Excel XML / CSV / TSV / HTML / JSON / etc formats
    PHPExcleReader Is just a ZIP with an old version of PHPExcel
    Akeneo Labs Spreadsheet Parser OfficeOpenXML (.xlsx) and CSV files
    spout OfficeOpenXML (xlsx) and CSV
    xhook's php-spreadsheetreader Claims to do most formats
    Ответ написан
    Комментировать
  • Можно ли развернуть Docker на VPS?

    lxfr
    @lxfr
    В чем проблема?
    Если у вас есть root доступ нет проблем установить docker-engine, docker-compose и все остальное прочее и запускать как docker-контейнеры так и compose файлы.
    Ответ написан
    Комментировать
  • Можно ли развернуть Docker на VPS?

    Vadim43
    @Vadim43
    Docker отлично работает на VPS, проблем с установкой и использованием не было.
    Ответ написан
    Комментировать
  • Можно ли развернуть Docker на VPS?

    @serf
    Docker встает на OpenVZ VPS с версией ядра от 042stab105.4. Подобных VPS найти вам будет сложно, сам знаю лишь одного такого хостера. Только не пойму, зачем вам OpenVZ, когда кругом полно нормальных и доступных KVM вариантов, куда как правило можно поставить все, что угодно.
    Ответ написан
    3 комментария
  • Можно ли развернуть Docker на VPS?

    opium
    @opium
    Просто люблю качественно работать
    Вы явно не поняли суть докера, то что вы описали вообще не про докер, используйте обычную виртуализацию либо просто рсинком копируйте сервер.
    Ответ написан
    6 комментариев
  • Можно ли развернуть Docker на VPS?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    https://www.digitalocean.com/community/tags/docker...

    в подписи - фри триал VPS
    Ответ написан
    Комментировать
  • Какие есть варианты разработки базы данных?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Не мне судить о самом подходе, так что остановлюсь лишь на предложения об оптимизации ваших процессов.

    Что можно сделать - так это автоматизировать процесс формирования миграций между версиями. Например через apgdiff.

    Мол идея такая. У вас и так организовано все так как вам удобно. Потому мы можем просто написать простенький скриптик который заливает новую схему, и потом генерит миграцию на основании различий между предыдущей версией. Это позволит вам уменьшить количество рутины.
    Ответ написан
    Комментировать
  • Telegram bot api: Бот на PHP. Как послать сообщение пользователю (инициировать общение)?

    @nllm
    Самый простой вариант крон, но тогда ответы раз в минуту, что, возможно, не очень хорошо.
    Но можно красиво обыграть, написать что-то вроде "думаю", "ваш запрос очень важен для нас" )

    Вариант немного сложнее - redis

    А в чем разница в обработке таких сообщений в сравнении с nodejs?
    Ответ написан
    3 комментария