Проверяем, как гугл индексирует ЖЖ

Рубрика: Uncategorized | Добавить комментарий

Вирусы на PHP

/* This file is protected by copyright law and provided under license. Reverse engineering of this file is strictly prohibited. */

Это строчка из обфусцированного (в основном, с помощью base64 и eval) троянца под названием PHP/BackDoor.CK, который я только что обнаружил на одном из клиентских сайтов.

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

Рубрика: Uncategorized | Добавить комментарий

Google Chrome вылетает с ошибкой

Если ваш гугл хром снова и снова вылетает с ошибкой

Whoa! Google Chrome has crashed. Relaunch now?

попробуйте отключить (временно) в настройках синхронизацию хрома с вашим гугл-аккаунтом – похоже у гугла проблемы на серверах, ответственных за синхронизацию браузеров:

Рубрика: Uncategorized | Метки: , , | Добавить комментарий

Курсы по МонгоДБ

Заканчиваю сейчас (проходить) курс по МонгоДБ: вообще, один из самых лучших онлайн-курсов, которые я когда-либо брал. Короткие, динамичные лекции, самоконтроль после каждой лекции + автоматически проверяемая домашняя работа каждую неделю.

Учат монго для разработчиков; там где нужен выход за пределы консольной работы, используют питон (pymongo). Питон смешной, но понятный (по ощущениям: как паскаль, синтаксического сахара маловато), как раз для обучения.

Этот же курс (монго + питон) начнётся снова 21-го января 2013. В конце февраля будет идентичный по монго-содержанию курс, только вместо питона будет джава. Ещё обещают курс для монго-дбадминов в конце января.

Проводит эти курсы компания 10gen, которая, собственно, и стоит за MongoDB. Вот сайт компании, вот сайт онлайн-курсов.

Наконец-то дистанционное обучение достигло состояния, на котором оно может полностью заменить собой т.н. “курсы повышения квалификации”. Причём не просто заменить, а заменить с лихвой: не надо никуда ехать, не надо выделять много времени сразу; спокойно, без отрыва от производства, пару часов в день вперёд и с песней.

Рубрика: Uncategorized | Метки: , , | Добавить комментарий

Как перенести сайт на другой сервер

Вот мой алгоритм переноса сайта с одного хостинга на другой:

  1. Убедитесь, что у вас есть все необходимые доступы для переноса (ftp/ssh, mysql, cpanel – зависит от сайта). Нет смысла начинать эту процедуру, если вы не сможете её закончить.
  2. Подготовьте новый сервер к приёму сайта. Виртуальный хост на апаче, нужные версии софта, все модули и т.д.
  3. Переведите сайт на старом хостинге в режим “только для чтения”. Например, если это форум, то отключите возможность написания новых сообщений, и известите об этом пользователей. Вы не хотите оказаться в ситуации, когда у вас на старом и на новом сервере будут разные посты с одинаковыми айдишниками. Чтобы не потерять пользовательский контент, отключите пользователям возможность его генерировать до окончания переезда.
  4. Скопируйте файлы и базы на новый сервер. Очень желательно иметь консольный доступ хотя к одному из серверов, задействованных в переезде, т.к. это реально ускоряет процесс. Вы можете сделать запаковать файлы в тарболл и перенести один файл, вместо того, чтобы переносить все файлы один за другим. Также можно воспользоваться Midnight Commanderом для переноса файлов по ftp.
  5. Отредактируйте ваш локальный файл hosts*. Я имею в виду файл на вашем рабочем компьютере: вам нужно заставить ваш локальный DNS думать, что вы уже переключили свой сайт на новый сервер. Для этого добавьте в файлик запись вида ‘www.example.com 11.22.33.44′. Не трогайте реальный NS вашего домена на этом этапе. Слишком рано, спугнёте.
  6. Пометьте как-нибудь (текстом, фоном, картинкой) сайт на новом сервере, чтобы отличать одну копию сайта от другой. На данном этапе существуют две живых копии вашего сайта, вы должны быть в состоянии отличить их друг от друга. Одна из копий (старая) должна быть в режиме “только для чтения”.
  7. Протестируйте новый сайт. Убедитесь, что вы отредактировали все конфиги, расставили нужные права доступа, нет других конфликтов.
  8. Повторите предыдущий этап пару раз (не входите в бесконечный цикл).
  9. Если вы готовы переключиться на новый сервер, пора поменять DNS и перевести домен на новые IP адреса.
  10. Не отключайте режим “только для чтения” на старом сайте. Вы собираетесь выбросить эту копию.
  11. Новый контент будет появляться только на новом сервере. Проверяйте логи доступа к старому серверу время от времени. По мере обновления DNS, старая версия сайта должна получать всё меньше и меньше посещений. Если траффик не падает, то значит, вы накосячили с редактированием DNS. Перепроверьте, в правильном ли месте вы отредактировали зону и на забыли ли вы её активировать (зависит от регистратора/хостера).
  12. Если на старом сервере не было посещений в течение 24 или 48 часов, можете отказываться от него — только убедитесь, что вы предварительно скачали себе полный бекап (на случай, если вы пропустили что-то в процессе переезда).

* Иногда вам надо отредактировать файлик hosts и на вашем сервере тоже. Например, если вы используете nginx в качестве фронтенда, вам надо заставить ваш новый сервер думать, что ваш домен реально живёт там, потому что иначе nginx будет пытаться проксировать старый сайт, и вы будете получать сообщение об ошибке по типу такого:

Рубрика: Uncategorized | Метки: , | Добавить комментарий

Как получить RSS фид facebook страницы

Пропустить моё предисловие и перейти к делу ⇒

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

Что мне особенно не нравится в фейсбуке — это то, что я не контролирую, какой контент я там потребляю. Я подписываюсь на некоторые страницы, а фейсбук внезапно решает что кое-что на этих страницах недостойно моего внимания, и не показывает мне этот контент. Как бывший жж-юзер (сначала), а сейчас RSS-читатель (с тех пор, как ЖЖ скотился в сраный суп), я привык к тому, что я сам выбираю, что мне читать. Мне не нужны алгоритмы, решающие за меня, что важно, а что — нет. Если сайт/блог перестаёт быть полезным или интересным, я отписываюсь от него. Если какой-то пост требует больше времени, чем у меня есть, я переношу его в свою личную тулзу “ссылки-на-почитать”.

Вот статья с объяснениями о том, что такое “facebook page reach” и почему фейсбук что-то там подкручивает (да, ради монетизации).

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

Короче, я удалил свой фейсбук аккаунт и понял, что на фейсбуке была пара страниц с уникальным контентом, который нигде, кроме как на фейсбуке, не дублируют (по какой-то причине). Дублировали бы у себя на сайте, подписался бы на RSS и всё.

Поэтому я захотел подписаться на эти фейсбучные страницы по RSS. Это может быть полезно для того, кому нужно мониторить много страниц на фейсбуке (какой-нибудь SMM-старшеклассник, например, или просто кто-нибудь, у кого много лишнего времени).

Узнал две новости: Плохая: личные страницы (по типу моей, которую я удалил), RSS-потоков не имеют. Хорошая: у неличных страниц есть RSS.

Но фейсбук не шибко их афиширует. Догадайтесь, почему.

Итак, как же всё-таки получить адрес RSS (Atom) потока определённой фейсбук страницы?

Единственная вещь, которую вы должны для этого знать об этой странице — это её ID. ID некоторых страниц видно прямо в URLе, например www.facebook.com/pages/The-Barbers/283093047764.

У других страниц ID в адресе нет, например www.facebook.com/SMMrussia, и как раз для таких страниц я и сваял простенький инструмент для получения айди фейсбук-страницы (и урлов для фидов).

Если у вас уже есть ID интересующей вас страницы, просто пропустите первое поле и вбейте число сразу во второе.

Facebook page URL:


ID фейсбук страницы:


URLы фидов на фейсбуке:

Я выбираю RSS, потому что Atom с русскими буквами у фейсбука ожидаемо глючит.

Рубрика: Uncategorized | Метки: , , | Добавить комментарий

Этот файл надо будет заменить

This file should be replaced by the current license file when built.

Ничего сенсационного в этом скриншоте нет – подумаешь, программист использовал болванку вместо текста лицензии, а заменить болванку на актуальный текст лицензии ни у кого руки не дошли.

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

Рубрика: Uncategorized | Метки: , | Добавить комментарий

Забавная бага «Произошла ошибка предварительного просмотра печати» в Хроме

Три ссылки для того, чтоб распечатать текущую страницу:

<a href="#" onclick="window.print();">print it #1</a>

<a href=“#” onclick=“window.print();return false;”>print it #2</a>

<a href=“javascript:window.print()”>print it #3</a>

Вопрос: что не так с одной из них?

Эти же ссылки кликабельные: print it #1, print it #2, print it #3

Ответ: первая ссылка запускает интерфейс печати в Google Chrome, но при этом Хром не отрисовывает предпросмотр страницы с ошибкой «Произошла ошибка предварительного просмотра печати». В Firefox и IE все три ссылки работают нормально.

Рубрика: Uncategorized | Метки: , , , | Добавить комментарий

Сменить кодировку в Хроме

Вот как можно поменять кодировку страницы в Google Chrome (чтоб увеличить, нажмите):

multiple menus to change page encoding in google chrome

Вам не кажется, что гугл перебарщивает? Нажать на иконку, а потом пробраться сквозь трёхуровневое меню? И ещё: это я неправильный, или указатели (треугольники) справа от пункта меню, раскрывающегося налево, действительно сбивают с толку?

P.S. Это скриншот хрома под убунтой, но под виндой (xp) всё то же самое.

Рубрика: Uncategorized | Метки: , , | Добавить комментарий

Узнать количество дней в месяце на PHP

Задача: узнать количество дней в месяце на PHP, если $m – месяц, а $y – год.

Способ первый, выпендрёжный (источник):

(31 - (($m 1) % 2) - ((($m == 2) << !!($y 4)))) ?>

Этот способ не учитывает года, которые делятся на 100, но не делятся на 400 (1900 и 2100 не являются високосными).

Способ второй, канонический:

date("t",mktime(0,0,0,$m,1,$y));

Этот способ работает только для тех дат, которые представляемы в виде unix timestamp, т.е. работает плохо (и зависит от версии PHP + OS).

Способ третий, правильный:

function days_in_month($y,$m)
{//by val petruchek http://petruchek.com
    
$d 31;
    while(!
checkdate($m,$d,$y)) $d--;
    return 
$d;
}

Использует встроенную в PHP функцию checkdate() для валидации дат григорианского календаря, привязки к таймстемпу нет.

Рубрика: Uncategorized | Метки: , , | Добавить комментарий