пятница, 26 ноября 2010 г.

Vim: отображение скрытых символов

Эта статья является вольным переводом http://vimcasts.org/episodes/show-invisibles/, сделанным для себя. В дальнейшем планирую перевести остальные скринкасты.

Спецсимволы

В Vim`е можно включить отображение скрытых символов, таких как символы табуляции и перевода строки, при помощи команды :set list. Скрыть спецсимволы можно с помощь команды :set nolist или :set list!.

четверг, 25 ноября 2010 г.

Решение проблемы с подвисаниями Opera


На машине использовался HandyCache для кэширования и блокирования ненужного контента.

В настройках браузера не была включена опция использования HTTP 1.1. для proxy-сервера. После включения этой опции подвисания при загрузки страниц прекратились.

пятница, 10 сентября 2010 г.

Отправка RAW_POST_DATA средствами php

Столкнулся с сабжем. Вот, что получилось средствами php:

<?php
$host = 'localhost';
$path = '/test.php';
$port= 80;
$data = 'Some data';

$fp = fsockopen("$host",$port, $errno, $errstr);
if (!$fp) {
 echo "$errstr ($errno) <br/>\n";
}
else {
 $out = "POST $path HTTP/1.0\r\n"
  ."Host: $host\r\n"
  ."Content-Type: text/html\r\n"
  ."Content-Length: ".strlen($data)."\r\n"
  ."Connection: close\r\n"
  ."\r\n"
  .$data;

 fwrite($fp, $out);
 echo "<pre>";
 while (!feof($fp)) {
  echo fgets($fp, 128);
 }
 fclose($fp);
}
?>

P.S. После питона стал пропускать ";"

пятница, 30 июля 2010 г.

Python: Генератор ipfilter.dat для uTorrent

Начал изучать Python, а т.к. на практике дело движется веселее и имеется потребность в генерации свежих фильтров для uTorrent'а, начал писать генератор ipfilter.dat из имеющегося списка подсетей.

Есть несколько специфических особенностей генератора:

1. Адреса и маски подсетей хранятся в двоичном формате. Это было сделано для удобства отладки.

2. Т.к. данные в двоичном виде в питоне, на самом деле, хранятся в виде строки, то с этим возникают некоторые проблемы. Для произведения математических операций приходится преобразовывать в int. Например для получения следующего ip адреса приходится городить такую конструкцию bin2ip(bin(int(File[i][1],2) + 1)). С шестнадцатиричным ещё не разбирался, если он храниться не ввиде строки, то переведу на него. Тем более нет большой разницы в преобразовании ip адреса из bin'а или hex'a, бъём строку на 4 подстроки, которые преобразуем в числа.

3. Первоначально в регэкспе на парсинг диапазона вида: xxx.xxx.xxx.xxx yyy.yyy.yyy.yyy, между адресом и маской стоял пробел, который в последствии заменил на \s+, ибо попалась запись в которой разделителем была табуляция.

Сырцы, как обычно на googlecode

P.S. Если есть конструктивные замечания и предложения по коду, буду рад услышать и обсудить.

воскресенье, 20 июня 2010 г.

Test post from the googlecl

I'm posting from commanf line

GoogleCL - консольная утилита для сервисов Google

Google анонсировала консольную утилиту для работы со своими сервисам.

Подерживаются Blogger, Calendar, Contacts, Docs, Picasa и Youtube.

Примеры команд

Blogger

  • google blogger post --tags "GoogleCL, awesome" --title "Test Post" "I'm posting from the command line"
  • google blogger post blogpost.txt
  • google blogger list title,url-site # List posts
  • google blogger delete --title "Test Post"
  • google delete --title "Silly post number [0-9]*" # Delete posts matching regex
  • google tag --title "Dev post" --tags "Python, software" # label an existing post

Calendar

  • google calendar add "Dinner party with George today at 6pm" # add event to calendar
  • google calendar today # List events for today only.
  • google calendar list --date 2010-06-01,2010-06-30 # List events.
  • google calendar delete --title "Dinner party with George" # Delete an event.

Contacts

  • google contacts add "J. Random Hacker, jrandom@example.com"
  • google contacts list name,email --title "J. Random Hacker"
  • google contacts delete --title "J. Random Hacker"

Docs

  • google docs delete --title "Evidence"
  • google docs list title,url-direct --delimiter ": " # list docs
  • google docs upload the_bobs.csv ~/work/docs_to_share/*

gdata-python-client >= 1.3.0 ONLY

  • google docs edit --title "Shopping list" --editor vim
  • google docs get --title "Homework [0-9]*"

Picasa

  • google picasa create --title "Vermont Test" --tags Vermont vermont.jpg
  • google picasa get --title "Vermont Test" /path/to/download/folder
  • google picasa list title,url-direct --query "A tag"
  • google picasa post --title "Vermont Test" ~/old_photos/*.jpg # Add to an album
  • google picasa tag --title "Vermont Test" --tags "places"
  • google picasa delete --title "Vermont Test" # delete entire album

Youtube

  • google youtube post --category Education --devtags GoogleCL killer_robots.avi
  • google youtube delete --title "killer_robots.avi"
  • google youtube list # list my videos
  • google youtube tag -n ".*robot.*" --tags robot

P.S.: Установка GoogleCL под WinXP [eng]

P.P.S.: У меня заработало, но есть проблемы с отображением unicode в виндозной консоле.

Авторизация в сервисах Google происходит через браузер установленный по умолчанию, но можно в конфиге указать любой другой, через который будет происходить авторизация

Свой конфигурационный файл я обнаружил: c:\Documents and Settings\%user_name%\.googlecl\config

среда, 19 мая 2010 г.

Яндекс: Методы управления поведением робота

Мета-теги

Мета-теги позволяют вебмастерам указывать метаданные о странице сайта. Ряд мета-тегов также используется роботами поисковых систем. Робот Яндекса учитывает содержание следующих тегов:

  • <meta name="Keywords" content="..."/> — может учитываться при определении соответствия страницы поисковым запросам,
  • <meta name="Description content="..."/> — содержание данного тега может использоваться в сниппетах (описаниях сайтов на странице результатов поиска),
  • <meta http-equiv="Content-Type" content="type; charset=..."/> — робот может учитывать этот тег при определении типа документа и его кодировки,
  • <meta http-equiv="refresh" content="N;url=_адрес цели перенаправления_"/> — перенаправление (редирект) пользователя на страницу с адресом url, после N секунд нахождения на данной странице. При небольших значениях N считается временным перенаправлением, аналогичным серверным редиректам с HTTP-кодом 302/303/307.

Также робот Яндекса учитывает указания в тегах:

  • <meta name="robots" content="all"/> — разрешено индексировать текст и ссылки на странице, аналогично <meta name="robots" content="index, follow"/>
  • <meta name="robots" content="noindex"/> — не индексировать текст страницы,
  • <meta name="robots" content="nofollow"/> — не переходить по ссылкам на странице и не индексировать их,
  • <meta name="robots" content="none"/> — запрещено индексировать и текст, и ссылки на странице, аналогично <meta name="robots" content="noindex, nofollow"/>
  • <meta name="robots" content="noarchive"/> — не показывать ссылку на сохраненную копию на странице результатов поиска.

Робот не узнает о документах, если ссылки на них стоят со страницы, содержащей мета-тег со значением nofollow, тем не менее, они могут быть проиндексированы, если где-либо еще на них указаны ссылки без nofollow.

Если мета-теги не указаны, по умолчанию они имеют положительное значение (index, follow, archive). В случаях конфликтов между тегами робот делает выбор в пользу значения по умолчанию.

Пример:

<meta name="robots" content="all"/>
<meta name="robots" content="noindex, follow"/>

Робот выберет значение all, текст и ссылки будут проиндексированы.

Тег со значением all не распространяется на noarchive.

Пример:

<meta name="robots" content="all"/>
<meta name="robots" content="noarchive"/>

Текст и ссылки будут проиндексированы, но ссылки на сохраненную копию в результатах поиска не будет.

Тег <noindex>

Для запрета индексирования служебных участков текста вы можете использовать тег <noindex>. Тег работает аналогично мета-тегу noindex, но распространяется только на контент, заключенный внутри тега в формате:

<noindex>текст, индексирование которого нужно запретить</noindex>

Тег noindex не чувствителен к вложенности (может находиться в любом месте html-кода страницы). При необходимости сделать код сайта валидным возможно использование тега в следующем формате:

<!--noindex-->текст, индексирование которого нужно запретить<!--/noindex-->

Атрибут rel="nofollow" тега <a>

Атрибут rel="nofollow" используется в теге <a> в формате:

<a href="url" rel="nofollow">текст ссылки</a> 

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

Источник: Яндекс для вебмастеров Помощь вебмастеру

среда, 12 мая 2010 г.

Яндекс: Список новых User-Agent Яндекс ботов

Mozilla/5.0 (compatible; YandexBot/3.0) — основной индексирующий робот.

Mozilla/5.0 (compatible; YandexBot/3.0; MirrorDetector) — робот, определяющий зеркала сайтов.

Mozilla/5.0 (compatible; YandexImages/3.0) — индексатор Яндекс.Картинок.

Mozilla/5.0 (compatible; YandexVideo/3.0) — индексатор Яндекс.Видео.

Mozilla/5.0 (compatible; YandexMedia/3.0) — робот, индексирующий мультимедийные данные.

Mozilla/5.0 (compatible; YandexBlogs/0.99; robot) — робот поиска по блогам, индексирующий комментарии постов.

Mozilla/5.0 (compatible; YandexAddurl/2.0) — робот, обращающийся к странице при добавлении ее через форму «Добавить URL».

Mozilla/5.0 (compatible; YandexFavicons/1.0) — робот, индексирующий пиктограммы сайтов (favicons).

Mozilla/5.0 (compatible; YandexDirect/3.0) — робот, индексирующий страницы сайтов, участвующих в Рекламной сети Яндекса.

Mozilla/5.0 (compatible; YandexDirect/2.0; Dyatel) — «простукивалка» Яндекс.Директа.

Mozilla/5.0 (compatible; YandexMetrika/2.0) — робот Яндекс.Метрики.

Mozilla/5.0 (compatible; YandexCatalog/3.0; Dyatel) — «простукивалка» Яндекс.Каталога.

Mozilla/5.0 (compatible; YandexNews/3.0) — индексатор Яндекс.Новостей.

http://webmaster.ya.ru/replies.xml?item_no=7783&ncrnd=1979

пятница, 30 апреля 2010 г.

CodeIgniter: Хэлпер show_errors

Сделал хэлпер с show_403(), по аналогии с show_404().

Код выложил в googlecode.

error_403.php для /application/errors/ прилагается :)

CodeIgniter 2.0: load_class

Изменился формат вызова load_class.
Был:

/**
* Class registry
*
* This function acts as a singleton. If the requested class does not
* exist it is instantiated and set to a static variable. If it has
* previously been instantiated the variable is returned.
*
* @access public
* @param string the class name being requested
* @param bool optional flag that lets classes get loaded but not instantiated
* @return object
*/
function &load_class($class, $instantiate = TRUE)

Стал:

/**
* Class registry
*
* This function acts as a singleton. If the requested class does not
* exist it is instantiated and set to a static variable. If it has
* previously been instantiated the variable is returned.
*
* @access public
* @param string the class name being requested
* @param string the directory where the class should be found
* @param string the class name prefix
* @return object
*/
function &load_class($class, $directory = 'libraries', $prefix = 'CI_')


Benchmark, Config, Controller, Exceptions, Hooks, Input, Lang, Loader, Model, Output, Router, Unicode, URI - теперь в 'core'.

P.S. Сегодня долго с Exceptions бился...