LINUX.ORG.RU

Сообщения DRVTiny

 

jEasyUI - какие есть косяки / почему не нужно?

Есть такая штука, jQuery EasyUI

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

Безусловно радует и то, что EasyUI не выносит мозг и не заставляет строить вселенную заново, руководствуясь девиациями авторов (намёк на Anglular :)). Это просто плагин для jQuery, который дофига всего умеет.

Тем не менее - сильно отталкивает необходимость писать HTML-код в приличных объёмах, разметка которого, как водится, не имеет ни малейшего отношения к тому, что нужно в итоге получить. Я уже как-то привык к тому, что всё настраивается в JS-коде, а б-гомерзкий хытымыль на 90% генерируется самим плагином .

Ну и, столкнувшись со странностями того же W2UI, который умеет ровно то, что мне нужно (страница, состоящая из прямоугольных областей с изменяемыми размерами), но работает настолько странно, что загрузка чего бы то ни было в панель становится весьма нетривиальной задачей - есть подозрения, что и у jEasyUI таких косяков хватает.

В общем, у кого есть опыт - делитесь, стоит использовать сабж или есть какие-то более интересные плагины (чистый jQuery UI?).

P.S. Сторонники Angular, ExtJS, Dojo - будьте добры, ступайте себе мимо, пожалуйста.

 easyui,

DRVTiny
()

А если содержимое layout'а - объект?

Пытаюсь перевести своё махонькое веб-приложение на W2UI с костылей классических самописных. Reason - обалденно понравились их layout'ы

Вопрос только в том, что грузить pure html внутрь layout'ов в таком вот стиле:

			var sContent='\
			<div id="blkLabel" style="float:left">\
				<span>Показывать:</span>\
			</div>\
			<div id="blkCheckList"  style="float:left">\
				<select id="selCheckList" class="clsCelCheck"  multiple="multiple">\
					<option id="opt1" class="opt1">Графики</option>\
					<option id="opt2" class="opt2">Параметры</option>\
					<option id="opt3" class="opt3">События</option>\
					<option id="opt4" class="opt4">Отчёты</option>\
				</select>\
			</div>';

- по-моему крайне неудобно (ну как минимум некрасиво :) ).

Чего бы хотелось:

Взять какой-то уже готовый элемент из DOM-дерева и сказать: W2UI, перемести мне его внутрь панели «top» и вычисти его в том месте, где он был раньше.

И вроде бы W2UI умеет вместо просто строки рендерить «объекты».

Только это не DOM-объекты, а, в частности, объекты самого W2UI.

Отсюда дурацкий вопрос: а если мне хочется много HTML кода, никакого отношения к W2UI в принципе не имеющего, вставить в панельку layout'а, то... в общем, что делать в такой ситуации, как быть? :)

 , w2ui

DRVTiny
()

Template toolkit: для чего это нужно?

У меня есть, возможно, странный вопрос, который я просто не могу не задать, поскольку пришлось столкнуться с ЭТИМ, и оно меня удивило, так что нужно с кем-нибудь поделиться.

Есть вот этакое: http://www.template-toolkit.ru/Manual/Intro.html

Оно встраивает в веб-страницы свой птичий язык, генерирующий части веб-страниц.

ОК. Но я только одного не могу понять: а в чём проблема делать то же самое просто из нормального кода на Perl?

Собственно, с шаблонизаторами сталкиваюсь часто, и если для меня как для сторонника концепции веб-приложения (максимум JavaScript, просящего сервер о различных услугах AJAX'ом) - генерация HTML'я на стороне сервера представляется немного удивительной, то шаблонизаторы вообще ломают мой мозг напрочь.

Ладно бы там можно было как в редакторе форм создать кнопку и задать ей свойство «овальная с коэффициентом 0.78», но ведь шаблонизаторы по сути не дают возможность уйти в своём понимании от б-гомерзкого HTML'я, они типа облегчают его генерацию. Ног в чём облегчение, если генерируется всё это тем же «языком программирования», из тех же HTML-тэгов...??

 ,

DRVTiny
()

HTMl и CSS - убогое говно. Неужели нет альтернатив?

Собственно, вопрос не о том, что вёрстка HTML и CSS - это либо попытка рулить собакой, дёргая её за хвост, либо набор готовых рецептов «чтобы собака пошла направо, кинь гранату слева».

Вопрос в том, почему за вот уже 30 лет как ни один браузер так и не сделал поддержку нормального объектно-ориентированного GUI-Toolkit подобного языка создания формы веб-приложения?

По-моему было бы как минимум логично, чтобы те же GTK или QT-приложения могли работать в браузере.

Я понимаю, что вся индустрия «кто в лес, кто по дрова» и самая большая проблема - договориться о стандартах, что в случае с тем же Microsoft нереально. Но неужели нигде нет хотя бы элементарного понимания, что HTML что с CSS, что без него - это алхимическая клоака, над которой можно строить сколь угодно «совершенный» код веб-приложения, но сути это не изменит. А суть в том, что в итоге всё равно придётся заниматься мистическими танцами с бубном под названием «вёрстка» и в конечном итоге браузер пользователя проглотит мегабайты какого-то унылейшего мусора для отображения формы, которую даже на ассемблере можно было бы запрограммировать килобайтом кода!

Я знаю, что есть, например, GWT. GWT хорош и красив и вроде делает то, что нужно... До тех пор, пока речь не заходит о том, что в итоге-то он всё равно генерирует те же мегатонны HTML, CSS и JS, причём ещё и крайне тормозного.

Кто-нибудь в курсе, хотя бы исторически была когда-либо речь о вменяемых альтернативах HTML'ю?

 divlitabletrtd-shit,

DRVTiny
()

Программирование конечных автоматов

Какой язык программирования наилучшим образом адаптирован под задачи построения автоматов конечных состояний?

В принципе понятно, что почти на любом языке реализуемо, просто интересно, что есть из современного, особо удобного для FSA-шек?

Мне кажется, программирование автоматной логики - это куда более важный концептуальный подход, чем то же ООП. Странно, что в нашем динамичном, событийно-ориентированном мире функциональному программированию уделяется много внимания, а конечным автоматам - мало или вообще нисколько...

 

DRVTiny
()

Сбивается раскладка, устанавливаемая setxkbmap

Ubuntu 13.04

Пользуюсь IceWM.

В $HOME/.icewm/startup устанавливаю раскладку и разрешаю убивать X-сервер по Ctrl+Alt+Backspace:

setxkbmap -layout 'us,ru'
setxkbmap -option 'grp:caps_toggle,grp_led:scroll,compose:ralt'
setxkbmap -option 'terminate:ctrl_alt_bksp'

Видимо, из-за того, что ныне XKB не в почёте, а вместо этого используется что-то там через D-Bus - раскладка эпизодически, раз в час-два благополучно «слетает».

Где настраивается раскладка для «более лучшего метода» - я не в курсе: перепробовал все известные мне конфигураторы gnome'а, которые по идее должны были как раз в нужном месте изменить раскладку - там везде уже стоит CapsLock, а по факту слетает вечно на Alt+Shift.

Я поставил скрипт установки раскладки в свой пользовательский cron, запускаю */5 минут, но это не помогает: она, зараза, почему-то сама не восстанавливается ни через 5 минут, ни через час (при этом cron ничего интересного на mail не шлёт - значит, по идее STDERR команды пуст).

Подскажите, пожалуйста, направление, куда копать?

И, может быть, есть шанс вернуть всё-таки нормальный старый-добрый xkeyboard?

Спасибо!

 , ,

DRVTiny
()

А есть ли ещё такие гениальные игры как «Мор. Утопия»?

Мор: Утопия бы просто потрясающей.

Я не встречал ещё ни одной такой же «аристократично-готичной» игры со сложной диалоговой системой, витиеватыми текстами и по-настоящему тревожной гонкой со временем.

Но, может, просто плохо смотрел? В принципе, Deus Ex с мрачными бомжами на улицах Нью-Йорка - ничуть не менее глубок, но я уже проходил его и далеко не один раз...

Может, ещё есть что-то эдакое, а я просто не заметил?

 ,

DRVTiny
()

Увидеть, какие функции вызываются

Хочу невозможного, к сожалению.

А именно: хочу просто увидеть, какие функции JavaScript вызываются.

Если конкретно, то мучаю Zabbix, а там страница с графиком... крайне интересно устроена. Кто не интересовался (все?) - наверное, даже не заподозрит, что такой ад вообще может быть.

Тем не менее, это так. Никакие break-point'ы в данном случае не помогут понять, как это работает, поверьте мне на слово. Разве что ставить breakpoint по всех функциях, но с таким же успехом я могу в каждую фунцию вписать console.log()

Единственный вариант - видеть в реальном времени, какие функции вызываются. Конкретно - в консоли браузера нужно увидеть:

method objectPapa.foo called, parameters: bla,bla
method objectMama.bar called, parameters: psch,psch

Господа веб-разработчики, такие чудеса в нашем мире возможны?

 , , ,

DRVTiny
()

Как определить оптимальную высоту iframe'а?

Задача странная, но вроде жизненная: В iframe грузится веб-страница, у которой есть определённая «минимальная высота», после которой она перестанет отображаться полностью.

Хотелось бы выбирать высоту iframe'а так:

Выбрать минимум из двух значений:

1) Расстояние от верха iframe'а до нижней границы окна

2) Минимальная высота загруженной в iframe страницы

Кто-нибудь сталкивался с подобным? Для меня JavaScript немного «в сторону» от основного приложения, поэтому приходится прямо по ходу дела изучать. Но вот как определить минимальную высоту iframe, при которой ещё не будет скроллинга (пункт 2) - пока не нашёл :(

P.S. Собственно, пока читаю результаты поиска Google: https://www.google.ru/search?client=ubuntu&channel=fs&q=determine+minimal+iframe+height+without+scrolling\&ie=utf-8&oe=utf-8&gfe_rd=cr&ei=elHbVNvSJ4vBNLX9gNgM#newwindow=1&channel=fs&q=determine+minimum+iframe+height+without+scrolling

 

DRVTiny
()

Матчинг содержимого кавычек

Вроде бы простая задача, но у меня не получается сделать лучше, чем «в лоб»:

foreach (qq("abcedefhjhj")) { 
 /^(?<quo>['"])(?<text>(??{ '[^'.$+{quo}.']+' }))\g{quo}$/ && 
   print "match found\n" 
}

Есть 2 требования к регэксу:

1) Кавычки могут быть одинарными или двойными, мы заранее не знаем, какие именно будут использованы;

2) Внутри текста, заключенного в кавычки, не должны содержаться эти самые кавычки.

КАК правильно-то??

 ,

DRVTiny
()

Microsoft.com говорит: Linux!

 ,

DRVTiny
()

jsTree: автоматический горизонтальный скроллинг?

Есть HTML-страница, разделённая по вертикали на 2 div'а: в левом, как водится, дерево, а в правом - свойства выбранного элемента дерева. Размеры div'ов рассчитываются просто как процент от ширины окна, менять это нельзя.

Поскольку дерево в левом div'е имеет значительную вложенность и порой длинные названия элементов, хотелось бы какой-то скролл по горизонтали, но скролл максимально интеллектуальный. То есть, например, тупо браузерный скролл в данном случае не подходит.

В идеале должно быть так: если пользователь выбирает в дереве элемент, который «не умещается» по горизонтали, всё дерево уезжает влево так, чтобы выбранный элемент был возможно правее и его текст отображался наиболее полно: если текст больше вообще ширины родительского div'а, то элемент отображается частично, начинаясь в крайней левой позиции, если же длина текста меньше ширины div'а, то текст отображается полностью, «прижимаясь» к правому краю.

В целом наверное с любыми деревьями горизонтальный скроллинг - это потенциально неисчерпаемый источник проблем, особенно с учётом распространённости мобильных браузеров с крохотными viewport'ами.

Интересно, как проблема горизонтального скроллинга решается в jsTree (плагин grid может как-то помочь?), ну и в принципе - как с этим борются в других движках для отрисовки деревьев на JS. Может быть, есть движок, который «делает это» существенно лучше, чем jsTree?

Спасибо!

 jstree,

DRVTiny
()

Самый быстрый способ увидеть картинку (битмэп)?

Товарищи!

Иногда возникает на удивление насущная задача посмотреть картинку, выполнив команду с путём до оной картинки.

Пока решаю оную задачу с помощью утилиты display из пакета ImageMagick. Вроде работает быстро, но... а вдруг есть что-то более специфичное и ещё более быстрое? Мне не нужно особо смотреть SVG-шки, например, не нужно конвертировать что-то куда-то - просто смотреть обычные битмэпы и всё.

На TK или на чистом XLib и без использования такой относительно тяжёлой библиотеки как ImageMagick - не найдётся ль чего? Я бы себе вместо display прописал в «альтернативах».

 ,

DRVTiny
()

А чего оно такое, извините, (1)?$x=1:$x=2 ?

[preamble] Все мы знаем о том, что реклама - не двигатель торговли, а инструмент охамевшего спекулянта, искренне желающего ничего не делать, а только пользоваться результатами чужого труда, поскольку тому, кто работает, как правило некогда думать о том, как бы втюхать произведённое втридорога.

Все мы также знаем о том, что Yandex - лучший друг спекулянтов, потому что основная их статья доходов - это реклама и недостоверная информация в Маркете. Та самая грёбаная реклама, которая делает из интернет большую смердящую навозную кучу с опарышами inside... [/preamble]

Но суть конечно не в этом, а в том, что у Yandex'а задачки интересные. Вот, в частности:

my $x=1;
$x=(1)?$x=1:$x=2;
print $x;

Что будет напечатано?

Ага, напечатано будет «2».

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

Если, например, сделать $x=(1)?print "hello\n":print "bye\n", то bye вы уж точно не увидите.

Так почему же в описанном выше случае значением будет всё-таки «2», а не «1»?

 

DRVTiny
()

Рекурсивный матчинг вложенных скобок

Строку, которая должна соответствовать шаблону, см. в самом коде:

my %p=('('=>')','{'=>'}');
my $a='fg{}hg (  (gh{jkjk} (h) g (llh) ) ( (jkj) (k(l h{} jhjhj )k) k) kkk) jkjkj (aaa)';
print "hello\n" 
 if $a=~m/^((?>[^({})]*)(?:([({])(?-2)(??{ '\'.$p{$2} })(?>[^({})]*))*)$/;

Вопрос: работает-то оно работает, но можно ли было проще сделать?

 ,

DRVTiny
()

Почему сдохли смартфоны с аппаратной клавиатурой?

По-моему есть железобетонный аргумент в пользу смартфонов с аппаратной клавиатурой: экранная клавиатура не работает при сколько-нибудь сложных погодных условиях: например, под моросящим дождём (такое впечатление, что он в Москве идёт дней 100 из 365 в году) и даже при сильном тумане. Собственно, достаточно капнуть капле пота на емкостной экран (после пробежки или езды на велосипеде) - и он начинает работать довольно странно. Также экран ощутимо тормозит на морозе, я уж не говорю о том, что он часто просто не реагирует ни на что, если руки холодные.

Так почему аппаратные клавиатуры умерли? Никому не нужна альтернатива? Никто не набирает тексты на смартфоне? Даже СМС-ки???

 ,

DRVTiny
()

Редактор Kate: куда делось окно консоли/терминала?

Раньше я мог под своим кодом открыть окно встроенного в Kate терминала для того, чтобы выполнять какие-то Linux'ячие команды.

Ныне же то-то случилось с Kate: я все менюшки перерыл, а терминала этого не нашёл.

Может, эта фича стала каким-то плагином, и его нужно подключать отдельно?

Кто знает, подскажите, please.

Спасибо!

 ,

DRVTiny
()

Удаление элементов из hash reference в рекурсивной функции

Я сделал вот так:

sub doRDKFH {
 my ($hr,$k)=@_;
 if (ref($hr) eq 'ARRAY') {
  map {doRDKFH($_,$k)} grep {ref($_) eq 'HASH' or ref($_) eq 'ARRAY'} @{$hr}
 } else {
  delete @{$hr}{ref($k)?@$k:($k)};
  map {doRDKFH($_,$k)} grep {ref($_) eq 'HASH' or ref($_) eq 'ARRAY'} values $hr
 }
}

Предложите варианты @более_рациональной{быстрой,короткой} функции?

UP: Обновил для случая того, чтобы хэши с вложенными списками и списки с вложенными хэшами тоже обрабатывались

 , , recursive

DRVTiny
()

Возможна ли подобная инкапсуляция в Perl?

Очень хочется делать так:

Описание класса:

package Object;
use strict;
use warnings;
our @EXPORT_OK=qw(new set_a get_a);
my $a='Hello';

sub new {
 bless {},shift
};

calc_a {
 my $v=shift;
 $v.=' here'
}

sub set_a {
 my $slf=shift;
 $a=calc_a(shift)
};

sub get_a {
 return $a
};

1;

Использование класса:

package main;
use strict;
use warnings;
use Object;

my $inst1=Object->new;
my $inst2=Object->new;

$inst1->set_a('Hot dog');
$inst2->set_a('Hot girl');

print join(' ','1)',$inst1->get_a,'2)',$inst2->get_a)."\n";

# $inst1->calc_a('Crazy man');

В результате должно быть выведено:

1) Hot dog 2) Hot girl

А если я раскомментирую последнюю строчку в main - Perl мне должен сказать «No such symbol calc_a in package Object» или что-то вроде этого - я же эту процедуру не экспортировал, а значит это «приватный метод».

Правильно ли я понимаю, что в Perl нельзя сделать так, чтобы переменные уровня пакета, в котором описан класс, были всё-таки переменными инстанса класса (конкретного объекта), а не просто переменными пакета?

Хранить данные в виде чего-то вроде $Config{refaddr $self}{'verbose'} - это по-моему извращение ещё более дикое, нежели хранение вообще всех данных внутри этой несчастной «благословлённой» (blessed) ссылки...

То есть чего бы хотелось:

1) чтобы при создании нового объекта происходило примерно то же, что и при fork'е процесса: все переменные пакета с их значениями копировались бы в адресное пространство объекта либо сразу, либо при первой же записи в них (а то копировать прямо всё и сразу может быть накладно).

2) нужно обязательное разделение методов на «приватные» и «публичные», чтобы я мог внутри объекта использовать те или иные процедуры, разрешая пользоваться извне лишь небольшим их подмножеством.

Можно ли как-то вот этак сделать в Perl или категорически нельзя?

P.S. Кстати, хранение всех собственных данных объекта в каком-нибудь громадном хэше, доступном по ссылке $ObjectData{refaddr $self}, то есть что-то вроде $ObjectData{refaddr $self}{'options'}{'user-defined'}{'var-a'} - это разве эффективно хотя бы с точки зрения скорости работы приложения? Как бы ни были эффективны хэши в Perl, по-моему все эти многоуровневые индексы куда менее эффективны, нежели простые переменные.

 ,

DRVTiny
()

Нужен обработчик изменения свойства объекта

Собственно, хотелось бы, чтобы при изменении значения свойства «цвет» объекта «лягушка» на «бело-оранжевый», объект «лягушка» резко переставал любить Путина, начинал размахивать белыми ленточками и носить оранжевый шарф.

Вопросов на самом деле 2:

1) Как сделать так, чтобы $frog->color('бело-оранжевый') вызывал пользовательский обработчик? (trigger?)

2) Как вы думаете, почему разработчики Moose не любят (судя по их примерам) подобный подход? Ведь ну очевидно же, что при изменении свойств объекта с этим самым объектом должно что-то интересное происходить - не обязательно смена политической ориентации...

 ,

DRVTiny
()

RSS подписка на новые темы