вторник, 31 августа 2010 г.

Ruby. Raspell example

require 'raspell'
require 'kconv'
require 'jcode'
$KCODE = 'u'
speller = Aspell.new("en_EN")
speller.suggestion_mode = Aspell::NORMAL
speller.set_option("encoding", "utf-8")
word = "tezt"
p word # => "tezt"
p speller.check(word) # => true
p speller.suggest(word) # => ["test", "text"]

пятница, 27 августа 2010 г.

Postgres. Создание новой БД, если ее кодировка не совместима с кодировкой базы-шаблона

Если вы начинающий пользователь в Postgres, то при создании новой БД (например в кодировке UTF8), часто вылазит ошибка:

ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (WIN1251)
HINT: Use the same encoding as in the template database, or use template0 as template.

Которая означает, что кодировка базы - несовпадает с кодировкой шаблона (например UTF8 и WIN1251).

Для решения проблемы (для UTF8), используйте SQL:

CREATE DATABASE db_name WITH template=template0 encoding=6

среда, 25 августа 2010 г.

JavaScript ошибка в IE при использовании переменной с именем item

Сегодня обнаружил прикольный баг IE - непонятно почему выпадал эксепшин на странице (строго под IE).

В ходе дебага выяснилось, что причиной недовольства господина IE была переменная с именем item. Хотя она и не состоит в списке зарезервированных имен javascript.

Предельно внимательно относитесь к именам переменных в javascript. Проверяйте скрипты на кросс-броузерность.

пятница, 13 августа 2010 г.

Thinking Spinx. Разрешить использовать спец. символы в строке поиска

Если в ключевике понадобится использовать спец. символы (например найти товары по тегу Б\У) то поиск будет работать неправильно.
В случае когда ключевое поле содержит такие символы - их надо прописать как разрешенные в конфиг-файле /config/sphinx.yml (добавить для каждого блока и потом перезапустить сам sphinx):

development:
  ...
  charset_table: "0..9, A..Z->a..z,a..z, _, -, /, @, !, $, %, ^, &, (, ), +, `, ~, #"

production:
  ...
  charset_table: "0..9, A..Z->a..z,a..z, _, -, /, @, !, $, %, ^, &, (, ), +, `, ~, #"

Для того чтобы экранировать символы в строке поиска используйте класс который устанавливается вместе с плагином:

Riddle.escape(str)

Который экранирует те символы которые не поддерживаются

четверг, 12 августа 2010 г.

Rails. Проблема установки Curb gem под Ubuntu

Если возникает ошибка при установки гема curb:

gem install curb

Необходимо установить следующий пакет и попробовать заново:

sudo apt-get install libcurl4-openssl-dev

вторник, 10 августа 2010 г.

JavaScript replace

Пример демонстрирует как заменить подстроку в строке:

str="apple,lemon,cherry,apple,etc"
str = str.replace(/apple/, "test")

в результате получим строку: "test,lemon,cherry,apple,etc"
Заменило только первое вхождение. Для глобальной замены по всей строке, используется ключик глобал для регулярного выражения - "g":

str="apple,lemon,cherry,apple,etc"
str = str.replace(/apple/g, "test")

Получим:"test,lemon,cherry,test,etc"

Если необходимо чтобы регулярное выражение было нечувствительное к регистру символов:

str="Apple,lemon,cherry,apple,etc"
str = str.replace(/apple/gi, "test")

Получим:"test,lemon,cherry,test,etc"

понедельник, 9 августа 2010 г.

Linux. Узнать конфигурацию компьютера

Процессоры:
# cat /proc/cpuinfo

Объём оперативной памяти:
# free

Список PCI устройств и мостов:
# lspci

Список USB устройств
# lsusb


Вывести размер, а так же свободное и занятое место на всех смонтированных файловых системах. 

# df -h


Размер папок в текущей директории (выберите через cd нужную директорию которую надо просканировать)
#du --si --max-depth=1


Размер папок и файлов в текуще директории
#ls -lh


*(ключик -h означает humanise - вывести инфо в "читабельном" виде)

вторник, 3 августа 2010 г.

Bash. Построчное чтение файла и разбивка строк с использованием делимитера

В посте постараюсь описать алгоритм построчного чтения текстового файла и разбиение его строк на части.

Допустим мы имеем текстовый файл такой структуры:

...
username1;password1
username2;password2
username3;password3
...

Пример просто для наглядности, пароли хранить так не безопасно.

#!/bin/bash

while read line ; do
  IFS=";"
  set -- $line
  username=$1
  password=$2
  echo -e "$username->$password\n"
done < filename.csv


Рассмотрим детальнее:
- цикл читает файл построчно, сохраняя текущую строку в переменной line
- IFS=";" выставляем делимитер разбивки (в нашем случае ";")
- set -- $line - разбиваем строку, после чего каждая ее часть будет доступна как $1, $2, ...