Протухшие мировые новости

Google вконец слетел с катушек и занялся распознаванием речи на JavaScript. Наверняка это откроет новые горизонты для долбоёбов-сайтоделов. Фоновая музыка и мигающее меню — вчерашний день, голосовая навигация по сайту выбор нового поколения.

Пока гугл страдает фигнёй, Яндекс начал искать по мировому интернету.

В Японии же робот I-Fairy провёл брачную церемонию. Скоро должны последовать свадьбы роботов и роботов-гомосексуалистов.

Волнующие вести для всех патриотов: заработал первый кириллический домен http://xn--d1abbgf6aiiy.xn--p1ai/. Обращает на себя внимение часто повторяющееся киррилическое сочетание «х..н.».

И ещё больше радости патриотам: объем компьютерного пиратства в России вернулся на докризисный уровень.

Ubuntu 10.04 (рысь непереводимой расцветки) победно шествует по планете, поражая в первую очередь уёбищными кнопками на окнах.

Билл Гейтс продолжает порабощать мир. На этот раз с помощью ультразвуковой обработки яичек. Да, именно ультразвуковой обработки яичек. Да, именно ваших.

В тоже время робот из молекулы ДНК смог пройти 50 шагов, спиздить трактор и съебаться подальше.

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

Появилось сравнение производительности php_memcache и php_memcached. D сосёт.

На хабре разгорается срач по поводу ООП. Кто-то осмелился сказать, что ООП это не просто сухие термины и жесткие определения. Правда, после этого, как обычно, написал пять страниц еботы.

Как-то глухо проходит devconf. Что и неудивительно, так как самым ярким событием в мире веб-разработки за последнее время стал, как обычно всемирный пiхослёт в Киеве.

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

И что самое приятное на такое охуенном сайте, как Кинсбург.ру ещё есть свободные места под рекламу. Это ваш шанс.

Redis: установка на локалку (Ubuntu)

Redis logo
Не так давно, я публиковал здесь перевод официальной документации по Redis. Теперь попробуем пощупать этот самый Редис непосредственно.

Первым делом его, конечно же, нужно установить. Здесь я опишу установку на Ubuntu 9.10. Также подразумевается, что устанавливаем мы его не на рабочий сервер, а на собственную машину для личных нужд. Установка на другие nix’ы вряд ли будет сильно отличаться.

Официальной поддержки Windows нет. Есть отдельная сборка, которая у меня вполне работала. К сожалению, последний релиз датирован прошлым апрелем и содержит достаточно старую версию сервера (0.91).
Остальной текст под катом

Hostgen.py: генератор конфигов Apache под Win

Большая часть web-разработки проходит у меня на данный момент в Windows и под Apache. При этом часто приходится создавать локальные домены (и часто удалять их). При этом процесс создания обычно следующий:

  1. Вспомнить, где у меня лежит vhosts.conf и найти его
  2. Скопипастить одну из секций <VirtualHost>
  3. Внести в неё нужные изменения для нового домена
  4. Выдумать домену уникальный локальный IP и указать его тут же
  5. Откопать глубоко в недрах папки Windows файл hosts и добавить IP туда
  6. Перезапустить Apache
  7. PROFIT

Это утомляло мою лентяйскую натуру. Кроме того, я намеревался написать какую-нибудь простенькую утилитку на Python, для лучшего изучения этого, пока ещё тёмного для меня языка. Встречайте — Hostgen.py, может даже кому-нибудь пригодится. (Брать — здесь, zip 11K)
Остальной текст под катом

Mercurial-3: head всему голова

Это продолжение части 1 и части 2.

С момента написания предыдущей части прошло две недели, но за это время произошло немало событий. Зарелизились Mercurial 1.5 и TortoiseHg 1.0, а Джоэл Спольски написал туториал по mercurial. Что характерно, повествование своё, Джоэл разбавил логами виндовой консоли, что позволяет мне в тайне надеяться, что перед этим он читал мой блог :)

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

Сегодня тема будет небольшая и, на первый взгляд, простая. Однако и здесь можно запутаться. Итак — головы (heads) в Mercurial.
Остальной текст под катом

Redis: перевод официальной документации

Redis logo

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

Для тех, кто не в курсе: Redis, это хранилище типа «ключ-значение» (key-value). Как Memcached (вернее MemcacheDB с его постоянным хранением данных), только круче :).
 
От мемкэша Redis оставил себе скорость и простоту доступа к данным по ключам, а так же легкость в разнесении большого хранилища на множество серверов. Однако, если Memcached в качестве значений поддерживал только строки, то Redis поддерживает также более сложные типы данных (списки и множества). И, вместе с этими типами, также имеется большой набор атомарных операций над ними.

Таким образом, если Memcached это, по большому счёту, всего лишь система для кэширования, то Redis уже полноценная база данных (так называемая NoSQL-БД).

Если хорошо подумать, в большинстве веб-приложений, где используются реляционные БД (типа MySQL), их реляционность по большому счёту и не нужна. И их с большей эффективностью можно заменить на NoSQL-базы типа Redis’а. Особенно это касается высоконагруженных проектов, где требуется высокая скорость и масштабируемость (и нет недостатка в аппаратных ресурсах).

Относительно средних по размеру проектов — Redis может успешно дополнять тот же MySQL, забирая себе некоторые из его функций. Например, основные данных хранить в Redis, а индексы, выборки и сортировки оставить MySQL.

Итак: Перевод официальной документации по Redis на pyha-wiki.

Из наиболее интересного:

Tools: генерилка паролей

Новый полезно/бесполезный сервис — генерилка паролей.

Генерите себе пароли на любой вкус! По одному и целыми пачками :)

Плохая цобако

Писец, сколько людей упёртых не там, где надо. Нахватались поначалу «правильных советов от великих гуру» и теперь остальным мозг выносят. «Никогда не используйте eval», «никогда не используйте @ в PHP»…

Действительно ли никогда нельзя использовать собаку (@) в пыхе? Давайте просто головой подумаем.

Итак, как можно бороться с ошибками в программном коде? Есть два основных способа:

  1. Путём их игнорирования.
  2. Путём их корректной обработки.

Как всем нормальным людям ясно, первый способ (для которого часто и используется собака) ведёт нас прямиком в ад. Человека, который не обрабатывает ошибки в коде, никто не будет уважать, не подаст ему руки и никакая девушка не выйдет за него замуж.

Нам нужна корретная обработка. Однако, ошибки бывают разные и способы их корректной обработки тоже разные.

Первый тип ошибок: ошибки в программе. Синтаксическая ошибка, в запросе опечатались, лень было проверить существование запрашиваемого ключа в массиве и т.п. Аналог проверяемых исключений (RuntimeException). Корректная обработка подобных ошибок может быть только одна — исправление программного кода на этапе разработки. И для этого нам нужно чётко отлавливать их появление и ни в коем случае не подавлять сообщения о них. Здесь собака действительно вредна.

Второй тип — непроверяемые. Сервер базы данных отвалился, сокет не открывается. На этапе разработки мы не можем устранить возможность подобных происшествий. Единственное, что можем, это обрабатывать эти ситуации. Пример:

$lid = mysql_connect($host, $user, $password);
if (!$lid) {
    throw new Exception('MySQL fail');
}

Мы не спрятали голову в песок. Мы корректно обработали возможную ошибку. Но вот незадача — несмотря на это, mysql_connect() всё равно выкинет совершенно уже ненужный нам Warning.

К чёрту Warning!

$lid = @mysql_connect($host, $user, $password);
if (!$lid) {
    throw new Exception('MySQL fail');
}

Вывод: слушайте умных дядей, но и своей головой думайте.

Из последнего

Записался я на широко разрекламированный мастер-класс по javascript. Но, в последний момент, взял его и проеболел. Впрочем, как говорят очевидцы, событие не совсем отвечало заявленному лозунгу «Этот МК — отнюдь не об основах javascript». Одно радует: хоть и не ходил, но всё равно получил сертификат — повешу на стенку.

Обновил в своём бложике wordpress. Данный процесс оказался несколько напрягающим, но об этом отдельно. Если заметите ошибки, пожалуйста, напишите об этом.

Купил себе нетбук. Теперь я компьютеромобилен, но об этом тоже отдельно.

Вышел PHP 5.2.13, ничем, особенно, не примечательный.

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

Билл Гейтс сбежал в Антарктиду от конкурентов, а Пентагон разрешил социальные сети. Прокуратура не хотела закрывать torrents.ru, видимо, это вышло случайно.

P.S. Да, и ещё: наши хоккеисты проиграли, причём ни во что-нибудь, а в хоккей. Отовсюду слышны всхлипы «мы проиграли, мы проиграли». К счастью, я не могу о себе сказать, что проиграл, ведь я не играл, а сидел на диване.

так…

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

Очень неудобно получается, когда они их тоже не решают.

Mercurial: первые впечатления (часть 2)

Продолжаем разговор начатый в первой части.

Локальный репозиторий

Для примера, создаём тестовый каталог, допустим hg, а в нём папку с тестовым проектом, пусть будет my.
Теперь создадим там репозиторий: hg init.

C:\>cd hg\my

C:\hg\my>hg init

C:\hg\my>dir

21.02.2010  19:13    <DIR>          .
21.02.2010  19:13    <DIR>          ..
21.02.2010  19:13    <DIR>          .hg

Появившийся каталог .hg это и есть наша локальная репа. Не бойтесь, в отличии от SVN, он останется один и не будет лезть во все подкаталоги.

Остальной текст под катом

По страницам: 123456789101112131415