Архив ‘Работа’


Защита форм без капчи

google classic

Поговорим о новом способе защиты форм от спама без ввода цифр с картинки… Без вообще какого-либо ввода.

  1. Пишем алгоритм на JavaScript;
  2. Обфусцируем код, чтобы алгоритм не был в открытом доступе;
  3. Пишем серверный обработчик, проверяющий специальные поля формы.

Суть алгоритма следующая: (далее…)

Калькулятор спуска полос

Booklet creator

Хотел сначала написать свой калькулятор, так как adobe acrobat сам не умеет создавать буклеты (!), а аддоны платные. Но, погуглив, нашел сервис, который перетасовывает страницы pdf-документа, создавая буклет «на лету»: http://bookletcreator.com/

Они продают также офлайновую программу, но на сайте работает бесплатная онлайн-версия (до 20 мегабайт).

Кстати, в ворде можно из существующего документа напечатать буклет следующим образом:
Файл-Параметры страницы, выбрать в списке «несколько страниц на листе» пункт «брошюра», далее перейти на вкладку «размер бумаги» и выбрать «А3», чтобы текст не съехал. Потом просто печатаем и вуаля, — буклет готов!

А так хотелось создать красивый такой калькулятор на яваскрипте! Как-нибудь в другой раз.

Многострочные формулы LaTeX

Оба окружения array (матрица) и aligned можно использовать для набора многострочных формул. К обязательным требованиям таких формул я отношу возможность проставления номера точно напротив середины выражения.

В чем отличия этих окружений?

  1. Размер букв в дробях: у array уменьшается шрифт;
  2. Возможности выравнивания: array выравнивает влево, вправо или по центру, тогда как aligned позволяет выравнить следующие строки относительно предыдущей.

(далее…)

SQL-Рекурсия, версия замороченная

Написал функцию, которая осуществляет собственно sql-рекурсию, вызывая ваш callback на каждой итерации. Применять можно для таблиц всяких рубрикаторов, вложенность которых построена на т.н. parentID.

Поддерживаются дополнительные переменные, которые будут передаваться в callback-функцию. Сама функция весьма хитро жонглирует аргументами, давая возможность передать в sqlRecursion() любое количество дополнительных аргументов (после обязательных).
Единственное ограничение на sql-запрос: Ключевое поле ID должно идти первым, а родительский ID — последним.

/**
 * Recursively executes sql query by parentID
 */
function sqlRecursion($sprintf, $res, $callback, $level=0) {
  $ordering = 0; $a = func_get_args();
  $callbackParams = array_splice($a, 4);
  $tmp = qry($q=call_user_func_array('sprintf', $sprintf), $res);
  while($row = mysql_fetch_assoc($tmp)) {
    $tm = $callbackParams;
    array_unshift($tm, $row, ++$ordering, $level);
    // callback($row, $ordering, $some_vars)
    call_user_func_array($callback, $tm);
    // replaces parent id in sql structure $sprintf
    array_splice($sprintf,count($sprintf)-1,1,reset($row));
    $recParams = array($sprintf, $res, $callback, $level+1);
    array_splice($recParams, count($recParams),0,$callbackParams);
    call_user_func_array('sqlRecursion', $recParams);
  }
}

Пример использования прилагается.

// @example
 function myCallback($row, $ordering, $level, $var1, $var2) {}
 sqlRecursion(array(
     "select ID, %s from %s where parent = %d",
     // ID (keyfield) must be first,
     // parent id must be last in sql query
     'myField', 'myTable', 31337
    ),
    $mysqlResourceLink, 'myCallback', 0, $var1, $var2
 );

ini.js

Есть такой броузерный редактор с подсветкой кода — editArea.

editArea INI syntax highlight

Вот список языков, которые поддерживаются, но можно добавлять и свои:
basic, brainfuck, c, coldfusion, cpp, css, html, js, pas, perl, php, python, robotstxt, ruby, sql, tsql, vb, xml.

Мне приспичило подсветить INI-файлы, и я создал свою настройку ini.js.

Установка: скопировать файл ini.js в папку edit_area/reg_syntax/.

Программистсткая мудрость

Зачем что-то реализовывать самому, если можно легально использовать готовое?

Найден SMTP-сервер для Windows!

Ничего смешного, между прочим! Это вам не линух: под виндус бесплатный SMTP-сервер (отправщик эл. почты с локальной машины) — это экзотика.

Хочется выразить категорическое спасибо автору программы SPECTral Personal SMTP Server!

SPECTral Personal SMTP Server
(далее…)

LaTeX и иллюстрации, часть 2

LaTeX

Всем хорош TeX. Но не всегда получается работать с различными форматами изображений. Мое решение — переводить всё в PDF.
(далее…)

phpDesigner 2008

phpDesigner

Обзавелся неплохим редактором кода — phpDesigner от компании mpsoftware. (далее…)

Javascript: метод класса как обработчик события

Задача: сохранить доступ к переменным класса через this при запуске из какого-нибудь события (event).
В данном примере назначаем метод m класса www для события window.onresize.
(далее…)