пятница, 27 декабря 2013 г.

Важность описания интерфейсов функций

Сегодня, прочитав статью http://habrahabr.ru/post/207390/, удивился тому факту, что автор не сказал ни слова об описании интерфейсов функций. Я просто не мог оставить этот факт без внимания, поскольку лично мне уже набила оскомину проблема отсутствия описания интерфейсов функций в коде.
Если вы пишете на строготипизированном языке, то у вас нет проблем с тем какого типа параметры функция принимает и возвращает. Это все есть прямо в описании функции. 

int addition (int a, int b) {
    return a + b;
}

воскресенье, 15 декабря 2013 г.

javascript best practices

Используйте jQuery

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


Не засоряйте глобальное пространство имен

Без оператора var, независимо от того, в каком месте была определена переменная, она станет глобальной. Использование глобальных переменных - очень плохая практика, чреватая трудноуловимыми ошибками. Для того, чтобы переменная получила локальную область видимости, она должна быть объявлена с var:

var $a = "Hello world";

И помните: в javascript переменные имеют функциональную область видимости.

пятница, 6 декабря 2013 г.

jQuery draggable с относительным позиционированием

Задача: необходимо иметь диалоговое окно, которое можно перетаскивать и которое при изменении размера окна будет сохранять свое положение относительно центра экрана.
Решение:
Для перетаскивания объектов на javascript уже существует такой замечательный инструмент как jquery.ui.draggable, он очень богат и именно его мне и хотелось бы использовать, но у него перетаскиваемые элементы позиционируются абсолютно. Значит, необходимо выполнить небольшую подмену.
Суть идеи такова: диалоговое окно по умолчанию находится в относительном позиционировании (left: 50%, margin-left: -width/2). Перед началом перетаскивания мы просто переводим относительные координаты в абсолютные и срабатывает стандартный jQuery.ui.draggable со всеми его особенностями. По окончании перетаскивания мы просто возвращаем объекту относительные координаты. 

воскресенье, 1 декабря 2013 г.

Изменение css-свойств для динамически создаваемых элементов

jQuery с легкостью позволяет изменять css-свойства для существующих на странице элементов с помощью метода .css(). Но все изменения сохраняются в атрибуты style элементов. Поэтому все вновь создаваемые элементы получат старые свойства, прописанные в .css-файлах.
Для того, чтобы все изменения css-свойств применялись и для новых элементов мы поступим следующим образом: создадим элемент style с id и будем вносить в него изменения. Для упрощения этого процесса напишем jquery-плагин:

/**
 * Изменить css-правило внутри style-элемента
 * @param {String} selector Селектор для которого необходимо менять правила
 * @param {String} property Свойство, значение которого надо изменить
 * @param {String} value Новое значение
 */
$.fn.style = function(selector, property, value){
   return $(this).each(function(){
       if( $(this).prop('tagName') !== 'STYLE') return;
       $.each(this.sheet.cssRules, function(i, li){
           if(li.selectorText === selector){
               li.style.setProperty(property, value);
           }
       });
   });
};
Мы выбираем по id style-элемент и начинаем перебирать его селекторы. Как только нашли нужный нам селектор, заменяем для него указанное свойство. Следует заметить, что данный метод требует точного совпадения селекторов, определенных в стилях и селекторов элементов, к которым надо применить изменения.

<style id="style_elem">
    .item{
        background: #eee;
    }
</style>

$('#style_elem').style('.item', 'background', '#ccc');
Теперь все вновь создаваемые элементы с классом item будут иметь background с цветом #ccc. Данный метод работает для всех современных браузерах.

понедельник, 25 ноября 2013 г.

Проблемы с локализацией через ssh

После установки Linix Mint 16 (Petra) столкнулся с проблемой: при работе по ssh кириллица отображалась в виде какой-то шифровки:

'<D0><9F><D0><BE><D0><BB>'

Непорядок. Гугл мало чем помог, пришлось копаться в настройках локализации. Решение нашлось довольно быстро. Всему виной был ssh. В файле /etc/ssh/ssh_config есть флаг SendEnv, который задает какие пользовательские переменные среды передавать по ssh при логине. По дефолту эта строка выглядит так: 

 SendEnv LANG LC_*

Т.е. при логие на удаленный сервер уходят установленные у меня параметры локализации. Чтобы такого не происходило надо просто закомментировать эту строку:

#  SendEnv LANG LC_*

После этого надо заново войти через ssh и кириллица снова будет прекрасно видна.

воскресенье, 17 ноября 2013 г.

Полезные клавиатурные комбинации Midnight Commander (mc)

Midnight Commander (mc) - очень мощный и удобный инструмент для навигации по файлам и работы с ними в linux-системах. mc не требуюет наличия полноценного графического интерфейса и полностью работает из консоли, поэтому очень удобен при работе с файлами через ssh. mc имеет массу клавиатурных комбинаций, сильно упрощающих работу с ним. Наиболее часто употребляемые комбинации представлены ниже.

F3 - показать содержимое файла;
F4 - редактировать файл;
Insert - выделение текущий объект;
+ - вызвать окно для выделения группы файлов (можно использовать регулярные выражения);
\ - снять отметку с группы файлов (действие, обратное тому, которое вызывается по клавише +);
Meta+Enter - вставить ‘текущий объект’ в командную строку;
Meta+. - не показывать или показать скрытые файлы или каталоги;
Meta+, - переключить режим отображения панелей (вертикально/горизонтально);
Ctrl+x,p - вывести в командную строку полный путь в активной панели;
Meta+h - показать список последних выполненных команд;
Meta+i - смена текущего каталога на неактивной панели, на каталог в котором вы находитесь в активной панели;
Meta+o - неактивная панель переходит в каталог на который указывает активная панель;
Meta+p - вернуть предыдущую выполненную командную строку;
Meta+r - установить курсор на средний файл или каталог в отображаемом списке на панели;
Meta+Shift+? - показать меню расширенного поиска файлов;
Ctrl+x,p - вывести в командную строку полный путь в нективной панели;
Meta+Shift+H - отобразить историю каталогов;
Ctrl+\ - вызывается меню часто используемых каталогов;
Ctrl+l - перерисовать экран;
Ctrl+o - скрытие/показ панелей;
Ctrl+r - перечитать содержимое каталога;
Ctrl+s - быстрый поиск файла или каталога;
Ctrl+Space - показать размер текущего каталога;
Ctrl+x,a - показать список активных соединений виртуальных файловых систем;
Ctrl+x,c - просмотр/правка прав доступа;
Ctrl+x,i - просмотр информации о текущем объекте на второй панели;
Ctrl+x,j - показать фоновые задачи;
Ctrl+x,l - создать жесткую ссылку с текущего объекта;
Ctrl+x,o - просмотр/правка владельца/группы для текущего объекта;
Ctrl+x,q - быстрый просмотр содержимого файла на второй панели;
Ctrl+x,s - создать символическую ссылку для текущего объекта;
Ctrl+x,t - вставить все выделенные объекты в командную строку;
Ctrl+z - свернуть mc в фоновые задачи;Ctrl+x,Ctrl+s - редактировать символическую ссылку;
Shift+F4 - создать новый файл;
Shift+F6 - переименовать файл;

вторник, 24 сентября 2013 г.

Perl best practices на русском (часть 2)

Данная статья является второй частью свободного перевода заголовков глав книги “Perl Best Practices Standards and Styles for Developing Maintainable Code” (Damian Conway). В статье я постарался в максимально сжатом виде пересказать основные тезисы и рекомендации, приводимые в книге. К сожалению, книги на русском я не нашел, именно поэтому привожу здесь данный перевод. Если какой-то из пунктов покажется вам непонятным, советую обратиться непосредственно к книге, или пишите комментарии. Со многими приведенными здесь рекомендациями я сам не согласен, но оставляю их в неизменном виде.

Ссылки
143. Всегда выполняйте разыменование ссылок с использованием стрелки ->
144. Если необходимо разыменовать вложенную ссылку, заключайте выражение в фигурные скобки
145. Никогда не используйте символические ссылки
146. Используйте weaken для предотвращения утечек памяти при работе с перекрестными ссылками

Perl best practices на русском (часть 1)

Данная статья является первой частью свободного перевода выдержек из книги “Perl Best Practices Standards and Styles for Developing Maintainable Code” (Damian Conway). В статье я постарался в максимально сжатом виде пересказать основные тезисы и рекомендации, приводимые в книге. К сожалению, книги на русском я не нашел, именно поэтому привожу здесь данный перевод. Если какой-то из пунктов покажется вам непонятным, советую обратиться непосредственно к книге, или пишите комментарии. Со многими приведенными здесь рекомендациями я сам не согласен, но оставляю их в неизменном виде.

Форматирование кода

1. Все скобки должны быть в стиле K&R
2. Разделяйте операторы и круглые скобки пробелом
3. Не разделяйте процедуры и круглые скобки, массивы и квадратные скобки, хэши и фигурные скобки пробелами
4. Всегда пишите круглые скобки при вызове операторов и подпрограмм
5. Отделяйте сложные ключи хэшей от окружающих скобок пробелами
6. Отеляйте операторы от операндов пробелами
7. Ставьте точку с запятой в конце каждого выражения
8. Ставьте запятую после каждого значения в многостроковом списке(после последнего элемента – тоже)