Эксперт в области разработки веб-приложений и безопасности в интернете. Каждый месяц мой блог посещают около 90 тысяч человек. Работаю техническим директором в «Системах документооборота», занимаюсь электронным правительством.

$len = strlen($text);
for ($pos = $cutted = 0; $cutted < $cut && $pos < $len; ++$cutted)
{
$ch = ord($text[$pos]);
// multibyte char
if (0x80 & $ch)
{
for (; $ch & 0x80; ++$pos, $ch <<= 1);
}
else
{
$pos++;
}
}
Итак, лучший способ отрезать первые \$N символов UTF-8 таков: preg_replace('/^(.{'.\$N.'}).*\uSs', '\1', \$text)
Когда клиент говорит что-то навроде «вы же профессионалы» — это означает следующее: «я ни хрена не понимаю в том. что вы будете делать, но не позволю сделать так, как надо,а напротив — выебу мозг настаивая на своих тупых хотелках, и на том, что насоветовали мне мои друзья, которые когда-то что-то слышали о предметной области, буду доставать вас по каждой мелочи и стенать над каждой копейкой, требуя урезать сметы и сделать все как можно дешевле. А когда выйдет в итоге нечто непохожее на воздушный замок моих мечтаний, я буду вздыхать „ну что же вы, вы же — профессионалы…“»Чудесная цитата с Bash. Запишу себе, чтобы не забыть.

Оружие (в т.ч. пневматическое) перевозится в упакованном виде, в изолированных от пассажирских салонов отсеках воздушного судна, при наличии у пассажира разрешения на право их хранения и ношения.С точки зрения авиакомпании, даже столовый нож — оружие, любая пневматика так же считается оружием.
Прием оружия к перевозке, оформление необходимых документов, доставка на борт воздушного судна в аэропорту отправления и выдачу оружия в аэропорту назначения осуществляет сотрудник службы авиационной безопасности (САБ).
Теперь о самой семье. Почему Богу было угодно разделить человека на мужчину и женщину? Именно разделить. Признаки этого разделения даже видны на мужском теле. Никто не может сказать, зачем мужчине два сосца на его груди. Они не несут никаких функций. У женщины понятно: предполагается, что она будет матерью, будет кормить дитя. А мужчина? У него нет даже молочных желез, но сосцы присутствуют. Загадка, тайна, на нее нет ответа. В Библии об этом тоже не говорится. «Вопрос на засыпку».Цитата из доклада «Библейские основы православной семьи», докладчик — протоиерей Димитрий Смирнов, второй международный конгресс «Мир семьи».
REM Flash ICQ Client version 1.0 build 2
REM #include <stdio.h>
REM Had to comment out the include line, VB didn't like it
REM Initialize contact list
10 CLS
REM CLS added by dfl 10 Dec 2003
15 OPEN DIALOG
REM 20 FOR I=1 to 100
REM dfl 27-Dec-2004, added support for 103 contacts
20 FOR I=1 to 103
30 READ CONTACT$
40 PRINT CONTACT$
50 NEXT I
REM Main application loop
60 INPUT "" COMMAND$
65 IF COMMAND$ = "EXIT" THEN GOTO 200
70 IF COMMAND$ = "SEND_MESSAGE" THEN GOTO 90
75 IF COMMAND$ = "GET_MESSAGE" THEN GOTO 100
78 IF COMMAND$ = "QUIT" THEN GOTO 82
REM $$ Todo: add support for multilingual input
80 GOTO 60
82 GOTO 130
90 SEND MESSAGE$
95 GOTO 60
100 READ IN_MESSAGE$
100 PRINT IN_MESSAGE$
110 GOTO 60
REM Begin client cleanup sequence
130 GOTO 150
150 GOTO 170
REM End cleanup, we're ready to die
170 STOP
200 END
REM END
mt = {}
function mt.__add (a,b)
return { x = a.x + b.x, y = a.y + b.y }
end
Задаётся метатаблица (mt) у которой ключ __add (функция, отвечающая за сложение) определена как функция сложения вектора с двумя координатами. Например, в следующем примере (все примеры взяты из статьи «Язык Lua и использование скриптов на нём в программах на C++») я устанавливаю заданную метатаблицу «mt» для переменной «u», причём сложение «u» и «v» работает правильно — поскольку Lua ищет обработчик сложения сначала у второго оператора, в случае неудачи — у следующего.u = { x = 1, y = 2 }
v = { x = 0, y = 1 }
setmetatable ( u, mt ) -- установить для таблицы u метатаблицу
w = u + v -- осуществить сложение таблиц
print ( w.x, w.y )
Самое интересное — дальше. Тут мой мозг не ломается, но без руководства я бы не догадался. Дело в том, что метатаблица «mt», точнее её операция «__add» определена некорректно. Сложение пройдёт великолепно, но у переменной «w» новой операции сложения не будет — метатаблица «mt» для этой переменной не установлена. Правильный способ определения вот такой:
function mt.__add (a,b)
return setmetatable ( { x = a.x + b.x, y = a.y + b.y }, mt )
end
Т.е. таблица устанавливается ещё и для получившегося выражения. (Для тех, кто уже ничего не понимает, но знает PHP. Запись «{ x = a.x + b.x, y = a.y + b.y }» на PHP выглядела бы как «array('x'=>\$a['x']+\$b['x'], 'y'=>\$a['y']+\$b['y'])»).