Евгений Степанищев

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

Некоторые проблем SQLite

Товарищ Адепт пишет в ЖЖ про проблемы SQLite. Если вкратце, то выявлены есть минимум две проблемы.

SQLite при снятии дампа «CREATE VIEW» выписываются в порядке создания. Если у нас две вьшки, «A» и «Б», созданные в порядке перечисления и мы пересоздаём вьюху «А» с использованием «Б», то при заливке дампа будет ошибка — в дампе-то первым будет создание вьюшки «А», которая попытается использовать несуществующую вью «Б».

Если создана вью, в конце которой комментарий стоит, то и в дампе будет комментарий в конце строки создания, экранирующий конечную точку с запятой.
create view commented_view
  as select something
       from some_table -- pretty useless view;
create view another_view as…
Комментировать
28 января 2012 11:44

Стеганография и пробел нулевой длины

Болею, не спится мне. Вспомнил старую свою идею.

В Юникоде есть такой символ замечательный — пробел нулевой длины (код 0x200B), на печать не выводится, понимается всеми современными браузерами и большинством редакторов. Интервала между буквами, как следует из названия, не даёт.

Идея простая, позволяет прятать в текст другой текст, так, чтобы первый не менялся, а второй всегда копировался вместе с первым. Основная мысль — пользуясь буквами исходного текста, как разделителем, ставим между ними столько пробелов нулевой длины, чтобы их число равнялось коду скрываемого символа.

Например. Дан текст: «Болк», в нём надо скрыть короткий текст: «yes». Я взял английские символы, чтобы не заморачиватсья с кодировкой.

Коды символов «yes» — 121, 101, 115. Значит текст приобретает следующий вид:

[121 символ пробела нулевой длины]Б[101 символ пробела нулевой длины]о[115 символов пробела нулевой длины]лк

Можно, кстати, вычитать из кода символа 31, если мы не планируем использовать символы перевода строки и табуляции в скрываемом тексте. Небольшой код на Пайтоне, приведённый ниже, иллюстрирует идею.
​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​#​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​E​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​x​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​a​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​m​p​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​l​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​e​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​b​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​y​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​E​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​v​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​g​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​e​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​n​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​y Stepanischev
from itertools import groupby, izip_longest
import sys
import codecs

sys.stdin = codecs.getreader('utf-8')(sys.stdin)
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

toenc = 'Evgeny Stepanischev'
input = sys.stdin.read()

def decode(input):
    return ''.join(chr(31+len(list(x[1])))
            for x in groupby(input, lambda x: x == u"\u200b") if x[0])

def encode(input):
    if len(input) < len(toenc):
        raise ValueError()

    return ''.join(x[0] + x[1]
            for x in izip_longest((u"\u200b" * (ord(x)-31)
            for x in toenc), input, fillvalue=''))


print(encode(input) if input.find(u"\u200b") == -1 else decode(input))
Если на вход ему подать текст без пробелов нулевой длины, он добавит в него скрытый текст, иначе попытается его оттуда извлечь.

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

Конечно, важна длина текст — таким способом не скрыть текст, длина которого много больше исходной, но способ можно и улучшить в этом смысле. Например, в качестве прерывающего символа выбрать что-то другое, что не выводится на экран как символ. Например, управляющий символ смены направления текста или что-то в этом роде.
14 комментариев
23 января 2012 02:11

Ёлки…

Смотрели «Ёлки-2»? Там есть момент, когда пассажирский самолёт с отказавшими двигателями садится на всеми забытую полосу, которую, однако, поддерживает в «боеспособном» состоянии её смотритель, не теряя веры, что она когда-нибудь пригодится.

Сегодня наткнулся на замечательный сайт «ТУГЕЗА», а там — на следующее описание:
Сергей Сотников – начальник вертолётной площадки в селе Ижма. Еще двенадцать лет назад эта площадка была пусть небольшим, но аэродромом. Но, как это часто бывает, бюджет урезали, взлётно-посадочную полосу закрыли и самолёты летать перестали.

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

В сентябре 2010 у Ту-154, летевшего из Якутии в Москву, отказали двигатели, и пилотам пришлось сажать самолёт с 72 пассажирами посреди тайги. Им повезло: на глаза попалась та самая списанная взлётно-посадочная полоса, за которой присматривал Сергей. Самолёт сел, все пассажиры остались целы.
История-то оказалось невыдуманной.
12 комментариев
22 января 2012 20:16

Почерк

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

Поэтому лежу в постели, смотрю фильмы и ем всякое полезное и противное.

В одном из фильмов речь зашла речь о почерках и я вдруг подумал, что я, при случае, не распознаю почерк жены, хотя мы с ней вместе вот уже скоро пять лет. Мы так мало пишем вручную, что я собственный-то почерк неуверенно узнаю́.

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

Это не хорошо и не плохо, просто как факт.
3 комментария
21 января 2012 22:31

«Альфа-банк» через восемь лет

20-й год? (49.16КБ) Я уже жаловался на ужасный интернет-клиент «Альфа-банка», но в прошлый раз то, что он показывает поддавалось хоть какой-то логике.

Сегодня я заметил, что у меня в некоторых платежах встречается тринадцатый и даже двадцатый год. Что бы это значило?
17 комментариев
21 января 2012 22:25

Всякая мелочь одним постом-8

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

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

Почему-то для многих трудная тема — использование «float» в CSS хорошо рассмотрена в статье «Float'омагия: пробуем не „плавать“ в спецификации, чтобы не утонуть в потоке» на «Хабре».

Некто Номина Обскура написал реальную (хочется верить) историю о том как звонок в горячую линию ФМС помог улучшить на 15 минут работу одного из учреждений. Кстати говоря, я как-то несколько лет назад звонил в горячую линию «Сбербанка», обслуживание в одном из отделений тоже улучишилось.

В Вильнюсе живёт Донатас Дубаускас (так же известный как Спящий Бык), местная достопримечательность. Донатас интересуется жизнью индейцев пауни и изготавливает вручную на продажу уникальные вещи, все в единственном экземпляре — индейские одежду, обувь, сумки, кошельки и т.п.

Германия готовится запретить перекуры на работе. Основной аргумент следующий: курильщики «получают возможность сделать дополнительный перерыв, а значит, подвергают дискриминации некурящих сотрудников… страдают работодатели, вынужденные оплачивать эти пробежки до „специально отведенного места“».
15 комментариев
21 января 2012 16:42

Лондонские сендвичи

Лондонские сендвичи (64.99КБ) Справа — фотография логотипа лондонского метро, сделанная Ильёй в Лондоне, в мае. Слева — логотип какой-то сендвичной, на улице Университетской, в Казани. Сегодня успел заснять из окна автомобиля сотовым телефоном.
7 комментариев
19 января 2012 20:44

КГУ

Я помню, что когда учился в КГУ, в Казанском Государственном Университете (сейчас он называется КФУ), мы шутливо расшифровывали его как «Как будто Где-то Учился».

Я ещё знаю расшифровки ВУЗов «Могила Вырытая Трудами Учёных» (МВТУ), «Хер Где Такое Увидишь» (ХГТУ), «Моя Тут Учёба — Совершеннейший Идиотизм» (МТУСИ), «Много Алкоголиков, Мало Инженеров» (МАМИ), «Место Исторического Развития Эпидемии Алкоголизма» (МИРЭА).

У аббревиатуры вашего ВУЗа была альтернативная расшифровка?
29 комментариев
19 января 2012 09:39

Ещё про названия на русском языке

Я уже как-то писал про своё отношение к названиям на русском языке, того, что в настоящее время по недоразумению пишется по-английски.

У меня ещё один аргумент появился.

Прочитайте вот эту аббревиатуру: НТС. Если вы прочитали её как «ЭйчТиСи», вы сделали ошибку, потому что я написал «ЭнТэЭс», это аббривеатура компании «НефтеТрансСервис».

Я уже не раз в текстах встречался с ситуацией, когда я не могу понять по виду слова и контексту на каком языке оно написано и, следовательно, как его читать. Такой проблемы не было бы, если я мог бы по окружающим словам понять, что читать надо по-русски. Т.е. в русскоязычном тексте это должны быть русскоязычные аббривеатуры, если явно и специально не написано иное.
58 комментариев
18 января 2012 16:14

О закладках в БИОСе

Показали хорошую статью на «Ксакепе»: «Китайские закладки: непридуманная история о виртуализации, безопасности и шпионах», читается как детектив, хотя сомнений в том, что это может быть правдой у меня нет.
8 комментариев
18 января 2012 11:25

Голубые ещё и твиттили

Голубые иконки (37.80КБ) Что мне очень не нравится в «Айпаде» — это обилие в основных приложениях иконок неразличимых краем глаза. Мне сложно, не фокусируя на них взгляд, различить куда ткнуть. На скриншоте «Эпп стор», «Почта», «Сафари» и «Твиттер» на почти одинаковых плашках с преимущественно белыми элементами внутри. Рассеянным взглядом мне сложно уловить значимую форму на таких иконках. Контуры (4.41КБ) Думаю, этому три причины: голубой цвет (человеческий глаз вообще хуже всего воспринимает именно синий спектр), одинаковые очертания (иконка и подложка воспринимаются как единое целое) и практически идентичная цветовая гамма. Несфокусированный взгляд ловит только края и какую-то мешанину основных цветов, без деталей, я размазал изображение для иллюстрации.

В этой связи мне подумалось, что если на «Айфоне» стандарт иконки «плашка со скруглёнными краями, на ней, в центре суть приложения» не мешал — там весь экран сразу охватывался сфокусированным взглядом, то в «Айпаде» это может и не работать, площадь больше, приходится шарить глазами и тут подошли бы больше иконки без плашек, c очертаниями, как это сделано во «взрослых» операционных системах.

Вполне допускаю, кстати, что основная масса людей постоянно переключает фокус на разные части экрана, возможно в том, что я этого не делаю, основная причина того, что глаза за экраном устают у меня меньше, чем в среднем у других людей.
11 комментариев
18 января 2012 09:38

Персональный лайфхак против «болтанки» в самолёте

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

Иногда трясёт так, что даже стюардессы бледнеют, как-то наблюдал это уникальное явление.

В таких случаях, я, чтобы взять себя в руки, представляю что еду в машине. Мне это представить легчем, чем многим, я же не вожу машину и мне не нужен руль для стимуляции фантазии. Я даже глаза не закрываю, просто напрягаю фантазию и, ррраз, я уже еду в машине. Тряски в машине никто не боится. Не боюсь и я.

А как вы себя успокаиваете в этом случае? Или вас это просто не беспокоит?
30 комментариев
16 января 2012 14:52

Как говорят в Адыгее

Гощу у родственников, они живут в Ханском, это недалеко от Майкопа (Адыгея).

Интересен местный говор, наверное он более ростовский, чем адыгейский, не знаю. Сразу слышишь две вещи. Первое — вместо русского твёрдого «г», употребляют украинское, мягкое, второе — ударения иногда ставят очень необычно, например «по́минки».

Остальное постепенно всплывает в разговоре: «что я тебе хочу сказать за…», «гля» (от «глянь») и т.п.

В Адыгее тепло по нашим меркам. Сейчас середина января, вчера шёл дождь, плюс шесть температура, слякоть, сегодня лежит небольшой снег, но температура всё равно плюсовая. Но в феврале бывают и сильные заморозки, почти до тридцати. Летом — парилка, примерно 45 градусов тепла.

Рассказали, что в Адыгее очень низкие зарплаты, вроде как по статистике самые низкие по стране. Несколько тысяч рублей считается уже нормальной зарплатой. Высокий уровень безработицы, работу сложно найти.
12 комментариев
15 января 2012 11:54

CSS hack: firefox 3.5+

Для «Файерфокса» есть простой, не то чтобы даже CSS-хак, а просто метод «обнулить» свойство специальным значением, если именно для этого браузера это и требуется. В CSS3 для этого придумано значение «initial», которое «Файерфокс» поддерживает должным образом с версии 3.5 (для некоторых свойств это значение поддерживается аж с первой версии). Значение поддерживается с префиксом, что и позволяет его использовать как своеобразный CSS-хак:
body {
    background-color: red;
    background-color: -moz-initial; /* для FF — значение свойства по-умолчанию */
}

.blk {
    display: none; /* для всех браузеров блок скрыт, */
    display: -moz-initial; /* кроме FF */
}
Браузеры на основе «Вебкит» так же поддерживают это значение (со 125 сборки), правда безо всякого префикса.
2 комментария
12 января 2012 08:59

К ✈ М ✈ К → М → К ✈ М ✈ К

Эта шифровка наверху означает, что я в субботу и воскресенье (14 и 15 числа) буду в Майкопе, это Адыгея.

Лечу из Казани в Москву, оттуда в Краснодар, оттуда еду в Майкоп, потом в обратном порядке.
14 комментариев
11 января 2012 14:04