Search
Write a publication
Pull to refresh
0
@snovread⁠-⁠only

User

Send message

Делаем вебсокеты на PHP с нуля

Reading time18 min
Views313K
Некоторое время назад я выбирал библиотеку для работы с вебсокетами. На просторах интернета я натыкался на статьи по интеграции node.js с yii, а почти все статьи о вебсокетах на хабре ограничивались инструкциями к тому, как использовать phpdaemon.

Я изучал библиотеки phpdaemon и ratchet, они достаточно монструозны (причём используя ratchet для отправки сообщения конкретному пользователю рекомендовано дополнительно использовать wamp). Мне не совсем было понятно для чего использовать таких монстров, которые требуют установку других монстров. Почитав исходники этих, а также других библиотек, я разобрался как всё устроено и мне захотелось написать простой вебсокет-сервер на php самостоятельно. Это помогло мне закрепить изученный материал и наткнуться на некоторые подводные камни, о которых я не имел представления.

Так я решил написать необходимый для меня функционал с нуля.

Получившийся код и ссылка на демонстрационный чат в конце статьи.
Читать дальше →

WebSocket (Sec-WebSocket-Version: 13) — тонкости реализации, в частности на PHP

Reading time7 min
Views87K
Собственно, изучая данную тему, было перерыто много сайтов, но нигде толком ничего не объяснялось, либо информация была по устаревшим ныне протоколам. Это и послужило своеобразным пинком для создания этого HowTo. Это будет не детальный разбор всех возможных проблем, но немного теории и описание некоторых вещей которые для кого-то являются банальщиной, а у кого-то (вроде меня) вызвали трудности и потерю времени на поиск решения. Сразу предупрежу — здесь не рассматривается как поднять сокет-сервер на PHP, подобной информации в интернете навалом. Буду исходить из того, что сокет-сервер уже существует и надо лишь научить его общаться через вебсокеты.
Итак, хватит лирики, теперь к делу!
Читать дальше →

Трюки с CSS-анимациями: мгновенные изменения, отрицательные задержки, анимация transform-origin и другое

Reading time14 min
Views221K
Применяя CSS-анимации в повседневной работе, я постепенно выработал привычку экспериментировать с ними в свободное время. Постоянно пытаясь реализовать очередную интересную задумку с использованием как можно меньшего числа элементов HTML, я обнаружил немало способов сделать с помощью CSS довольно неочевидные вещи. В этой статье я хочу поделиться некоторыми из них.

Быстрое изменение состояния посреди анимации

Обычно анимации используются для того, чтобы плавно менять свойства элементов со временем. Однако изменения могут также быть практически мгновенными. Для этого надо задать два ключевых кадра с очень маленьким интервалом, например в 0.001%:

@keyframes toggleOpacity {
  50% { opacity: 1; } /* Turn off */
  50.001% { opacity: 0.4; }

  /* Keep off state for a short period */

  52.999% { opacity: 0.4; } /* Turn back on */
  53% { opacity: 1; }
}

Вот как я использовал этот приём для имитации мигающей неоновой вывески с помощью прозрачности и свойства text-shadow:


Читать дальше →

Облако.Mail.Ru + EncFS для резервного копирования домашнего фотоархива

Reading time6 min
Views114K
In Clouds (c) Fotolia/dvarg, 18 KB В конце декабря Mail.Ru вновь (впервые с 1997 года ;) выпустила революционный продукт — облачное хранилище, первым активным пользователям которого бесплатно выдают один терабайт. 1 Тб — по меркам начала 2014-го года это совершенно эпический объем, по крайней мере в масштабе национальной отрасли ИТ. Ради справедливости можно отметить, что некоторые китайские компании дают и больше, однако практическая применимость таких предложений для большинства читателей Хабрахабра выглядит сомнительной.

Небольшим изъяном актуальной версии Облака по мнению многих моих друзей и коллег выглядит то, что Облако (по крайней мере официально) не поддерживает WebDAV. Это не позволяет «из коробки» использовать шифрование с помощью простых и популярных в народе средств вроде Boxcryptor. Поскольку сам по себе Boxcryptor — это всего лишь удобная графическая надстройка над encfs+fuse, я решил для себя и для друзей составить короткую и простую инструкцию, как эффективно шифровать данные бэкапов в Облаке.Mail.Ru

Постановка задачи


Я продвинутый фотолюбитель. Мой фотоархив насчитывает примерно 600Гб данных, причем примерно половина из них — это выполненные в высоком разрешении сканы родительских слайдов, начиная с 1957 года. Почти все хранится в NEF+CR2 (это raw-форматы Canon и Nikon), каждая фотокарточка занимает от 15 до 60 мб. Иными словами, бесплатный терабайт от Flickr меня совсем не устраивал в частности из-за невозможности хранить необработанные исходники фото. Начиная с 2008-го года, резервирование архива выглядит так: раз в году я покупаю современный жесткий диск стоимостью 100 евро и копирую на него все содержимое предыдущего диска, а старый HDD отправляется «на пенсию» в медиа-сервер, который включается 3-4 раза в год. У этого подхода много достоинств (несмотря на смертность жестких дисков, данные еще ни разу не пропадали), но есть огромный недостаток — физическое расположение хранилища.

Я много путешествую по миру, и за последние 10 лет суммарно провел в России (где находится медиа-сервер и стопка «отставных» HDD) не более 4-х лет. Иногда случаются казусы, связанные с потерей внешних винчестеров — так я потерял значительную часть архива фотографий 2012-го года, которые банально не довез до своего дома на родине. На словах решение простое — «go cloud», а вот на деле тарифы всех мало-мальски удобных сервисов, позволявших заархивировать 1Тб оригиналов фотоизображений, были долгое время прямо-таки заоблачными.

И вот 20 декабря 2013 года нам было объявлено о том, что все желающие обладатели ящика на mail.ru могут получить в подарок 1 терабайт. Бесплатно. Для любых файлов. Но только у многих возникают вопросы, как хранить свои данные в облаке в зашифрованном виде.

Пошаговое решение для Mac и высокоуровневое описание для Windows

CBOR — новый бинарный формат представления данных

Reading time9 min
Views64K
Concise Binary Object Representation (сжатое бинарное представление объекта) — формат данных, который был спроектирован таким образом, чтобы обеспечить максимально простой код реализации, формирования компактных выходных данных и возможность расширения формата без необходимости обмена информацией о версии.

Стандарт формата CBOR был официально анонсирован комитетом IETF в октябре 2013 года в новом документе RFC 7049, авторами которого являются Carsten Bormann и Paul Hoffman. Взглянув на имя первого автора, можно предположить другую причину происхождения аббревиатуры для названия формата, но возможно это просто совпадение. Формат CBOR получил MIME-тип application/cbor.

На данный момент существует, вероятно, сотни всевозможных бинарных форматов для представления структурированных данных, ряд которых стандартизирован, популярен и широко применяется (например, BER и DER для ASN.1, MessagePack и BSON). Все существующие стандарты решают поставленные перед ними задачи, и CBOR здесь не исключение. К формату было предъявлено семь важных требований, и, поскольку ни один из существующих форматов в полной мере не мог им удовлетворить, был создан новый (да, тут напрашивается картинка ).

Читать дальше →

SoftEther VPN — продвинутый мультипротокольный VPN-сервер и клиент

Reading time3 min
Views411K
Как скоро я смогу вас заинтересовать, если скажу, что в этой статье речь пойдет о VPN-сервере, который может поднимать L2TP/IPsec, OpenVPN, MS-SSTP, L2TPv3, EtherIP-серверы, а также имеет свой собственный протокол «SSL-VPN», который неотличим от обычного HTTPS-трафика (чего не скажешь про OpenVPN handshake, например), может работать не только через TCP/UDP, но и через ICMP (подобно pingtunnel, hanstunnel) и DNS (подобно iodine), работает быстрее (по заверению разработчиков) текущих имплементаций, строит L2 и L3 туннели, имеет встроенный DHCP-сервер, поддерживает как kernel-mode, так и user-mode NAT, IPv6, шейпинг, QoS, кластеризацию, load balancing и fault tolerance, может быть запущен под Windows, Linux, Mac OS, FreeBSD и Solaris и является Open-Source проектом под GPLv2?

То-то и оно. Такое пропустить нельзя.
Читать дальше →

Как построить разработку дизайна очень большого и долгого проекта

Reading time7 min
Views80K
Когда проект большой, дизайнеров над ним работает много, одновременно и очень далеко друг от друга — постоянно возникают проблемы.



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

Посмотрим как они выкрутятся?
Читать дальше →

Дюжина дизайнерских косяков

Reading time6 min
Views139K


Последние месяцы мне по долгу службы приходилось изучать и контролировать большое количество дизайна. Критерии совершенно обычные — следить за текстом, внимательно вчитываясь в каждую фразу. И следить чтобы дизайн выполнял свои задачи.

Спустя время я выделил несколько неочевидных вещей, на которые старался обращать внимание, и в большинстве случаев находил ошибки. Получился небольшой чеклист. Очень полезный как для самопроверки, так и для проверки чужого дизайна. Им с вами и спешу поделиться:
Читать дальше →

Резервное копирование веб-проектов на Яндекс.Диск

Reading time14 min
Views38K
В далекие детские годы я не понимал важность резервного копирования данных. Но, как говорится, понимание приходит с опытом. Зачастую опыт бывает очень горький. В моем случае хостинг два раза убивал базу сайта MathInfinity, созданного еще в студенческие годы.

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

Идея создания архивов на сервисах вроде Dropbox, Ubuntu One, Яндекс Диск, Диск Google и др. уже давно притягивала мое внимание. Десятки гигабайт бесплатного места, которое теоретически можно использовать для резервирования данных.

Теперь эта идея получила мое первое воплощение. В качестве сервиса для создания архивов был выбран Яндекс Диск.
Читать дальше →

Новыe GSM маршрутизаторы от OpenVox

Reading time4 min
Views40K


Openvox — компания из Китая. Уже давно не новость, что инженеры из поднебесной могут не только ворокопировать чужие идеи, но и создавать самостоятельные, эффективные и качественные решения.

Вам, как телефонистам, OpenVox наверняка известен как производитель PCI и PCI-E плат для VoIP телефонии. И я добавлю, что на этом линейка продукции не заканчивается.

Компания производит FXS маршрутизаторы, различные Embedded материнские платы, аналоговые и цифровые фаиловеры и даже телефонные станции (на Asterisk конечно же).

В 3 квартале OpenVox анонсировал расширение своего модельного ряда маршрутизаторов.

Вашему вниманию предлагается обзор бюджетных и ооочень функциональных GSM шлюзов от OpenVox.

Читать дальше →

Проектируем макет корпоративного сайта

Reading time8 min
Views91K


Привет, Хабраюзер! В интернете полно статей на тему, каким должен быть идеальный дизайн сайта, много примеров уже отрисованных макетов, но почти никогда ты не увидишь, как именно этот макет рисовался, какие правки переносил и насколько изначально был далек от финального варианта. Сегодня я приглашаю тебя разобрать процесс отрисовки главной страницы корпоративного сайта фирмы, с нуля. Мы рассмотрим 13 промежуточных вариантов, предшествовавших финальной версии главной страницы и подробно разберем все вводимые в макеты изменения.
Поехали!

Ubiquiti NanoBridge M5: первый опыт установки или wifi-мост «из коробки»

Reading time3 min
Views125K
image

Предупреждение: ничего особенного в статье нет, люди, хотя бы пару раз ставившие wifi-мосты, всё тут описанное хорошо себе представляют.

Постановка задачи


1) подключить себе провайдеров отсутствующих в доме
2) прокинуть свой интернет друзьям
3) получить опыт настройки оборудования Ubiquiti

Читать дальше →

Как и зачем я решил начать собственное дело

Reading time8 min
Views190K
Салют, Хабр!
Недавно я уволился с довольно завидной должности (главного архитектора) в довольно неплохой компании (Acronis) и с непоколебимым решением в мозгу больше не работать по найму переехал из Москвы обратно в Ереван, откуда семь лет назад понаехал в Златоглаво-Нерезиновую. Учитывая необычность произошедшего и часто задаваемый вопрос «но почему?!», я решил разобраться в собственных мыслях и озвучить их вслух для себя самого и тех, кто может почерпнуть в моих размышлениях что-то для себя полезное. Короче говоря, это рассказ о том, почему я оставил высокооплачиваемую перспективную работу в международной компании ради сомнительной перспективы начать собственное дело, и как я собираюсь дальше жить.
Читать дальше →

3G-интернет на 33 км

Reading time5 min
Views198K
Один мой друг, большой поклонник идеи родовых поместий, примерно год назад стал обживать свой участок земли вдали от сел и городов. Построил деревянный дом, баню, организовал подсобное хозяйство. Обзавелся красавицей-женой, собакой модели «хаскоалабай» и кошкой Кусей. И все вроде хорошо, можно жить и развиваться, но здорово не хватает подключения к интернету — ездить каждый раз за 70км в город, чтобы почитать форумы по строительству, солнечной энергетике, садоводству да и просто пообщаться с друзьями онлайн стало неудобно и накладно.

С этой проблемой он обратился ко мне. Я приступил к решению задачи, уточнив вводные условия:
  • Из сотовых 3G-операторов голосовая связь работает только у Билайна, и то, если подойти к окошку. Ловится еще TELE2, но у него нет 3G;
  • Интернет через USB-модем у соседей загружает среднюю страницу по 10 минут;
  • Ближайший населенный пункт в 7км, ближайший «крупный» (28 тыс.человек) — в 30км;

image
Читать дальше →

Еще одна история про домашний сервер, или операция «silence»

Reading time14 min
Views53K
Добрый день, хабраюзеры!

imageНаверняка каждый разработчик, рано или поздно, сталкивается с проблемой тестового окружения. Не очень удобно держать ПК включенным 24х7, да еще и заваливать его софтом для экспериментов под завязку. С другой стороны найти хостинг по собственному вкусу, да еще и не дорогой — тоже задача не из легких. Что же делать? Выход есть — развернуть песочницу дома. Как я убедился, об этом детальнее ниже, это не дорого, это удобно и очень увлекательно.
Подробности

Язык программирования J. За что любить?

Reading time13 min
Views94K
image
J – самый ненормальный и самый эффективный язык из известных мне языков. Он позволяет быстро разрабатывать, а также вызывать ненормативную лексику у людей, незнакомых с ним и смотрящих на код.

J слишком необычный. И сложный для изучения. У людей, сталкивающихся с J не хватает мотивации, чтобы его изучить. Синтаксис непривычный.
В этом посте я хотел помочь вам заглянуть дальше, что будет, если вы его изучите и чем он интересен. По своему опыту знаю, что преимущества этого языка сразу не очевидны. В посте я не собираюсь останавливаться на разборе конструкций. Только в обзоре. Предлагаю просто окунуться в примеры, попробовать ощутить мощь языка. Узнать, чем прекрасен язык, без изучения. Писать статьи, обучающие программированию на нем – дело сложное и думаю, не нужное. Он не так прост, чтобы это сделать кратко, а с обучающими материалами на официальном сайте нет никаких проблем. Главное – желание. Им и займемся.
Читать дальше →

Понимание ООП в JavaScript [Часть 1]

Reading time16 min
Views339K
— Прототипное наследование — это прекрасно
JavaScript — это объектно-ориентированный (ОО) язык, уходящий корнями в язык Self, несмотря на то, что внешне он выглядит как Java. Это обстоятельство делает язык действительно мощным благодаря некоторым приятным особенностям.

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

К счастью, в ECMAScript 5 появилось множество вещей, которые позволили поставить язык на правильный путь (некоторые из них раскрыты в этой статье). Также будет рассказано о недостатках дизайна JavaScript и будет произведено небольшое сравнение с классической моделью прототипного ОО (включая его достоинства и недостатки).
Читать дальше →

Крошечный Excel на чистом JavaScript (30 строк кода)

Reading time2 min
Views137K
Особенности:
  • Около 30 строк обычного JavaScript
  • Использованные библиотеки: отсутствуют
  • Синтаксис как в Excel (формулы начинаются с "=")
  • Поддерживаются произвольные выражения(=A1+B2*C3)
  • Обнаруживаются циклические ссылки
  • Автоматическое сохранение в localStorage

image
Читать дальше →

Что в SEO можно считать нормальным и работающим, а что – отжившим

Reading time9 min
Views19K
Часть 1
Что точно не поможет занять «железный трон»

image

1. Магия мёртвых методов поисковой оптимизации

На заре SEO слепо верили, что ключевые слова – это сила. И чем их больше, тем лучше. Многие оптимизированные тексты грешили такой плотностью ключевых слов, что это делало их буквально нечитаемыми, зато очень даже привлекательными для роботов поисковых систем. Сегодня Yandex и особенно Google рекомендуют использовать всего несколько ключевых слов на страницу, делая таким образом тексты читаемыми прежде всего для людей, А иначе – санкции.

Другой пример – ссылки на главную страницу. Раньше стремились получить как можно больше линков именно на главную страницу, что помогало общему положению сайта, а также повышало тИЦ и PR. Сейчас такая тактика скорее опасна, нежели привлекательна. Например, Wikipedia выпадает на первой странице почти по любому запросу. При этом невероятное количество внешних ссылок ведёт на внутренние страницы ресурса.
Читать дальше →

Information

Rating
Does not participate
Location
Санкт-Петербург, Санкт-Петербург и область, Россия
Registered
Activity