Вероятно боян, но мне понравилось:

Популярность: 1%
ROM
Комментариев нет »
Вероятно боян, но мне понравилось:

Популярность: 1%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Как я писал вчера, за время отсутствия на блоге сделал очередной сервис. Штука очень простая - переводит посты с хабра в формат wiki. Как всегда делал для себя, но подумал, что будет полезно и другим.
Итак, представляю Habr2Wiki!
Зачем это? Я читаю Хабр и часто встречаю полезные посты. Сначала я сохранял всё себе через Ctrl+S в специальную папочку. Но потом поставил Wiki, но ручками переносить и переформатировать не хотелось. Вот и написал такую штуку.
Для кого это? Для тех, кто читает хабр и хочет сохранить знания себе на вечную память.
Как этим пользоваться? Вставляете URL в поле ввода, нажимаете кнопочку с надписью “Преобразовать”. Немного ждите и получаете текст, отформатированный для вставки в Wiki.
Сколько стоит пользоваться этим сервисом? Сервис абсолютно бесплатен для коммерческого и некоммерческого использования.
Как я могу отблагодарить? Вариантов несколько:
Хочется обратить внимание, что я готов к диалогу по улучшению сервиса. Комментарии и пожелания можете оставлять либо в “камментах” к этому топику, либо через “Реформал” (синенькая штучка “оставить отзыв” справа экрана).
Пользуйтесь наздоровье!
Популярность: 2%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Я тут и никуда не делся. Да, забросил немного блоги, и сайты, и сервисы (кстати, я сделал еще один, и один в разработке, т.к. большой и… см. следующее предложение
. И как всегда есть отмазка: стали очень нужны деньги, и я занялся кое-чем серьезным. Как только запустим (нас там двое), будет побольше времени и внимания Вам и всему своему остальному.
Насчет комментариев: не надо постить по нескольку штук одного комментария. И обижаться, что не появились, тоже не надо. Я все комментарии вижу и модерирую их. Правда, вот после обновления у меня не хватило сил просмотреть 260 с чем-то страниц комментариев (с 99% спама), поэтому я их убил. Если чей-то “каммент” был убит незаслуженно - простите, пожалуйста
Кстати в версии 2.8 вордпресса, который я поставил сюда, гораздо удобнее работать с комментариями. И вообще мне админка нравится намного больше предыдущих.
Хочу сказать большое спасибо читателям, которые не только не ушли с блога за время моего отсутствия, но и немного увеличились.
Популярность: 2%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Я думаю, что все системные администраторы, у которых много компьютеров “в подчинении”, знают программу Remote Administrator. В народе называется просто “радмин”. Чуть меньше администраторов знают программу VNC, которая выполняет те же функции.
Эти программы в общем хороши, но требуют проброс портов. И все VNC клиенты, которые я видел, не позволяют удобно рассортировать компьютеры, как в Remote Administrator 3, или хотя бы просто записать, как в Remote Administrator 2. Еще один большой недостаток этих программ в том, что для них необходимо иметь внешний ip адрес или пользоваться dynDNS сервисами.
Программа TeamViewer позволяет управлять мышкой и наблюдать экран удаленного компьютера без внешнего IP адреса и открытия портов! Когда мы первый раз попробовали, я был очень удивлен тем, как она смогла пройти сквозь файрвол.
P.S. Кстати, TeamViewer бесплатен для некоммерческого использования, в отличии от Remote Administrator.
Популярность: 13%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Эта ошибка возникает, когда директория, заданная в конфигурационном файле vsftpd.conf как “anon_root=”, имеет права rwxrwxrwx (777).
Чтобы исправить ошибку, достаточно дать права на эту директорию r-xr-xr-x (555).
Популярность: 12%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Еще один блог добавил в список: jqueryzine.ru.
Блог довольно молодой, но имеет своих поклонников ![]()
Константин (автор блога) переводил книгу “jQuery in Action” на русский язык, пока она не вышла в издательстве “Символ”.
Популярность: 18%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Источник: A jQuery Client Status Bar
Последнее время ко мне неоднократно обращались с вопросами по поводу строки состояния в моем фотоальбоме на jQuery. На самом деле здесь нет ничего сложного, но, поскольку это заинтересовало несколько человек, я подумал, что стоит рассказать как же все-таки это работает. Несмотря на то, что в данном примере используется jQuery, того же эффекта можно легко достичь с помощью простого кода DOM или любой другой библиотеки JavaScript. Однако, большую часть работы все же проделывает CSS (и, полагаю, именно об этом и было большинство полученных мною вопросов), а не клиентский код, хотя компонент, с которым я познакомлю вас в конце задействован не меньше.
Зачем нужна строка состояния?
Как правило, я использую строки состояния для вывода информации на большинстве своих административных панелей, а иногда и во внешнем интерфейсе некоторых сайтов. Как и в случае с настольными приложениями, использование окон предупреждений для вывода информации при написании клиентских скриптов не очень удобно для пользователя, целесообразнее использовать некое постоянное место для вывода сообщений. Для решения этой задачи мне нравится использовать строки состояния, располагая их как наверху, так и внизу страницы.
В приложении фотоальбом строка состояния находится внизу страницы, имеет фиксированное положение и определенную прозрачность фона, так что строка состояния всегда видна, но вместе с тем она находится поверх остального содержания страницы:

Иногда при выводе сообщений в строке состояния может быть превышено время ожидания, и тогда там будет отображаться заданное по умолчанию сообщение (как правило, это «Готово»). Новые сообщения выделяются:

Через заданный промежуток времени выделение текста снимается. Это лучше делать с помощью CSS класса statusbar.
Пример строки состояния на странице фотоальбома можно посмотреть здесь:
http://www.west-wind.com/rick/photoalbum/demoMaui2006/default.aspx?Admin=true
После сохранения изменений и удаления изображений происходит обновление строки состояния (так же как и в случае с Ajax-овыми ошибками в методе-обработчике, которые не должны происходить).
Начнем с CSS
Для выполнения большей части работы необходимо использовать CSS стили элементов. Строка состояния – не просто тэг
.statusbar
{
position: fixed;
bottom: 5px;
left: 0px;
right: 0px;
height: 16px;
padding: 5px;
background: black;
color: white;
border: solid 1px lightgray;
opacity: .70;
filter: alpha(opacity="70");
z-index: 200;
overflow: hidden;
overflow-y: auto;
}
.statusbarhighlight
{
font-weight: bold;
background-color: khaki;
color: Maroon;
border: solid 1px silver;
}
Главным для строки состояния является фиксированное положение, при котором она всегда находится внизу страницы и остается там постоянно независимо от состояния полосы прокрутки браузера. Я предпочитаю размещать строку состояния на расстоянии 5px (5 пикселей) над нижней частью окна и затем применять прозрачность, чтобы сквозь строку состояния просвечивалась расположенная под ним страница. Полагаю, необходимо убедиться, что строка состояния находится над остальным содержимым страницы, а не определять ее абсолютное положение по нижнему краю.
В дополнение к классу statusbar применяется выделение, таким образом, выделенное сообщение сочетает оба стиля. Выделение просто изменяет цвет и рамку сообщения в строке состояния на определенный заданный промежуток времени.
Вы, конечно, можете отредактировать CSS по своему желанию и таким образом изменить отображение строки состояния: квадратная или прямоугольная; горизонтальная или вертикальная — справа или слева. В этом суть.
Простой вариант кода JavaScript на jQuery
Первоначально при создании строки состояния я использовал стандартную функцию – дешево и сердито. Она создает элемент DOM для строки состояния и применят соответствующие классы. Это самая простая функция, которая выполняет несколько вещей:
function showStatus(message,timeout,add)
{
if (typeof _statusbar == "undefined")
{
// ** Create a new statusbar instance as a global object
_statusbar =
$("
")
.appendTo(document.body)
.show();
}
if (add)
// *** add before the first item
_statusbar.prepend( "
" + message + "
")[0].focus();
else
_statusbar.text(message)
_statusbar.show();
if (timeout)
{
_statusbar.addClass("statusbarhighlight");
setTimeout( function() { _statusbar.removeClass("statusbarhighlight"); },timeout);
}
}
А теперь воспользуйтесь функцией showStatus() и CSS. Эту функцию можно применить в любом месте кода:
showStatus("Photo Collection has been updated",5000);
Обратите внимание, что функция также имеет параметр add, который определяет, добавлять ли сообщение к уже существующим в начало списка в тэге div. Это удобно, если вы собираетесь использовать строку состояния для вывода отладочных сообщений и при этом просматривать весь список сообщений. Чтобы это работало, возможно, потребуется увеличить высоту в классе .statusbar до 40px и более, дабы просматривать несколько сообщений с полосой прокрутки для перемещения по списку.
Обратите внимание, что CSS дает возможность управлять расположением и видом строки состояния. В целом, суть этого кода состоит в создании глобальной переменной _statusbar наряду со стилями .statusbar и .statusbarhighlight для корректного отображения строки состояния.
Создание более продвинутого компонента Statusbar
Основной код верен и самодостаточен, но, возможно, лучше создать более стандартный базовый компонент. На самом деле я не старался сделать этот код идеальным и не всегда следовал основным принципам jQuery для написания плагинов, потому что на самом деле предпочитаю создавать компонент с помощью одной функции и одного вызова для инициализации, а не служебной функции jQuery. С этой точки зрения этот компонент немного отличается от типичного плагина jQuery, потому что он не подходит к набору объектов jQuery.
По существу, написанная мной версия – это один класс с несколькими методами. Идея состоит в создании и конфигурации экземпляра класса в коде инициализации:
_statusbar = new StatusBar("#divStatus",
{showCloseButton: true,
additive: true,
afterTimeoutText: "Click on caption to edit text..."});
в дальнейшем вы можете использовать любой из двух вариантов функций:
_statusbar.show("Images have been reloaded",5000);
showStatus("Photo Collection has been updated",5000);
Последняя является служебной функцией, которая просто инкапсулирует создание переменной класса посредством глобальной переменной _statusbar с помощью конструктора по умолчанию. Это довольно удобно, так как дает возможность вызывать функцию без предварительной инициализации.
Следует также описать этот компонент с точки зрения конфигурации через свойства. В jQuery любое свойство может быть передано посредством массива объектов свойств, который определяет свойства класса StatusBar. Так, в примере выше я задал три свойства: одно для закрытия строки состояния; второе для аддитивного вывода сообщений, т.е. такого, чтобы при этом сохранялась и отображалась история сообщений; и третье для снятия выделения и вывода сообщения по умолчанию по истечении заданного промежутка времени.
Исходный код класса StatusBar:
function StatusBar(sel,options)
{
var _I = this;
var _sb = null;
// options
this.elementId = "_showstatus";
this.prependMultiline = true;
this.showCloseButton = false;
this.afterTimeoutText = null;
this.cssClass = "statusbar";
this.highlightClass = "statusbarhighlight";
this.errorClass = "statuserror";
this.closeButtonClass = "statusbarclose";
this.additive = false;
$.extend(this,options);
if (sel)
_sb = $(sel);
// create statusbar object manually
if (!_sb)
{
_sb = $("
" +
"
" +
(_I.showCloseButton ? " X
" : "") )
.appendTo(document.body)
.show();
}
if (_I.showCloseButton)
$("." + _I.cssClass).click(function(e) { $(_sb).hide(); });
this.show = function(message,timeout,isError)
{
if (_I.additive)
{
var html = "
" + message + "
";
if (_I.prependMultiline)
_sb.prepend(html);
else
_sb.append(html);
}
else
{
if (!_I.showCloseButton)
_sb.text(message);
else
{
var t = _sb.find("div.statusbarclose");
_sb.text(message).prepend(t);
}
}
_sb.show();
if (timeout)
{
if (isError)
_sb.addClass(_I.errorClass);
else
_sb.addClass(_I.highlightClass);
setTimeout(
function() {
_sb.removeClass(_I.highlightClass);
if (_I.afterTimeoutText)
_I.show(_I.afterTimeoutText);
},
timeout);
}
}
this.release = function()
{
if(_statusbar)
$(_statusbar).remove();
}
}
// use this as a global instance to customize constructor
// or do nothing and get a default status bar
var _statusbar = null;
function showStatus(message,timeout,additive,isError)
{
if (!_statusbar)
_statusbar = new StatusBar();
_statusbar.show(message,timeout,additive,isError);
}
Класс обеспечивает реализацию, а для свободного доступа к объекту создается дополнительный статический экземпляр _statusbar. В качестве альтернативы можно использовать представленную ниже функцию showStatus(), которая создает стандартный экземпляр строки состояния и запускает его. Таким образом, имея стили для statusbar и statushighlight, получаем отображение строки состояния в соответствии со стилем.
showStatus("Updated photo settings.",5000);
Если нужно настроить вывод строки состояния, можно с помощью конструктора с параметрами явно создать экземпляр _statusbar. Использование конструктора позволяет переопределить поведение и предоставляет еще несколько дополнительных свойств отображения статусной строки:
Для настройки этих элементов необходимо на странице кода инициализации сделать следующее:
$(document).ready( function() {
if (serverVars.adminMode)
{
MakeListEditable();
var status = "Click on caption to edit text. Drag image to sort list..."
_statusbar = new StatusBar(null,{showCloseButton: true,
additive:true,
afterTimeoutText: status });
_statusbar.show(status);
}
} );
Есть возможность передачи свойств для настройки всех свойств строки состояния с помощью стандартного метода jQuery.extend(), куда можно передать объект со свойствами, которыми нужно расширить StatusBar.
Свойство additive позволяет отображать несколько статусных сообщений и добавлять новые сообщения сверху или снизу всего списка (используя свойство prependMultiline). Это дает возможность использовать строку состояния также в качестве средства отладки, так что вы сможете выводить статусные сообщения, а также избежать использования окон предупреждений alert(). А вот как это будет выглядеть:

Создав несколько экземпляров класса StatusBar можно создать на странице несколько строк состояния. Так, вы можете создать строку состояния для вывода сообщений и строку состояния для отладки и даже назначить им разные стили. Отладочную строку состояния удобнее разместить вертикально с правого или с левого края браузера. Для этого вы, скорее всего, пожелает изменить CSS.
Однако, есть еще несколько компонентов, обеспечивающих вывод отладки и если вам необходим инструмент вывода трассировки для помощи в отладке, вам, вероятно, лучше использовать один из плагинов jQuery. Но если вам нужен простой и быстрый способ вывода сообщений на экран в приложениях или даже в библиотечном коде, вышеописанный подход подойдет отлично, так как он может быть реализован простым дополнением строки кода без последующей настройки, подключая библиотечный код после загрузки скрипта.
На стороне сервера
Несколько человек спрашивали, как использовать компонент jQuery в ASP.NET. Ответ на этот вопрос так же прост как сама строка состояния: просто добавьте необходимый код JavaScript на страницу посредством объекта ClientScript (или с помощью ScriptManager, если вы используете MS AJAX). Представьте, что вам нужно установить исходное сообщение о состоянии, которое будет отображаться при загрузке страницы из кода ASP.NET. Для этого можно использовать такой код:
protected void ShowStatus(string message, int timeout)
{
var script =
@"
jQuery(document).ready( function() {{
var status = '{0}';
_statusbar = new StatusBar(null,{{showCloseButton: true,
additive:true,
afterTimeoutText: status}} );
_statusbar.show(status,{1});
}});";
this.ClientScript.RegisterStartupScript(this.GetType(),
"showStatus",
string.Format(script, message, timeout), true);
}
Затем из любого места кода сделайте вызов:
this.ShowStatus("Click to start",0);
И вуаля – взаимодействие сервер-страница готово. Скорее всего, вы пожелаете убрать код инициализации со страницы со скриптом во избежание путаницы какое сообщение обрабатывать первым. Следует убедиться, что ShowMessage вызывается по крайней мере один раз для инициализации исходного сообщения и объекта _statusbar. При многократном использовании данной функциональности можно применять объект _statusbar в серверном компоненте и получить несколько свойств, управляющих исходным сообщением, а также настроить другие свойства компонента со стороны сервера. Это исключит необходимость в каких-либо специальных знаниях как, например, необходимость вывода исходного сообщения заранее без явного вызова метода ShowStatus. Возможно, для данного простого компонента это перегиб, но для более сложных компонентов будет, несомненно, полезным.
Строка состояния как плагин jQuery?
Как отмечалось ранее, только начало создания усовершенствованного класса и, скорее всего, придется потрудиться немного больше для окончательной шлифовки кода. Я также пытался реализовать строку состояния как плагин jQuery, но пока не могу найти эффективного способа.
jQuery допускает использование служебных функций над статическими сущностями jQuery, но я не думаю, что класс Statusbar будет действительно хорош в качестве статической функции/объекта, так как вся его работа заключается в добавлении префикса $/jQuery в синтаксис. В общем, в данном в случае я не вижу от этого никакой пользы. Класс Statusbar также не совсем приемлем как набор функций jQuery, посколку строка состояния объект в основном статичный.. Одним словом, я считаю, что строка состояния в качестве плагина jQuery лишь неоправданно усложнит компонент.
Есть другие идеи?
Что ж, надеюсь, кому-то статья будет полезной. Некоторое время я не редко прибегал к использованию строк состояния во многих своих приложениях, ведь этот компонент значительно упрощает вывод статусных сообщений в приложениях. Надеюсь, вы смогли найти здесь идеи создания различных вспомогательных функций/классов и сможете реализовать их в своем клиентском коде.
Download: wwjQuery.zip
Популярность: 43%
RSS Записей
RSS комментариев.
Поддержи сайт!
ROM
Комментариев нет »
Спонсор поста: Ремонт и строительство ангаров и складов под овощи.
Источник: JQuery, the very very basics - Lesson 6
Во всех языках программирования существует работа со строками и обработка массивов. И JQuery — не исключение. Комплиментарный и ненавязчивый по своей природе, JQuery не заменяет существующий набор функций JavaScript собственными, а просто дополняет их наиболее недостающими.
Обрезка строк: $.trim(value)
Для работы со строками в языке JavaScript имеется довольно большое количество функций, таких как split, substr, charAt (см. доп. информацию по ссылке http://www.w3schools.com/jsref/jsref_obj_string.asp). Однако, по каким-то загадочным причинам, функции trim для удаления пробелов в начале и конце строки нет. Но нашлись люди талантливые и не жадные, написавшие различные варианты собственных версий функции trim. Как например:
var trimmed = str.replace(/^\s+|\s+$/g, ”) ;
Функция работает отлично. Однако, как насчет простого вызова функции trim() с помощью JQuery? Синтаксис выглядит следующим образом: $.trim(value)
var trimmed = $.trim(” this really needs to be trimmed “);
Доступно и понятно, не так ли?
Функции обработки массива:
$.each (container, callback)
В JQuery в дополнение к традиционным типам массивов JavaScript (массив строк, чисел, элементов ) существует также специальный массив объектов в виде пары ключ-значение.
В JavaScript массив записывается следующим образом:
var arr = [ “one”, “two”, “three”, “four”, “five” ];
А в JQuery (каждая пара отделена двоеточием
так:
var obj = { item1: “one”, item2: “two” ,item3: “three”, item4: “four”};
Осуществить проход по массиву JavaScript несложно. Однако, это может сделать еще проще с помощью функции JQuery $.each. Синтаксис таков: $.each (container, callback). Функция обратного вызова получает два аргумента: в случае с массивом [] (традиционный JavaScript) — индекс и знамчение; а в случае с массивом {} (массив объектов со свойствами) — ключ и значение.
Таким образом, в приведенном примере JQuery может получать доступ к элементам массива (заранее прошу прощения за такое количество alert):
var arr = ["one", "two", "three"];
var obj = {item1: "one", item2: "two", item3: "three"};
$.each(arr, function (n, val) {
alert("Item " + n + " = " + val);
});
$.each(obj, function (n, val) {
alert(key + " = " + val);
});
$.grep (array, callback, invert)
В JQuery есть функция $.grep(), которая возвращает массив элементов, удовлетворяющих определенному условию. Функции обратного вызова передается два параметра: текущее значение и его индекс. Например:
var arr = [10,20,30,40, 50];
var newArr = $.grep(arr, function (n, i) {
return (n > 10 && n < 50);
});
$.each(newArr, function (n, val) {
alert("Item " + n + " = " + val);
});
$.map (array, callback)
Ниже представлен еще один пример удобной функции, которая преобразовывает все элементы в массив за один заход. Преобразовать массив строк в массив чисел? Да. Преобразовать массив чисел обратно в массив строк? Да. Прибавить 10 к каждому числу массива? Да. Просто вызовите функцию $.map.
var arr = [10,20,30,40, 50];
array = $.map(arr, function (val) {
return "" + val + "";
});
Другие чрезвычайно полезные функции JQuery для работы с массивами:
$.inArray(value, array) возвращает позицию первого найденного элемента по заданному значению.
Как например:
// мы получим "this"
var inArr = $.inArray("this", ["this", "is", "a", "great", "fun"]);
$.unique(array) возвращает массив уникальных элементов. Как в этом примере:
// мы получим "this" "is" "a" "great" "fun" inArr = $unique(["this","this", "is", "a", "great", "fun"]);
$.makeArray(object) создает массив из выбранных элементов. Как в примере ниже:
// создаст массив со всеми элементами div
var divs = $.makeArray($("div"));
$.extend(target, source1, source2, … sourceN) добавляет свойства источника в целевой элемент. Например:
// до: {firstname: "John", lastname: "Doe"}
var target = {firstname: "John", lastname: "Doe"};
var source1 = {age: 20, gender: "M"};
//после: {firstname: "John", lastname: "Doe", age: 20, gender: "M"};
$.extend(target, source1);
Популярность: 28%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Представляю еще один блог в котором Ольга рассказывает о вебдизайне в общем и jQuery в частности. Называется просто Блог для веб мастеров.
Популярность: 28%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Без рубрики |
ROM
Комментариев нет »
Если Open Office выдает при старте ошибку “the user interface language cannot be determined”, то необходимо проверить права на каталог ~/.openoffice.org2.
Если папка не принадлежит пользователю, то запустите команду chown rom:rom ./.openoffice.org2. В примере rom:rom - имя пользователя и группа соответсвенно.
Популярность: 30%
RSS Записей
RSS комментариев.
Поддержи сайт!Рубрики: Linux |

