Pull to refresh
0
0
ixaxme @xaxaTyH

User

Send message

И без Javascript всё спокойно

Reading time3 min
Views6.7K

Задача


Совместить lite-версию сайта (работающую без JavaScript'а) с обычной. Иными словами, сделать graceful degradation для JavaScript-решений. Далее в посте небольшое руководство для тех, кому актуальна данная проблема.
Читать дальше →
Total votes 74: ↑67 and ↓7+60
Comments30

PHP Manual с комментариями пользователей в chm

Reading time3 min
Views5.5K
Навеяно вот этим: Похапе мануал обновился

Мне лично удобней пользоваться CHM версией руководства по PHP — быстрый поиск удобен, а интернет не всегда доступен. Но у официальной справки нет встроенных пользовательских комментариев, которые зачастую бывают очень полезны. Ранее они были в Extended-версии руководства, но сейчас она уже не поддерживается.

Полазив в гугле, я обновленной версии руководства с комментами не нашел. Пришлось сделать собственную, и этот процесс может повторить любой желающий.
Как именно?
Total votes 36: ↑34 and ↓2+32
Comments33

Типограф Евгения Муравьева для TinyMCE

Reading time1 min
Views3.1K
В топике Новая версия веб-типографа Студии Муравьёва был представлен замечательный типограф.
Типограф обрабатывает тексты не только по классическим законам (неразрывные пробелы, правильные кавычки, свисающая пунктуация и др.), но и по взятым канонам из «Справочника издателя и автора» Мильчина А. Э. Любители типографики должны это оценить.

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

image
При нажатии на кнопку не отображается никаких всплывающих окон, текс молча типографируется.
Читать дальше →
Total votes 51: ↑44 and ↓7+37
Comments37

TeX-like разметка на Javascript

Reading time2 min
Views2.4K
При написании console-like форума был задан вопрос: «какую разметку лучше использовать?». Среди вариантов были стандартный бб-код ([b]bold[/b]), вики-разметка(*bold*), или TeX-like разметка (\b{bold}). После недолгого совещания выбор был остановлен именно на TeX-like. Была написана небольшая библиотека, которая, по моему мнению, достаточно интересна, расширяема и гибка. Желающие посмотреть пример могут перейти по ссылке freecr.ru/TeX
Под хабракатом у меня исходный код под лицензией LGPL, объяснение возможностей, принципов и примеры написания плагинов.
Total votes 22: ↑20 and ↓2+18
Comments35

Автоматическая загрузка файлов на Яндекс.Диск

Reading time4 min
Views26K
Предлагаю вашему вниманию PHP скрипт автоматической загрузки файлов на сервис Яндекс.Диск. Скрипт прост до безобразия, достаточно передать ему в качестве параметров логин, пароль и путь к файлу и в результате он загрузит ваш файл на сервис и выдаст вам ссылку на него. Не знаю, сколько еще меня вместе с моими постами будет терпеть Яндекс, но все-таки приведу исходный код скрипта :)
Читать дальше →
Total votes 100: ↑94 and ↓6+88
Comments125

Работа с http через неблокируемые сокеты

Reading time7 min
Views8.9K
Понадобилось сделать несколько параллельных http запросов на php. Интуиция подсказывала что делается это через неблокируемые сокеты. В интернете в общем то есть несколько готовых классов для работы с ними, но как всегда захотелось легкости и простоты, поэтому был срочно изобретен новый велосипед. Под катом чуть больше 100 строк кода с комментариями и пример использования.

Читать дальше →
Total votes 63: ↑47 and ↓16+31
Comments47

5 способов занять боковую панель в Firefox

Reading time2 min
Views8.6K
Мало кто задумывался о том, что боковую панель в FireFox можно использовать для достаточно полезных вещей. В этой статье показаны 5 способов, которыми можно полезно занять место в Sidebar'е.
Читать дальше →
Total votes 23: ↑17 and ↓6+11
Comments25

Скрипт для быстрого обзора информации о жёстких дисках

Reading time1 min
Views3.9K
Решил поделится с хабрасообществом небольшим PHP скриптом, который немного экономит моё время.

Суть проблемы


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

Описание скрипта


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

Читать дальше →
Total votes 75: ↑64 and ↓11+53
Comments58

Ускорение верстки — да поможет Notepad++

Reading time2 min
Views103K
Я уже довольно-таки давно верстаю в Notepad++, пробовал и другие редакторы — не срослось. Основная причина, по которой мне нравился раньше этот редактор — подсветка кода. Видел. что есть много каких-то настроек, но небыло необходимости в них разбираться — ведь и так всё работает прекрасно.

Ситуация изменилась, когда объем работы вырос, и я физически не успевал верстать то, что вроде как должен успевать. Конечно, есть свои html и css заготовки, но копипастить их — сомнительный выигрыш во времени. Работа по FTP через Total Commander тоже не очень то удобна — много лишних телодвижений.

И вот я решил потратить время на настройку своего любимого Notepad++, слышал где-то что гибко он настраивается :)

(Описание скорее для тех разработчиков, которые не в курсе всех прелестей Notepad++, знающие могут дальше не читать).
Подробнее с картинками...
Total votes 118: ↑103 and ↓15+88
Comments206

Стабильное вещание IPTV через VLC

Reading time8 min
Views61K
С IPTV пришлось познакомиться поближе, когда в компании интернет-провайдера где я работал, решили организовать вещание IPTV. Выяснилось, что вещание осуществляется в linux и программой vlc, которая по слухам единственная в своем роде. Была установлена тарелка и DVB-карта SkyStar2, которая предположительно должна была без проблем заработать в linux'e. Так и было со всеми новыми машинами, где была установлена ubuntu server. На Debian заработало только после обновления ядра. Настройка прошла относительно легко, благо на то время уже было несколько статей на эту тему и документация к vlc была тоже очень полезна. После запуска начались некоторые проблемы с пропаданием звука и видео на каналах и другие проблемы, описанные ниже. После их появления были написаны скрипты, устраняющие эти проблемы. Сейчас на них работает 3 сервера с 5 dvb-картами в общей сложности и вещается 23 канала с 3х спутников. Под катом — перечисление проблем, которые могут появиться после запуска вещания IPTV через VLC в Linux и то как с ними бороться. Бороться будем с помощью bash.
Читать дальше →
Total votes 50: ↑48 and ↓2+46
Comments44

ОС и вебсервер — вместе веселей

Reading time3 min
Views6K
Привет всем. Сначала я думал, что лучше всего продолжить тему nginx на примере подчищенного и откомментированного конфига с одного из боевых серверов, но потом понял, что это потребует довольно большого объёма дополнительной информации. Поэтому, я решил попробовать, для затравки, рассказать в общих чертах о том, как nginx устроен, и почему он работает так быстро.

далее
Total votes 74: ↑64 and ↓10+54
Comments82

Принципы usability для CMS

Reading time4 min
Views2K
Ни разу не слышал, чтобы наши (читай: совковые) вендоры коробочных CMS заказывали usability тестирование своих продуктов. Напрашивается два основных вывода:
  1. Usability этих систем и так на высоте! В каждой компании есть свои usability специалисты, которые принимают участие в разработке на всех стадиях развития продукта – организуют тестирования, дают рекомендации, экспертную оценку и т.д. В таком случае это UDD – User-Driven Development.
  2. Usability этих систем по-взрослому сосет. Программеры делают функционал. Дизайнеры делают дизайн. Маркетинг делает продажи. Программер думает об эклипсе. Дизайнер думает о фотошопе. Маркетолог думает о пауерпоинте. Ну а конечный пользователь периодически задумывается обо всех трех сразу – об их интеллекте, сексуальной ориентации и месте произрастания их передних конечностей. Это методология AUDD – Anti-User-Driven Development или Angry User Driven Development.
Если вам известны компании, которые работают по первой схеме, то дайте знать. На ребят, делающих все по второй схеме, я насмотрелся вдоволь, поэтому считаю полезной для всеобщего ознакомления публикацию «11 usability principles for CMS products» за авторством James Robertson. Далее позволю себе привести вольный пересказ списка из одиннадцати принципов CMS usability, которые выделяет Джеймс, с моими комментариями.
Читать дальше →
Total votes 27: ↑19 and ↓8+11
Comments19

PHP Performance Series: Caching Techniques

Reading time6 min
Views11K
Кеширование промежуточного кода (Opcode Caching)
Кэширование кода это один из самых легких и эффективных путей увеличения производительности в PHP. Использовании данного вида кэширования позволит избавиться от большого количества неэффективностей, возникающих при процессе запуска выполнения кода. Кэширование кода сохраняет промежуточный код в памяти для того чтобы не компилировать PHP-код каждый раз при запуске файла.
Читать дальше →
Total votes 59: ↑50 and ↓9+41
Comments66

Небольшая программа на PHP-GTK

Reading time3 min
Views6.8K

PHP-GTK — это привязка инструментария для создания графического интерфейса GTK+ к языку программирования PHP. Про неё уже писали на Хабре. Очень многие скептически относятся к этой библиотеке, даже не столько к ней самой, сколько к использованию PHP на десктопе. Но, так или иначе, библиотека существует и, более того, развивается, о чём говорит недавняя новость на официальном сайте. Поэтому предлагаю более детально познакомиться с PHP-GTK и написать небольшую программу.
Читать дальше →
Total votes 19: ↑12 and ↓7+5
Comments96

Парсим URL

Reading time25 min
Views67K
Хочу поделиться одной полезной утилиткой, написанной на pure JavaScript, — URL. По сути это небольшой парсер URL'ов, работающий почти как window.location, но не перезагружающий страницу браузера при манипуляциях.

А заодно скажу пару слов про getters & setters в JavaScript.

UPD1: по просьбам трудящихся, вынесу сюда примеры:
// Пусть текущий URL = 'http://my.site.com/somepath/'
var u = new URL('relative/path/index.html')
u.href // my.site.com/somepath/relative/path/index.html
u.href = '/absolute/path.php?a=8#some-hash'
u.href // my.site.com/absolute/path.php?a=8#some-hash
u.hash // #some-hash
u.protocol = 'https:'
u.href // my.site.com/absolute/path.php?a=8#some-hash
u.host = 'another.site.com:8080'
u.href // another.site.com:8080/absolute/path.php?a=8#some-hash
u.port // 8080
// и так далее, и тому подобное

* This source code was highlighted with Source Code Highlighter.

Работает в FF3+ (может и в 2+, не пробовал) и в IE6+ ( и это — моё ноу-хау :-) ).
Разобрана в статье также полностью кросс-браузерная реализация, но в использовании — немного более громоздкая:
// Пусть текущий URL = 'http://my.site.com/somepath/'
var u = new URL('relative/path/index.html')
u.href() // my.site.com/somepath/relative/path/index.html
u.href('/absolute/path.php?a=8#some-hash')
u.href() // my.site.com/absolute/path.php?a=8#some-hash
// и т.д.

* This source code was highlighted with Source Code Highlighter.


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

Прошу под кат...
Total votes 142: ↑128 and ↓14+114
Comments81

Делаем скриншоты сайтов

Reading time3 min
Views17K
Бродя по просторам PHP документации случайно наткнулся на две функции: imagegrabwindow и imagegrabscreen. Они умеют делать скриншоты в Microsoft Windows.
Заинтересовало. Кончилось дело тем, что был написан скриптик генерирующий полный скриншот любого сайта.
Итак нам необходимы:

Читать дальше →
Total votes 82: ↑64 and ↓18+46
Comments63

Dklab_Cache: тэги в memcached, namespaces, статистика

Reading time6 min
Views4.7K
Memcached community предприняло немало попыток написать «родные» патчи для кода memcached, добавляющие в него поддержку тэгов. Наиболее известный из таких патчей — проект memcached-tag. К сожалению, memcached-tag все еще очень далек от стабильной версии: нетрудно написать скрипт, приводящий к зависанию пропатченного memcached-сервера. Похоже, на момент написания данной статьи не существует ни одного надежного решения проблемы тэгирования на уровне самого memcached-сервера.

Библиотека Dklab_Cache


Dklab_Cache — это (в основном) библиотека поддержки тэгирования ключей для memcached, использующая интерфейсы Zend Framework. Сама библиотека написана на чистом PHP. Вот полный список возможностей библиотеки:
  • Backend_TagEmuWrapper: тэги для memcached и любых других backend-систем кэширования Zend Framework;
  • Backend_NamespaceWrapper: поддержка пространств имен для memcached и др.;
  • Backend_Profiler: подсчет статистики по использованию memcached и др. backend-ов;
  • Frontend_Slot, Frontent_Tag: каркас для высокоуровневого построения систем кэшиирования в сложных проектах.
Собственно, для поддержки тэгов имеется класс TagEmuWrapper. Он представляет собой декоратор («обертку») для backend-классов кэширования Zend Framework. Другими словами, вы можете с его помощью «прозрачно» добавить поддержку тэгов в любую подсистему кэширования Zend Framework. Мы будем рассматривать backend для работы с memcached: Zend_Cache_Backend_Memcached, но, если в вашем проекте используется какой-то другой backend-класс, вы можете подключить тэгирование и к нему без каких-либо особенностей.

TagEmuWrapper реализует стандартный backend-интерфейс Zend_Cache_Backend_Interface, поэтому с точки зрения вызывающей системы он сам является кэш-backend'ом. Вообще, Zend Framework хорош тем, что на уровне интерфейса он поддерживает тэги с самого начала! Например, в методе save() уже имеется параметр, позволяющий снабдить ключ тэгами. Однако ни один из backend-ов в составе Zend Framework тэги не поддерживает: попытка добавить тэг к некоторому ключу вызывает исключение (в частности, для Zend_Cache_Backend_Memcached).

Технические подробности, документацию, а также примеры использования можно посмотреть тут: dklab.ru/lib/Dklab_Cache

Что такое тэги?


Работа с типичной кэширующей системой (в том числе с memcached) заключается в выполнении трех основных операций:
  • save($data, $id, $lifetime): сохранить данные $data в ячейке кэша с ключом $id. Можно указать «время жизни» ключа $lifetime; спустя это время данные в кэше «протухнут» и удалятся.
  • load($id): загрузить данные из ячейки с ключом $id. Если данные недоступны, возвращается false.
  • remove($id): очистить ячейку кэша с ключом $id.
Читать дальше →
Total votes 73: ↑59 and ↓14+45
Comments57

Использование составных ключей для манипуляции данными в memcached

Reading time7 min
Views3.2K
Часто, при работе с memcached, возникает ситуация, когда необходимо удалить данные в самых различных местах. Например, при добавлении нового комментария, необходимо обновить не только кеш самих комментариев этой страницы, но и ленты комментариев на главной странице, списока комментариев пользователя, счетчика комментариев пользователя, общего счетчика комментариев сайта, счетчика комментариев статьи и т.д. Можно запомнить все ключи этих данных и множество раз вызвать delete() с этими ключами.

<?php
$cache->delete('comments_art123');
$cache->delete('comments_tape');
$cache->delete('comments_user123');
$cache->delete('comments_counters_art123');
$cache->delete('comments_counters_user123');
......
?>


* This source code was highlighted with Source Code Highlighter.


Как известно, memсached хранит данные плоско, то есть одному ключу соответствует всегда одно значение. Вложенных ключей не существует. Так же нет возможности удалить группу ключей, скажем по маске. Хорошо бы было, если бы можно было сделать, например, так: $cache->delete('comments*'); Но так нельзя.

Но если нельзя, но очень хочется, то можно ;)
Читать дальше →
Total votes 36: ↑26 and ↓10+16
Comments52

Жизненные советы от владельцев веб-студий: как повысить рентабельность и снизить риски. Часть 1

Reading time6 min
Views12K
Каждая веб-студия имеет собственные приемы и «фишки» при работе с заказчиком, которые позволяют ей минимизировать риски при разработке интернет-проекта и снижать издержки на каждом этапе работы. По роду своей деятельности в Юмисофт я часто общаюсь с владельцами веб-студий, и вот сейчас у меня наконец дошли руки, чтобы поделиться некоторыми интересными рецептами, услышанными в неформальных беседах. Надеюсь, они будут вам полезны :)
Читать дальше →
Total votes 89: ↑82 and ↓7+75
Comments46

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity