Я не очень люблю слушать музыку альбомами песню за песней - утомляем быстро и надоедает. А тут приобрел плеер самый простой из-за вечной экономии - Digma Mp600, а он не умеет shuffle. Да и в машину FM-трансмиттер купил с той-же проблемой (правда надо сказать что там можно с пульта случайную композицию включать, но это же не безопасно на дороге - особенно если ездишь один). Вот и написал в свободные полчаса пару скриптов:
Данная библиотека появилась пару лет назад на примерах Печникова. Под себя я правда переписал...
Вот пример кода:
А вот библиотека:
Вот пример кода:
#! /usr/bin/tclsh source config/cfg.cfg test_cookie doctype html { siteheader "Iconez" lite body { cms-menu sidebar if ![guest] { div -class main -style text-align:center { h3 {puts "Прикрепленные ярлычки:"} hr table { foreach lin [exec ls images/ | grep "16x16.png$"] { tr {td {img -src /images/$lin -width 32px -height 32px} td {puts /images/$lin} } } } } } sitefooter lite } }
А вот библиотека:
package provide html2 1.0 namespace eval ::html2:: { namespace export * } # шаблон для генерации стандартного html-тэга proc ::html2::tag {name args} { set name [string range $name [expr [string last : $name]+1] end] if [expr [llength $args]%2] { set opts [lrange $args 0 end-1] set b [lindex $args end] } else { set opts $args set b "" } puts -nonewline "<$name" foreach {argname argvalue} $opts { if [regexp " $argname " " -checked -hidden -readonly "] { if {$argvalue ne "0"} {puts -nonewline " [string range $argname 1 end]"} } else {puts -nonewline " [string range $argname 1 end]=\"$argvalue\""} } ### для незакрывающихся тегов if ![regexp " $name " " area base basefont col frame param meta link img input hr br "] { puts -nonewline ">" uplevel 1 $b puts -nonewline "</$name>" } else { if {$name eq "img" && ![regexp -- "-alt" $opts]} { puts -nonewline " alt=\"\"" } puts -nonewline ">" } } foreach name {html meta title body head style link script form textarea input table thead tfoot tbody tr td th center a font button div span p img label ol ul li b i u s strong em h1 h2 h3 h4 h5 h6 br hr var code kbd tt samp pre acronym embed header footer dd dt video audio} { proc ::html2::$name args { set name [lindex [info level 0] 0] uplevel 1 html2::tag $name $args } } proc ::html2::doctype {} { puts {Content-Type: text/html; charset=utf-8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">} } proc ::html2::html5 {} { puts {Content-Type: text/html; charset=utf-8 <!DOCTYPE html>} }
Была поставлена задача проверять баланс 3G модема Huawey без использования Mobile Partner. После прочесывания инета было выяснено:
1) АТ команду нужно посылать в закодированном виде
2) Ответ модем также присылает в закодированном виде
1) АТ команду нужно посылать в закодированном виде
2) Ответ модем также присылает в закодированном виде
Скрипт для блокировки узверей (нужен пакет для обрезки соединений cutter и цепочка в iptables lock добавленная до разрешения форварда из локалки"
/etc/netams# less lockuser
/etc/netams# less lockuser
Нужен иногда переводчик с импорта на наш и иногда наоборот, а то и с какого-нибудь японского на китайский :)
Google Translate в этом отношении весьма и весьма не плох по качеству перевода, можно даже иногда с неким иносТранцем в вакууме пообщаться, ну почти...
для быстрого перевода я себе добавил в гуглтолковский ростер парочку ботов en2ru@bot.talk.google.com и ru2en@bot.talk.google.com. В обычном джабберовом ростере они у меня не прижились - не показывали статус и не отзывались на запросы. Ну в общем вот. Ближе к делу - решил я в порыве автоматизации всего и вся, автоматизировать и перевод повесив его на горячую клавишу.
Google Translate в этом отношении весьма и весьма не плох по качеству перевода, можно даже иногда с неким иносТранцем в вакууме пообщаться, ну почти...
для быстрого перевода я себе добавил в гуглтолковский ростер парочку ботов en2ru@bot.talk.google.com и ru2en@bot.talk.google.com. В обычном джабберовом ростере они у меня не прижились - не показывали статус и не отзывались на запросы. Ну в общем вот. Ближе к делу - решил я в порыве автоматизации всего и вся, автоматизировать и перевод повесив его на горячую клавишу.
Представляю вашему вниманию CGI-скрипт на языке высокого уровня TCL, который позволяет быстро организовать альбом из фотографий. Для его работы нужна JS библиотека с http://highslide.com/, которая позволяет быстро просматривать галлерею. Для организации подобного нужны (для debian/ubuntu):
# ставим необходимое aptitude install lighttpd tcl8.5 tcllib imagemagick # правим /etc/lighttpd.conf на предмет таких строк ... index-file.names = ( "index.tcl", "index.php", "index.html", ... static-file.exclude-extensions = ( ".tcl", ".php", ".pl", ".fcgi" ) ... # разрешаем модуль cgi lighty-enable-mod cgi # добавляем в /etc/lighttpd/conf-enabled/10-cgi.conf ... cgi.assign = ( ".tcl" => "/usr/bin/tclsh", ... # рестартуем lighttpd /etc/init.d/lighttpd restart
теперь веб-сервер готов к работе, в корень (/var/www) кладем директорию c распакованой JS-библиотекой highslide, еще можно положить файл с фоном (/var/www/images/372.jpg), и белую подложку размером 185x185px (/var/www/images/fon.png).
Создано: 16-09-2009 08:48:10
Метки: tcl
array set lang { ### тут элементы массива } # открываем файл set fl [open $argv r] set a [read $fl] close $fl foreach n [array names lang] { # здесь получаем {\$lang\(name\)} или {\$::lang\(name\)} set rep \{\\\$(::)*lang\\($n\\)\} # замена - применяем eval чтобы подменить регулярку значением переменной # экранируем все что не нужно менять - получаем что-то типа: # set a [regsub -all {\$lang\(name\)} $a "$lang(name)"] set a [eval "regsub -all $rep \$a \"$lang($n)\""] } # пишем результат set wr [open $argv w] puts $wr $a close $wr
Создано: 14-09-2009 19:56:25
изменено: 21-01-2010 13:40:15
Метки: tcl
решил попробовать написать дампер файлов на tcl, вот что получилось:
пример вывода:
#! /usr/bin/tclsh if { $argc eq 0 } { puts "Печать hex-дампа файла Использование: $argv0 имя_файла" exit 0 } if ![file exists $argv] { puts "Файл не найден" exit 1 } set fl [open $argv r] fconfigure $fl -translation binary while {![eof $fl]} { set str "" puts -nonewline [format "%08x " [tell $fl]] set a [read $fl 16] foreach sym [split $a {}] { set c [scan $sym %c] puts -nonewline [format "%02x " $c] if {$c < 32 || $c > 126} { append str . } else { append str [format %c $c] } } puts \t$str } close $fl
пример вывода:
00010c90 5f 31 36 78 31 36 2e 70 6e 67 50 4b 01 02 14 00 _16x16.pngPK.... 00010ca0 14 00 00 00 00 00 00 00 21 00 99 8a b4 a9 08 04 ........!....... 00010cb0 00 00 08 04 00 00 0d 00 00 00 00 00 00 00 00 00 ................ 00010cc0 00 00 a4 01 6c f3 00 00 72 73 73 5f 31 36 78 31 ....l...rss_16x1 00010cd0 36 2e 70 6e 67 50 4b 01 02 14 00 14 00 00 00 00 6.pngPK......... 00010ce0 00 00 00 21 00 4d de a0 f7 37 04 00 00 37 04 00 ...!.M...7...7.. 00010cf0 00 0f 00 00 00 00 00 00 00 00 00 00 00 a4 01 9f ................
У идущего в дистрибутиве debian/ubuntu tclsh есть существенный недостаток: в интерактивном режиме нет автодополнения по TAB и памяти команд. Для того чтоб воспользоваться более удобным интерфейсом поставим eltclsh.
Update whith new version:
пакет для ubuntu 8.04lts прилагаю
sudo aptitude install checkinstall libxss-dev libedit-dev tcl8.5-dev tk8.5-dev tar xfz eltclsh-1.11.1.tar.gz cd eltclsh-1.11.1 # чтоб не возиться с опциями configure sed -i 's|tcl8.4|tcl8.5|g' configure # меняем install-sh на родной install mv install-sh install-sh.old ln -s /usr/bin/install install-sh ./configure make sudo checkinstall eltclsh
Update whith new version:
пакет для ubuntu 8.04lts прилагаю
Попробовал написать несложное cgi-приложение используя средства tcl, sqlite, css и html. Вот что получилось: