понедельник, 19 сентября 2011 г.

Как в javascript переименовать функцию

Переименовать уже существующую функцию не так-то просто. Но возможно:
// при помощи этой функции будем переименовывать
Object.defineProperty(
    Object.prototype, 
    'renameProperty',
    {
        writable : false, // Cannot alter this property
        enumerable : false, // Will not show up in a for-in loop.
        configurable : false, // Cannot be deleted via the delete operator
        value : function (oldName, newName) {
            // Check for the old property name to 
            // avoid a ReferenceError in strict mode.
            if (this.hasOwnProperty(oldName)) {
                this[newName] = this[oldName];
                delete this[oldName];
            }
            return this;
        }
    }
);

// сам пример. переименовываем функцию NIRV.repaintMain в NIRV.repaintMain2
NIRV.renameProperty("repaintMain", "repaintMain2");
NIRV.repaintMain = function() {
  NIRV.repaintMain2();
  $("li.task.completed").each(AddReaddButton);
};
Этот вариант может не везде работать. Я его взял здесь. Там есть и другая функция для переименования.
среда, 31 августа 2011 г.

Как в javascript обернуть функцию

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

Оказывается, в джаваскрипте это делается довольно просто:
repaintMain2 = repaintMain;
repaintMain = function() {
  repaintMain2.apply(this, arguments);;
  $("li.task.completed").each(AddReaddButton);
};
Узнал об этом способе здесь.

Еще есть способ оборачивания через переименование функции.

Кроме того, есть довольно продвинутые способы оборачивания функции. Которыми можно пользоваться вот так:
var beforeExecute = function() { ... }
var afterExecute = function() { ... }

myFunc = wrap(myFunc, beforeExecute, afterExecute);
воскресенье, 14 августа 2011 г.

Работа с git-репозиторием GitEnterprise

В качестве приватного git-репозитория для личных проектов я выбрал (см. апдейт в конце поста) http://www.gitenterprise.com/. Смотрите pricing бесплатного акка: сколько угодно репозиториев, 1 гб места, до 10 пользователей.

Это скорее памятка для самого себя. Обычная ситуация: уже начал что-то делать и стало ясно, что надо бы репозиторий создать, причем хорошо бы удаленный, для бэкапа.

1. https://gitent-scm.com/gitent/ - создаем новый репозиторий.
2. На вкладке Main перем ссылку на репозиторий (https).
3. SmartGit - Remote -> Manage Remotes -> Add. Указываем ссылку, любое название (например gitent-scm.com). Вроде бы предложит ввести пароль (от акка на gitent-scm.com).
4. Жмем Push. Если будет спрашивать, то жмем кнопку Configure.
5. Все должно быть в порядке.
6. Если появилось сообщение "you cannot push changes not committed by you", то смотрим здесь и, возможно, здесь.

Другой вариант, через создание нового репозитория (думаю, это какой-то левый вариант):

Шаги 1 и 2 такие же как в первом варианте.
3. SmartGit - выбираем Clone, указываем ссылку, жмем далее. Он предложит всякие пароли ввести.
4. Git working tree. Нужно указать пустую папку. Например: I:\work\MyProject.
5. И все. Если у нас уже есть проект, то копируем туда файлы и делаем первый коммит.

Update. Я сейчас перелез на bitbucket.org - он бесплатный, есть гит, а так же вики и issue-трекер (как на гитхабе).
вторник, 2 августа 2011 г.

Чеклист по безопасности ПО

Коммент из поста на хабре "Аудит. «Черный ящик»".

Для разработчиков (я имею в виду именно тех, кто пишет новые системы, а не прикручивает взятые из интернета готовые решения), вся защита сводится к очень короткому списку:

  • Валидируйте все входящие и исходящие данные по структуре и типам;
  • Не клейте SQL конкатенацией строк никогда, кроме случаев фреймворков (но во фреймворках можно и код более качественно писать, сделав дополнительную валидацию всех склеиваемых фрагментов);
  • Как можно чаще делайте кеширование чтобы избежать повторяющихся запросов и лишних нагрузок (кеш на диске, в памяти в специальных хеш-СУБД и т.д.);
  • Разделяйте систему для разработки (закрытую от внешнего мира) и продакшен систему (из которой нужно удалить половину, а оставшееся минифицировать и «утоптать» по максимуму);
  • Всегда предусматривайте блокировку запросов по IP, если с них идет странная активность (пользователь не сгенерирует 100 запросов в минуту и не будет долбить сервер 24 часа напролет, пользователи — люди, они едят и спят) (с разумными лимитами)
  • Определяйте попытки SQL-инъекций и XSS-инъекций, не просто их фильтруйте, а блокируйте IP
воскресенье, 24 июля 2011 г.

Как в Resharper'е перейти от префикса "_" к "this"

На хабре вышел интересный опрос (набравший аж +9) "Используете ли вы префиксы в именах членов классов?" В репашпере настройки по-умолчанию таковы, что используется префикс "_". Но в комментах было много хорошего сказано про "this." Например, этот коммент.

В общем, решил отказаться от префиксов и перейти на "this".

В решарпере для этого нужно:
1. Resharper -> Options -> Languages -> C# -> Other -> Force "this"
2. Там же где-то в настройках нужно изменить Naming Style, убрав префикс "_".

пятница, 1 июля 2011 г.

Как убрать Client Profile в новых проектах

По-умолчанию, в новых проектах Visual Studio выбирается .NET Framework 4 Client Profile. Было интересно узнать, как сделать так, чтобы в новых проектах был просто 4-й фреймворк, без client profile.

Как разместить Label по центру окна?

Все просто. Меняем свойства у Label:
  • Dock = Fill
  • AutoSize = False
  • TextAlign = MiddleCenter
воскресенье, 12 июня 2011 г.

Горизонтальная линия на c#

Как добавить на форму горизонтальную линию (как тег hr)? Есть разные способы. Один из них - создать для этого user control.