Архив

Публикации с меткой ‘программирование’

СМИ: Слишком Много Информации

18 Ноябрь 2011

Прежде чем разрабатывать систему защиты системы, убедись, что система не работает против тебя. Очень часто, система авторизации возвращает слишком много информации в случае неуспешного логина. Например, в абстрактной системе (веб-сайт, или FTP-сервер или SIP-софтсвич) пытается авторизоваться злоумышленник, используя случайный логин vasya.pupkin и пароль 123456. Система ищет в списке пользователя vasya.pupkin и пытается сверить хеш пароля (вы же не храните пароли в базе данных открытом виде, правда?). Система быстро убеждается в том, что пользователя с таким именем не существует и отправляет ответ, что-то вроде “Invalid Username”(Неправильное имя пользователя) или “Username Does Not Exist”(Пользователь не найден). Вот Вам прекрасный пример принципа СМИ,- слишком много информации.

Почему? Читать далее...

, ,

Apple Autoingestion.class и прокси

19 Октябрь 2011

Собираю статистику по загрузкам своих приложений из Apple AppStore. Яблочники не так давно выпустили утилиту для загрузки отчётов, да вот беда,- не работает эта утилита через прокси, а у моего сервера другого доступа, кроме как через корпоративный прокси-сервер и нет. Пробовал устанавливать переменные окружения HTTP_PROXY и FTP_PROXY,- не помогает.
Читать далее...

, ,

Универсальный конструктор класса для PHP4-PHP5

10 Август 2011

Редко приходится работать с PHP, но всё-же иногда приходится. Чуть не сошёл с ума в попытке найти ошибку в чужом коде. На тестовой системе всё летало, а на боевой,- пустая страница. Закономерно оказалось, что версии PHP на тестовом и боевом серверах разные, а в коде используются классы с объявленными конструкторами в стиле PHP5. PHP4 про то, что нужно вызывать метод __construct() в качестве конструктора ничего не знает, пришлось уговаривать ;-)

В самом общем случае вариант универсального конструктора класса (для 4-й и 5-й версии PHP) выглядит вот так:

 
<?php
class Foo{
  # конструктор для всех версий
  function __construct($arg){
    # сделать что-нибудь при создании объекта
  }
 
  # конструктор для PHP < 5.0
  function Foo($arg){
    # сюда мы попадаем по умолчанию в ранних версиях PHP
    if(version_compare(PHP_VERSION,"5.0.0","<")){
      # вызываем конструктор
      $this->__construct($arg);
      # регистрируем деструктор
      register_shutdown_function(array($this,"__destruct"));
    }
  }
 
  # деструктор для всех версий
  function __destruct(){
    # сделать что-нибудь перед уничтожением объекта
  }
}
?>
 

, ,

Html, table, colspan и неизвестное количество столбцов

Много раз сталкивался с ситуацией, когда надо сделать ячейку таблицы, объединяющую все столбцы (например для подзаголовка группы строк или как footer для всей таблицы). Если наперёд знаешь сколько столбцов,- не проблема, есть стандартный атрибут colspan, указываешь количество объединяемых ячеек, например colspan="2", всё работает.
А если страница выводится скриптом и количество столбцов наперёд неизвестно? И нет возможности посчитать в шаблонизаторе? В последний раз такая задача возникла при использовании Django, там шаблоны очень удобные,но с математикой там туго, а писать собственный template tag или filter казалось излишеством. Выкручивался либо изменением шаблона (чтобы такое объединение ячеек вообще не было нужно) либо городил в коде дополнительный подсчёт количества столбцов, пока не надоело. А когда надоело,- полез гуглить.

Оказалось, что не я один "хочу странного", куча народу уже сталкивалась с такой-же проблемой. Пробовали писать colspan="all" или colspan="0", - не во всех браузерах работает. На stackoverflow даже народ упёрся,- и там нашлось решение,- рекомендуют писать colspan="100%".

Попробовал на доступных браузерах,- работает везде.

,

Linux в браузере

Буквально вчера (16 мая 2011 года) в интернете запустился проект jslinux (эмулятор PC с Linux на javascript в браузере) от уважаемого мужчины по имени Фабрис Беллар. Эмулятор для запуска Linux полностью написан на JavaScript. При входе на страницу отображается консоль, на которой начинается загрузка Linux с нуля до момента отображения рутовой консоли. В консоли работает куча стандартных команд, вплоть до компилятора TCC. И всё это работает прямо в браузере. Крутизна необыкновенная.

, ,

XLWT – создание Excel в Python

22 Декабрь 2010

Очередной квест про программирование на Python,- помимо потребности прочитать Excel из Python появилась необходимость создать файл Microsoft Excel. Оказалось, что для xlrd (чтение Excel) существует парный пакет xlwt,- для создания файлов. Пакет позволяет создавать файлы с несколькими вкладками (sheet), применять форматирование в ячейках, вставлять формулы и кучу других полезных вещей. Поддержка кодировок на уровне, для русского языка достаточно при инициализации файла (книги, workbook) указать требуемую кодировку:

book = xlwt.Workbook(encoding='cp1251')

Все строки будут прозрачно перекодированы при записи в ячейки, если, конечно, вы пишете на python в UTF-8.

, ,

Qt4: декомпиляция файла ресурсов rcc

13 Декабрь 2010

Некоторое время ковырял файл ресурсов, получаемого с помощью компилятора ресурсов rcc (Qt4). При помощи исходников компилятора удалось восстановил для себя структуру файла, может быть кому-то понадобится.

Читать далее...

, ,

Семейный бюджет

23 Ноябрь 2010

КошелёкДошли руки попробовать облачный Google Application Engine. Сделал на питоне простенькое приложение для учёта финансов.

Киллер-фича,- возможность совместной работы (например муж+жена) с общими деньгами.

Если кому надо,- пользуйтесь, вход по гугловскому аккаунту.

, , , ,

ef bb bf – ползёт разметка в Django

10 Ноябрь 2010

Столкнулся с необъяснимым на первый взгляд явлением,- на одной из страниц Django'вского приложения необъяснимо разваливалась разметка страницы. Только на одной. Смотрю исходник страницы,- на первый взгляд всё в порядке, только какая-то чёрточка странная и посторонняя в самом начале HTML кода. Причём эта самая необъяснимая чёрточка видна далеко не во всех редакторах. В попытке вяснить причину добрался аж до просмотра в HEX,- оказалось, что там целые 3 байта EF BB BF, а не чёрточка. Остальное дело техники: эти байты,- признак ByteOrderMark. Осталось просмотреть все шаблоны, из которых генерируется страница, поскольку BOM может быть в любом из файлов, даже вложенном. У меня оказалось, что BOM присутствует в файле шаблона аж на третьем уровне вложенности шаблонов. Не забывайте проверять, в каком формате сохраняете файлы

, , , ,

Мифическая платформа

23 Сентябрь 2010

sizeof(int*) != sizeof(char*)