Идея плагина родилась в августе 2012, когда возникла необходимость вывода популярных записей блога с последующим кэшированием как самого виджета, так и скрипта добавления "+1" просмотрам.
Произведя ресёрч по существующим плагинам, я понял что аналогов с таким функционалом ну просто нет. В основном всё считается запуском какой-то php-функции плагина, что конечно же не будет работать при кэшировании страниц nginx’ом (когда до PHP дело вообще не доходит).
Выходом из этой ситуации был только AJAX-скрипт, что вызывался бы при отображении поста с рандомными параметрами для исключения возможности кэширования по URL. Также это будет означать, что спам-боты, поисковые роботы и прочие без-JavaScript-овые клиенты учитываться не будут, что предполагает более точную статистику.
Опыта написаний плагинов для WordPress к тому времени у меня вообще не было, но я решил его сделать. Это было немного больше чем год назад.
Читати далі…
Сегодня я расскажу как можно работать с базой данных PostgreSQL с помощью nginx’a без application’a (например, PHP или любого другого). Т.е. эта технология абсолютно не зависит от языка, на котором сделан сайт/проект/система.
Мы будем использовать мощь PostgreSQL в хранимых процедурах (stored procedures/functions), а кэшировать с помощью быстрого Redis.
Читати далі…
Решил написать ТОП 16 PHP функций, что я использую каждый день.
Будет полезно как начинающим разработчикам, так и профессионалам (хотя у них этот список может отличаться).
Это MUST HAVE функции, что обязательно нужно знать и уметь ими оперировать.
Читати далі…
Я создал небольшую шпаргалку соответствий команд систем управления версиями SVN/Subversion и Git. Пользуйтесь! 😉
svnadmin create repo
git init
git add .
svn import file://repo
git commit
svn diff -rrev path
git diff rev path
svn revert path
git checkout path
svn add file
git add file
svn commit
git commit -a
git push remote
svn blame file
git blame file
svn cat url
git show rev:path/to/file
svn list url
git show rev:path/to/directory
svn log -rrev url
svn diff -crev url
git show rev
svn copy https://example.com/svn/trunk
https://example.com/svn/tags/name
git tag -a name
svn list https://example.com/svn/tags/
git tag -l
svn log –limit 1 https://example.com/svn/tags/tag
git show tag
svn copy https://example.com/svn/trunk https://example.com/svn/branches/branch
git branch branch
svn switch https://example.com/svn/branches/branch
git checkout branch
svn list https://example.com/svn/branches/
git branch
svn update -r rev
git checkout rev
svn update
git checkout prevbranch
svn merge -r rev:HEAD https://example.com/svn/branches/branch
git merge branch
svn merge -c rev url
git cherry-pick rev
svn checkout url
git clone url
svn switch url
git checkout –track
-b branch origin/branch
Сегодня я хотел бы поделиться знаниями по извлечении данных из Google Analytics, используя их API v3 на стороне сервера (server-side), т.е. без участия браузера пользователя.
Самое странное, что в Сети в основном описаны все примеры с использованием эмуляции браузера и аккаунта пользователя (пара email+пароль). Мы так делать не будем, т.к. это глупо и не красиво 🙂
Приступим.
Читати далі…
Получить в виде списка все индексы довольно просто.
Достаточно выполнить следующее:
SELECT
n.nspname AS "schema",
c.relname AS "index"
FROM
pg_catalog.pg_class AS c
LEFT JOIN
pg_catalog.pg_namespace AS n ON n.oid = c.relnamespace
WHERE
c.relkind = 'i'
AND
n.nspname NOT IN ('pg_catalog', 'pg_toast')
ORDER BY
c.relname ASC
И всё!
Кстати, а вот так можно получить список всех неиспользуемых индексов.
Узнаём timestamp от интересуещей даты
SELECT
extract( 'epoch' from '2012-02-01'::timestamp without time zone )::integer
(это будет 1325455200
)
Используем generate_series()
SELECT
*
FROM
(
SELECT
date_trunc(
'day',
to_timestamp(
generate_series( 1325455200, 1333691315, 80000 )
)
)::date AS d
) AS s
GROUP BY
s.d
ORDER BY
s.d ASC
В результате получим что-то такое:
2012-01-02
2012-01-03
2012-01-04
2012-01-05
...
php -q script.php < /dev/null > script.log &
Пересматривая свои старые проекты на своём первом языке Visual Basic я натолкнулся на эту программу.
Предыстория следующая. На курсах вождения, ещё в 2003, у нас была большая картонка с 16 цифрами, расположенными в случайном порядке. Было несколько таких картонок. И нужно было найти глазами подряд все числа от 01 до 16, засекая потраченное время. После чего это время делилось на 16 и получалось среднее время реакции.
Так и получилась эта программка на Visual Basic.
А вот сегодня я решил её переписать на HTML+JavaScript, продлив тем самым её жизнь и заодно показав общественности.
Читати далі…
Навеяно статьей об обработке критических ошибок в PHP. Обратил внимание, что несмотря на то, что коды ошибок в PHP специально заточены под битовые операции, тем не менее, что в примерах статьи, что в комментариях, для проверки кодов ошибок используются обычные операторы сравнения.
Например, встречались такие варианты:
if ($error['type'] == E_ERROR || $error['type'] == E_PARSE || $error['type'] == E_COMPILE_ERROR) { ... }
или
if(in_array($error['type'], array(E_ERROR, E_PARSE, E_COMPILE_ERROR)) { ... }
В связи с этим решил написать небольшую статью о битовых операциях с примерами их использования.
Читати далі…