LINUX.ORG.RU

Секретное оружие корпораций или старичка Tcl/Tk ещё рано выбрасывать на помойку


0

0

За неделю наваял GUI к управлению триггером на Tcl/Tk, причём последний увидел в первый раз и поэтому одновременно с "ваянием" учил этот самый Tcl/Tk. Впечатления от Tcl/Tk самые приятные, GUI на нём лепятся "нараз", а поскольку компилять/пересобирать после изменений не нужно, разработка идёт почти "со скоростью мысли". Печать канваса в postscript автоматически даёт отчёт, который будет вклеиваться в "бортовой журнал" установки во время сеанса, чему будут несказано рады и народ из смен (не надо записывать ручками), и обработчики (использующие инфу из журнала при обработке). К сожалению есть и недостатки (может я чего не знаю и кто-нибудь знает, как с ними бороться):

* показан только для маленьких проектов, тк набор widget'ов в Tk ограничен (нет, например, выпадающей менюхи) как и их функциональность (привязка мышиных-клавиатурных событий к text часто приводит к глюкам)
* с кодировками проблема (не могу заставить печатать в postscript по-русски, хрен его знает, что за postscript-драйвер используется Tk'ом), выход - в канвасе создавать widget и выводить текст через него, при печати встроенные в канвас widget'ы растеризуются и русские буквы будут присутствовать как часть картинки
* сам Tcl далеко не сахар, видимо его авторы не задумывали его как general-purpose scripting language

Надо "долепить" годоскопы, триггерный процессор, утилиты к нему и всё, GUI готов к труду и обороне.

>>> Просмотр (1280x1024, 133 Kb)

★★

Проверено: Shaman007 ()

а что такое годоскопы?
что за триггеры такие вообще?
где и как все это хозяйство используется?

anonymous
()

Ещё бы б к Tcl/Tk стили прикручивать нормлаьные на манер Clearlook... А так - увы, в эти прибабахи тыкать противно :) Всё равно что кнопки в firefox'е под Linux...

KRoN73 ★★★★★
()

>>набор widget'ов в Tk ограничен (нет, например, выпадающей менюхи)

Как это нет? А tk_optionMenu?

>>не могу заставить печатать в postscript по-русски, хрен его знает, что за postscript-драйвер используется Tk'ом

Это тоже не проблема. postscript драйвера не существует. Tk сам занимается конвертированием содержимого canvas в postscript код. Проблема начинается не в момент его создания, а после того как ghostscript пытается этот код интерпретировать. Ковырять ghostscript нужно, а не вашу программу (не стоит заморачиваться с widget'ами )

geekkoo
()

А кто говорил, что Tcl/Tk стоит выбрасывать на помойку? Возможно, Tcl уже не так востребован как раньше (хотя это очень удобный язык для создания прототипов). Но в связке с Tk он становится по-настоящему мощным и удобным инструментом.

Даже B. Kernighan оценил все прелести этой связки:
http://www.usenix.org/publications/library/proceedings/tcl95/kernighan.html

parser ★★
()
Ответ на: комментарий от parser

Я, кстати, абсолютно за. Если бы не одно но. Эти proceedings - 95-го года.

geekkoo
()

python + qt + qt desigenr. Будешь весьма приятно удивлён

anonymous
()

Зачем сразу на помойку?

anonymous
()
Ответ на: комментарий от anonymous

> а что такое годоскопы?

твердотельные координатные детекторы, говорят "где что-то пролетело"

> что за триггеры такие вообще?

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

> где и как все это хозяйство используется?

в физике элементарных частиц, если о ГУЕ, то пока не используется, тк установка ещё строится и этот вариант далеко не последний

filin ★★
() автор топика
Ответ на: комментарий от geekkoo

> Как это нет? А tk_optionMenu?

ага, мерси за подсказку

> Проблема начинается не в момент его создания, а после того как ghostscript пытается этот код интерпретировать. Ковырять ghostscript нужно, а не вашу программу (не стоит заморачиваться с widget'ами )

ghostscript все постскрипты нормально показывает, а из Tk нет, это значит проблема в ghostscript??? Я думаю, Tk не умеет встраивать шрифты в постскрипт и ghostscript использует какие-то системные взамен, причём неправильные.

filin ★★
() автор топика
Ответ на: комментарий от ivon

> python + qt + qt desigenr. Будешь весьма приятно удивлён

надо глянуть, давно уже на PyQt облизываюсь, всё руки не доходят, кстати, а для Qt4 уже есть порт?

> Зачем сразу на помойку?

можно и в музей, только за какие заслуги? Я не знаю ни одного долгоживущего широкоизвестного приложения на Tcl/Tk. Сам взялся ваять на нём исключительно из интереса к нему. По идее, все долгоживущие немонопольные проекты обязательно несут в себе рациональное зерно, а может и не одно. Просто интересно, чего там народ такого гениального заложил в них.

> Нда, а у нас экспериментаторы нечто подобное на руте сваяли:)

в смысле на X-classes? вот если гистограмки строить, фитировать, ROOT - самое то, а вот просто ГУИ лепить, то увольте, пока на Qt совсем не переползут да binding из питона не доделают, ну эти X-classes нафиг, натрахался с ними, больше не хочу. Да и потом, не понимаю я, зачем несложный ГУЙ, не требовательный к ресурсам компа ваять на компилируемом языке (byte-compilers опускаем, их почти все современные скриптовые языки используют), скорость разработки при прочих равных выше у скриптового языка, неправильную работу с памятью опять же намного приятнее при встроенной поддержке интерпрететора отлавливать, про портируемость вообще молчу. Сами же знаете наверняка, работа часто происходит "на ходу", приходит детекторщик и говорит: хочу построить эффективность от задержки прямо сейчас, завтра начинаем боевой сеанс с записью и всё уже должно быть настроено тип-топ. Чтобы за полчаса наваять и отладить что ему нужно, это надо иметь очень короткий цикл "изменения-в-приложении/запуск-приложения", а иначе нельзя - отладка/настройка детекторов идёт только на пучке, а пучковое время жёстко ограничено и стоит "немеряных бабок", ускоритель питает отдельная электростанция (приврал чуток :)), это вам не "шлёпать аппликухи ковыряясь в носу".

filin ★★
() автор топика
Ответ на: комментарий от filin

>>>думаю, Tk не умеет встраивать шрифты в постскрипт и ghostscript использует какие-то системные взамен, причём неправильные.

Совершенно верно, только помимо Tk встраивать шрифты в документ еще много кто не умеет. Да это и не нужно. В ps файле есть ссылка (имя) шрифта. Ghostscript может сам найти (или не найти) нужный шрифт по этому имени (см. файл Fontmap.GS). При желании постскрипт файл можно пересобрать (ps2ps), при этом шрифты будут встроены в документ. Но только нужно вначале убедиться, что gv нормально ваш файл отображает.

geekkoo
()
Ответ на: комментарий от filin

>> python + qt + qt desigenr. Будешь весьма приятно удивлён

>надо глянуть, давно уже на PyQt облизываюсь, всё руки не доходят, >кстати, а для Qt4 уже есть порт?

К сожалению нормального на уровне PyQt нет, поэтому пока приходиться на c++ писать:( А вообще, я на тролей обиделся:((( В 4.1 так и не появилась замена QCanvas, что очень плохо, и занимаються они больши пиаром, типа вот мы прикрутили svg, джаву,но дейсвительно нужные вещи так и не сделали:(( Кстати у них релиз-кандидат 4.1 вышел, но новости об этом на ЛОРе до сих пор нет

anonymous
()
Ответ на: комментарий от anonymous

К tk прикручиваются темы, так что от родных виджетов не отличишь:)

anonymous
()
Ответ на: комментарий от filin

> надо глянуть, давно уже на PyQt облизываюсь

если надумаете, для отчетов советую посмотреть в сторону reportlab.org

Syncro ★★★★★
()
Ответ на: комментарий от anonymous

А зачем PyQt? PyGTK тоже весьма удобен... :-)

anonymous
()

BTW, есть Tk модуль для perl, да и не только для perl. Так что на Tcl свет клином не сошелся.

anonymous
()
Ответ на: комментарий от anonymous

> TW, есть Tk модуль для perl, да и не только для perl. Так что на Tcl свет клином не сошелся.

Недавно делал морду на Python/Tk. Достаточно удобно и быстро.

Но Tcl при этом знать всё же желательно :).

anonymous
()
Ответ на: комментарий от geekkoo

> При желании постскрипт файл можно пересобрать (ps2ps), при этом шрифты будут встроены в документ. Но только нужно вначале убедиться, что gv нормально ваш файл отображает.

с наскоку не получается побороть, и unicode пробовал и koi8-r и локаль настраивал, и ps2ps'ом конвертировал - хрен, всё те же яйца, только в профиль, на дисплее есть, а в postscript нет :(

filin ★★
() автор топика
Ответ на: комментарий от anonymous

> А вообще, я на тролей обиделся:((( В 4.1 так и не появилась замена QCanvas, что очень плохо, и занимаються они больши пиаром, типа вот мы прикрутили svg, джаву,но дейсвительно нужные вещи так и не сделали:(( Кстати у них релиз-кандидат 4.1 вышел, но новости об этом на ЛОРе до сих пор нет

ну может они готовят супер-канвас к релизу :-О, правда за денежку??? Вон, MathML до сих пор только за бабки :Е.

Да, уже посмотрел на 4.1, кому надо они и сами на их ftp заходят регулярно и последний snapshot выкачивают ;). Их увлечённость svg и правда как-то не к месту, похоже они всерьёз решили, что cpu performance будет и дальше расти как на дрожжах, посмотрим как они на массовые продажи multicore cpus отреагируют.

filin ★★
() автор топика
Ответ на: комментарий от Syncro

> для отчетов советую посмотреть в сторону reportlab.org

интересная штука, но как это часто бывает, в одном пакете замечательно сделана одна вещь, в другом другая, а вот "скрестить" эти пакеты целая проблема :)

filin ★★
() автор топика
Ответ на: комментарий от LJ

этож DAQ, при чём тут GUI??? я с ним близко не знаком, но просмотр некоторых сырцов, произвёл неизгладимое впечатление, таких грязных хаков я нигде больше не видел, например, как вам понравятся препроцессорные макросы с уровнем вложенности > 10 ??? >:-O

filin ★★
() автор топика
Ответ на: комментарий от filin

canvas .c
pack .c
font create Z1 -family Textbookpscyr
.c create text 0 60 -font Z1 -anchor nw -text "Здравствуй,мир!"
bind .c <Map> {.c postscript -file "C.ps"}


Textbookpscyr - это family X-ового шрифта (на самом деле это type1 шрифт из пакета PSCyr) только первая буква capitalized. Шрифт должен быть установлен, чтобы Tk его смог найти. В сгенерированном ps-файле он будет обозначаться как /Textbookpscyr (если он не найден, то Tk подменит его имя на /Fixed). gv будет искать строчку вида

/Texbookpscyr (textb19.pfb);

в файле Fontmap.GS и при отображении использовать начертание шрифта из файла указанного в скобках. У меня Fontmap.GS находится в /usr/share/ghostscript/8.15/lib, а файлы шрифтов, если не указан полный путь, ищутся в /usr/share/ghostscript/fonts.

Тут важно, чтобы в шрифте были русские буквы и чтобы Tk создал правильную кодировку в ps-файле (строка /CurrentEncoding в самом начале ps-файла). Кодировку Tk, понятное дело, берет из encoding system и я думаю не ошибается - если в ps-файле в массиве /CurrentEncoding есть строки типа /afii10025/afii10042/afii10047/afii10043/afii10041/afii10044 - то все в порядке (это адобовские имена русских букв).

Gv теперь должен показывать постскрипт нормально. После этого можно уже встроить фонт в postscript или pdf файл (ps2ps/ps2pdf).

Можно сюда еще заглянуть -
http://linuxportal.ru/entry.php/1003_0_3_0_C/
http://linuxportal.ru/entry.php/494_0_3_0_C/
Хотя это и не совсем по теме, но какая-то информация по-поводу шрифтов в постскрипте там имеется.

geekkoo
()
Ответ на: комментарий от geekkoo

Спасибо за консалтинг, конечно, только чтобы напечатать кирилицей в postscript я должен менять system-wide файлы?! что за х..??? Все бравзеры и опенофис без проблем встраивают шрифты в postscript и печатают кирилицу, будучи инсталёнными под обычным юзером, а для Tk надо настраивать систему?!!! >:-O Да пошёл он к праотцам такой тулкит!!! Чего только один его CLI стоит, не могли за годы разработки добавить history list, пусть даже и не сохраняемый. Вон, даже, извиняюсь, маразматик Керниган несколько месяцев учил синтаксис Tcl, а потом в своей поделке ещё и IPC через файлы сделал. Чтоб я ещё что-нибудь на Tcl/Tk сделал, да ни в жисть :Е.

filin ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.