среда, 4 декабря 2013 г.

Битрикс-компонент «продвинутая форма»

Этот компонент работает с инфоблоками (рассматривается как замена модуля веб-форм). Поля формы берутся из свойств инфоблока и данные заполненной формы сохраняются в этот же инфоблок. Результаты формы так же отправляются на e-mail администратору и на e-mail, заполнившему форму (если имеется свойство с символьным кодом "email" и оно было заполнено). Шаблоны этих e-mail-ов хранятся как элементы другого инфоблока (см. инструкции ниже).

воскресенье, 18 ноября 2012 г.

Linux, Python и велосипеды: индикатор заряда батареи

Доброго времени суток! На домашнем компьютере я использую xubuntu, на которую поверх поставлен Openbox + LXPanel. К моему сожалению, стандартный индикатор батареи в LXPanel не захотел корректо работать, он лишь отображает — подключено ли питание от сети или нет, а заряд всегда отображается как 100%. Разумеется, я бы без особых проблем нашёл десяток тысячу-другую аналогичных индикаторов заряда батареи, но просто ради развлечения написал свой на Python, маленький скрипт на GTK2. Для запуска нужен, разумеется, — сам интерпретатор Python и PyGTK2. Для Debian и бунточек:
sudo apt-get install python python-gtk2
Скачиваем отсюда архив со Python-скриптом и папкой с иконками батареи, проверим что у скрипта battery_indicator.py есть права на исполнение и запускаем. Всё, индикатор батареи висит в системном трее, далее просто закидываем скрипт в автозапуск.

четверг, 27 сентября 2012 г.

Linux: Bash-скрипт для монтирования удалённых директорий по SSH или FTP (v0.3)

Приветствую читателя! На днях для использования в работе написал небольшой bash-скрипт для монтирования удалённых директорий по протоколу SSH или FTP, чтобы работать с проектом как с локальной директорией. Возможно читателю пригодится.

четверг, 2 августа 2012 г.

Табы или пробелы в коде? А зачем выбирать что-то одно?

Некоторое время я задавался этим вопросом, но всегда так или иначе предпочитал табы, и для меня это было гораздо удобнее и универсальнее, чем пробелы, несмотря на все нюансы. Единого стандарта у пробельных отступов нет, и я часто встречал код отступом в 2, 4 и даже 3 пробела (в зависимости от эстетических предпочтений программиста). Я сразу выкладываю карты на стол: в данной статье я не собираюсь приводить доводы предпочитать что-то одно, совсем нет, напротив, эти два метода сочетаются, и ещё как! И ваш код отнюдь не будет разваливаться если был написан на табах отступом в 2 пробела и открыт в редактора с отступом табов хоть в 10 пробелов! Тут уже можно спокойно варьировать шириной таба под самые извращённые эстетические потребности.

четверг, 28 июня 2012 г.

Node.JS: Вышла новая версия шаблонизатора nJSt — v0.2

Native JavaScript Templaes v0.2, произошли следующие изменения:

  • Теперь парсер возвращает не просто строку, а объект String, который в будущем может пополняться методами и свойствами. На данный момент содержится свойство status, которое может содержать строку "success" или "error", в зависимости от удачного или неудачного парсинга.

    Внимание! При некоторых условиях могут возникнуть проблемы с обратной совместимостью, например: когда результат парсера возвращается в response HTTP-сервера. Для того, чтобы избежать проблем, следует добавлять к результату парсера метод .toString(), который преобразует его в обычную строку;
     
  • Добавлена возможность создания множества экземпляров шаблонизатора, и у каждого могут быть свои уникальные настройки. Объект модуля шаблонизатора — это конструктор, но и этот же самый конструктор работает и как экземпляр самого себя, содержит те же методы и собственные настройки, что обеспечивает обратную совместимость (см. пример под номером №3);
     
  • Теперь nJSt присутствует и в NPM:
    npm install njst
     
  • Некоторые другие изменения, не влияющие на API: шаблонизатор разбит на модули, код лучше задокументирован с стиле JSDoc и прочие исправления.
     
В будущем ещё предстоят изменения. Например планируется всё-таки добавить конструкции <% ... %> %{...} в замену конструкциям с символами решётки: <# ... #> #{...}, — но конструкции с символами решётки по прежнему будут поддерживаться ради сохранения обратной совместимости.

https://github.com/unclechu/njst

суббота, 17 сентября 2011 г.

JavaScript: Присвоить метод строке или числу

Как говорится: «век живи — век учись». Я тут (не без помощи форума nodejs.ru) узнал интересный факт. Много где говорится об эквивалентности создания новой строки таким способом:
var str = 'Hello world';
С таким:
var str = new String('Hello world');
Но на самом деле, — это даёт разные результаты. Если под рукой есть Firebug, — проверьте и убедитесь сами. А тут я хочу подметить по теме о присваивании метода к строке или числу, дальше думаю сами всё поймёте:
var str = 'Hello world';
str.mthd = 123;
str; //Hello world
str.mthd; //undefined

var str2 = new String('Hello world');
str2.mthd = 123;
str2; //Hello world или объект String в отладчике {mthd: 123, 0: 'Hello world'}
str2.mthd; //123
Аналогично с new Number(), экспериментируйте!
 
И на закуску:
(new String('Hello world') === 'Hello world') //false
(new String('Hello world') == 'Hello world') //true
Спасибо некоему AbS_!

Внимание! Подводные камни!

Впоследствии практическим путём я наткнулся на подводные камни! В частности, когда я захотел вернуть в Node.JS ответ HTTP-сервера на запрос объектом строки:
require('http').createServer(function (req, res) {
    var str = new String('ok');
    res.end(str);
}).listen(8000);
При обращении к http://127.0.0.1:8000 процесс ноды обваливался с ошибкой:
TypeError: first argument must be a string or Buffer
Чтобы обойти проблему, — нужно дописывать к выводу строки вызов метода .toString(), — дабы преобразовать объект в обыкновенную строку, из строки-объекта:
res.end(str.toString());
Штука тут в следующем:
typeof new String('check') //returns 'object'
typeof 'check' //returns 'string'
Так что, коли решились использовать строку как объект, будьте бдительны и осторожны!

пятница, 19 августа 2011 г.

Node.JS: Рекурсивный extend (node-deep-extend)

При разработке на Node.JS пользуюсь фреймворком Underscore.js, но к своему сожалению я обнаружил, что у него нет рекурсивного extend-а, который мне нужен как минимум при организации новых модулей, где есть файл конфигурации. Просто выпилить например из jQuery не получилось, поскольку там есть отсылки к другим методам из jQ. В итоге решил, что проще уже будет набросать новый велосипед.

И вот сделал себе плюшку в виде модуля, которая доступна всем на GitHub-е:
http://github.com/unclechu/node-deep-extend

UPD 11.04.2012: Теперь и в NPM: npm install deep-extend