JM

Difference between version 285 and 286 - Previous - Next
[Jorge Moreno]
<<br>>
[JorgePIC%|% width=200 height=200]
<<br>>
<<TOC>>

** contact **
jorge raul moreno -at- hot mail -dot- com

''I heard that every android has a wish: to be ticklish...''<<br>>
This Android never suffered Pteronophobia (the fear of being tickled by feathers!)

[androwishIcon3%|% width=100 height=100]

** Great Tutorials **

   * Learn X in Y minutes (Where X=Tcl) https://learnxinyminutes.com/docs/tcl/
   * A Brief Introduction to Tcl/Tk ftp://ftp.oreilly.com/pub/convention/os/tutorial/tcltk.pdf

** My Books:**
%|Title|Author|%
&|Practical Programming in Tcl and Tk |Brent Welch|&
&|Effective Tcl/Tk Programming |Mark Harrison/Michael McLennan|&
&|Tcl/Tk for Real Programmers |Clif Flynt|&
&|The Tcl Programming Language |Ashok P Nadkarni|&

Effective Tcl/Tk Programming
----
** Pages I started...**
   * [LogParser]
   * [LogParser goes COM]
   * [playing BLT]
   * [timeliner (minutes instead of years)]
   * [multiple timers]
   * [a form for Access Database]
   * [Clif Flynt Articles]
   * [LemonTree branch]
   * [Tclodbc + BLT]
   * [a perpetual calendar]
   * [JeeMon]
   * [Mavrig]
   * [LemonTree Org Chart] Oct-9-2012
   * [Playing PIC Simulation] Nov-11-2012
   * [Web Scraping with htmlparse] Dec-4-2012
   * [CGI script for directory listing, simple posts and templates] Dec-29-2012
   * [Androwish: Icon]
   * [colorized crc]
   * [plink]
   * [Interfacing PS2 Keyboard with Arduino and Androwish]
   * [BLT data series in rows or columns]
   * [Androwish Serial Port]
   * [Script Catalog - KPV]
   * [Uli Ender bitbang I2C with Arduino] 11/23/2019
----
** pages where I have made minor edits...**
   * [Wiki format to HTML] on 7/8/2011
   * [toggle button] on Feb-2011
   * [web2desktop] on 7/27/2011
   * [Turtle Shell for Androwish] 3/21/2014
   * [Ticker] 4/2/2014
   * [True Random Numbers] 4/3/2014
----
** when programming with Tcl, I use:**

for XML parsing
   * drive [LogParser] through COM and Tcl

web scrapping
   * tool that helps: firefox add-on that shows tdom structure (DOM Inspector)
   * tool that shows http protocol (HttpFox)
   * [LemonTree branch]

diagrams
   * http://www.graphviz.org/
   * [Tcldot]
   * [XML Graph to canvas]
   * [Generating Syntax Diagrams Using Tk]

WebServer
   * [Wibble]
   * [tclHttpd]

Static content
   * [MajaMaja]

driving other windows application
   * [cwind]

Most used:
   * [tclODBC]
   * [BLT]
   * [tablelist]

----
** Bookmarks:**
   * [Windows wish console]
   * [a little spreadsheet]
   * [Using Tcl to write WWW client side applications within the WWW browser]
   * Home Automation Portal Appliance with Tcl: http://hometoys.com/emagazine.php?url=/htinews/apr06/articles/appliance/part2.htm
   * http://net.tutsplus.com/tutorials/other/http-headers-for-dummies/
----
   * [Teach programming to children]
   * [High-level wrapper for pdf4tcl]
   * http://tcl.projectforum.com/young/22
   * http://incrtcl.sourceforge.net/itcl/mmc/snaps.html
   * [Quick photo rotation] which includes how to rotate a label...
----
2013-12-07 [A few of your favorite things] about editing scripts with [Tkcon]<<br>>
2014-06-25 [Hack-O-Matic]<<br>>
2014-08-09 [filewait]<<br>>
2014-08-22 [Quick Formatting ANSI Colour Escape Strings]<<br>>
2014-08-22 [cgrep - Color your output with regular expressions!]<<br>>
2014-10-03 [WikIndent] input line by line<<br>>
2015-03-13 [Freecell] for a cross platform alternative to SystemButtonFace color<<br>>
2015-03-13 [Invoking browsers] to launch firefox under linux<<br>>
2015-10-15 [vgrep: a visual grep]<<br>>
2016-11-17 [serial ports on Windows]<<br>>
[Matthias Hoffmann]
   * [Simple Program Menu]
[Detlef Groth]
   * [TemplateRecall]
   * [dgDBBrowser]
[wdb]
   * [MTE]
2017-03-17 [minimalist wget]<<br>>
2017-07-05 [getopt] to parse out switches from the command line (argv) by name<<br>>
2017-07-11 [LiSA]<<br>>
SWIG exemples http://wfr.tcl.tk/1693 <<br>>
Scan and modify text files http://wiki.tcl.tk/15518 <<br>>
Easy Text Print (includes awk) http://wiki.tcl.tk/42409 <<br>>
'xpg' - a text file browser (includes awk) http://wiki.tcl.tk/38443 awk and shell script <<br>>

*** Web ***
%|Date|Page|tags|%
&|2017-12-20|[Editing the Tcl'ers Wiki using an editor of your choice]|TBD|&
&|2017-12-28|[w3m]|automate web browser with Expect|&

*** SQLite ***
%|Date|Page|tags|%
&|2017-12-20|[Get CPU Temperature Statistics]|sqlite|&
&|2017-12-28|[Paging with TkTreeCtrl + SQlite]|CREATE TABLE IF NOT EXISTS|&
&|2015-01-13|[Heronian triangles]|TBD|&


6/7/2018 Web HTML http
   * [MkBugs]
   * [My first wapp-lication]
   * [Tcl does OCR online] 3/27/2019

*** Arduino ***
[Firmata]<<br>>
[Interfacing PS2 Keyboard with Arduino and Androwish]<<br>>
[JeeMon]<<br>>
[A scale with Arduino and AndroWish]<<br>>
<<br>>

*** BLT ***
[Filtering measurement values with a 1D Kalman filter]<<br>>
----
BLT-newbie - barchart: How to display value under mouse cursor<<br>>
http://computer-programming-forum.com/57-tcl/b286e0c308f1604e.htm<<br>>
----
BLT graph: Problem setting colors using RGB notation<<br>>
http://computer-programming-forum.com/57-tcl/790b8f5784d4984a.htm<<br>>
----
BLT vector creation: creation time grows as number of vectors created grows<<br>>
http://computer-programming-forum.com/57-tcl/326d86938e3c7375.htm<<br>>
*** Code Review:***
   * [OpenSky API]
   * [LogParser accessing the Windows event log]
   * Androwish - Tcl interface to libmodbus, using Ffidl and TclOO
*** Assemblers:***
   * Uli Ender's - See [17th European Tcl/Tk Users Meeting 2019]
   * https://spivey.oriel.ox.ac.uk/corner/Nanocomp_clock
   * [Qibec]


<<br>>
** My formatting guide**
*** Italics:***
 ''My quick reference''
''My quick reference''
*** Bold:***
 '''My formatting guide'''
'''My formatting guide'''
*** Numbered List***

 xxxd.xItem1
   1. Item1
======tcl
puts "Tcl is great!"
======

 puts "did I mention that Tcl is great?"

======
puts "Tcl/Tk"
======

Links:<<br>>
For [Formatting Rules] click [Formatting Rules%|%here%|%] or http://wiki.tcl.tk%|%here%|%

<<br>>
[graffiti]
----

** tclODBC + tclhttpd **
''[JM] 22 Jul 2011'' - I was just playing a little bit with [tclhttpd] by putting the following code on the file: \htdocs\cgi-bin\test.cgi

 package require tclodbc
 set driver "Microsoft Access Driver (*.mdb)"
 set dbfile "C:\\Program Files\\Microsoft Office\\office11\\samples\\Northwind.mdb"

 puts [html::h3 "getting info from Access through tclODBC..."]
 puts "<table border=1 cellpadding=4>"
 database connect db "DRIVER=$driver;DBQ=$dbfile"
    
 foreach rec [db "select EmployeeID,LastName,FirstName FROM Employees;"] {
   puts "<tr>"
   foreach field $rec {
     puts "<td>$field</td>"
   }   
     puts "</tr>"
 } 
 puts "</table>" 
 db disconnect

just after the following existing lines:

 puts [html::h1 "Hello, World!"]
 puts [html::h2 [clock format [clock seconds]]]

and I got a dynamic page that queries the database that comes as a sample with the [Microsoft Access] installation.

you can get there by means of the '''CGI''' link on the home page, then through the '''Sample form posted to test.cgi''' and finally hitting the "Submit Query" button.

----

** pscp **
''[JM] 7 Sep 2013'' - pscp from the http://www.chiark.greenend.org.uk/~sgtatham/putty/%|%putty%|% family of tools, see also plink
   * The following script runs on a windows machine
   * Getting a file from an ubuntu machine
   * The file will be copied to c:\putty in this case

 console show
 proc action {} {
   cd c:/putty
   set f [open "|\"pscp.exe\" -l jorge -pw yourpwd [.from get]:[.path get] ."]
   puts done
 }
 entry .from
 entry .path -width 50
 button .button -text get -command action

 .from insert 0 [email protected]
 .path insert 0 /home/jorge/sample.txt

 pack .from .path .button
** gnuplot and the tkcanvas terminal type **
''[JM] 26 Oct 2013'' - I dont know why, but I had to put some puts commands after the [source] command to make http://wfr.tcl.tk/273%|%it%|% work, if not, I was getting an error saying that the gnuplot commmand did not exist
 console show
 #set gpexe C:/gnuplot-4.0/bin/pgnuplot.exe
 set gpexe "C:/Program Files (x86)/gnuplot/bin/pgnuplot.exe"
 #set outfile C:/data/resultat.tk
 set outfile "C:/Users/jmoreno/Documents/code/gnuplot/resultat.tk"

 set gp [open "|\"$gpexe\"" r+]
 puts $gp "set term tk"
 puts $gp "set output '$outfile'"
 puts $gp "set noborder\nset zeroaxis"
 puts $gp "set xtics 1\nset ytics .5"
 puts $gp "plot \[-2:2\] atan(x)"
 close $gp

 pack [canvas .c]
 source $outfile
 puts $outfile
 puts [info commands gnu*]
 update
 gnuplot .c

''[JM] 7 Nov 2014'' - Looks like the real fix is this (just waiting a little, to let pgnuplot.exe to completely close):
 console show
 #set gpexe C:/gnuplot-4.0/bin/pgnuplot.exe
 set gpexe "C:/Program Files (x86)/gnuplot/bin/pgnuplot.exe"
 #set outfile C:/data/resultat.tk
 set outfile "C:/Users/jmoreno/Documents/code/gnuplot/resultat.tk"

 set gp [open "|\"$gpexe\"" r+]
 puts $gp "set term tk"
 puts $gp "set output '$outfile'"
 puts $gp "set noborder\nset zeroaxis"
 puts $gp "set xtics 1\nset ytics .5"
 puts $gp "plot \[-2:2\] atan(x)"
 close $gp
 after 1000
 pack [canvas .c]
 source $outfile
 #puts "we are at: [pwd]"
 #puts $outfile
 #puts [info commands gnu*]
 #update
 gnuplot .c
** Expect **
''[JM] 18 Feb 2014'' - The following example was good for me to try the basics<<br>>
[Remote input-output with Expect]
** XML Post HTTP **
''[JM] 26 Feb 2017'' - from:<<br>>
https://groups.google.com/forum/#!topic/comp.lang.tcl/B6afDJQg8LA

 package require http
 console show

 set organism_name "nipah"
 set xml "
 <?xml version=\"1.0\" encoding=\"UTF-8\"?>
 <orgPdbQuery>
 <version>B0905</version>
 <queryType>org.pdb.query.simple.OrganismQuery</queryType>
 <description>Organism Search : Organism Name=$organism_name </description>
 <organismName>$organism_name</organismName>
 </orgPdbQuery>
 "
 set url "http://www.rcsb.org/pdb/rest/search"

 set tok [::http::geturl $url -query $xml -type application/x-www-form-urlencoded]
 set rep [::http::data $tok]
 puts "[::http::status $tok]"
 puts $rep

 ::http::cleanup $tok 

** Where is tablelist? **
 % package require tablelist
 5.13
 % package ifneeded tablelist 5.13
 package provide tablelist 5.13;source -encoding utf-8 C:/Tcl/lib/teapot/package/tcl/teapot/tcl8/8.0/tablelist-5.13.tm
 %

                                                       C:\Tcl\lib\teapot\package\tcl\lib\tablelist_common5.13

** TreeQL Examples **
+&
| 1
| [wiki-reaper]
| tbd
+&
| 2
| [Web Scraping with htmlparse]
| withatt type
+&
| 3
| https://github.com/jtcl-project/jtcl/blob/master/src/main/resources/tcl/pkg/tcllib/library/page/util_norm_peg.tcl
| over n
** Other scripts that need some polishing
*** extract images from pdf

======
package require mupdf
console show

 # just a bare GUI - a label containing an image "imagePage"
image create photo imagePage
label .page -image imagePage -padx 5 -pady 5
pack .page -expand 1 -fill both
label .info -text "Press Up / Down keys" -relief groove
pack .info -fill x -padx 2 -pady 2

bind .page <Key-Up> {showPage $pdf [prevPage]}
bind .page <Key-Down> {showPage $pdf [nextPage]}


proc showPage {pdf n} {
        set page [$pdf getpage $n]
        imagePage blank  ;# just in case the new page is smaller than previous
        $page saveImage imagePage -zoom 0.5
}

proc nextPage {} {
        global gApp
        if { $gApp(currpage) < $gApp(lastpage) } {
                incr gApp(currpage)
        }
        return $gApp(currpage)        
}
proc prevPage {} {
        global gApp
        if { $gApp(currpage) > 0 } {
                incr gApp(currpage) -1
        }
        return $gApp(currpage)        
}

 # ---

set pdfFileName [tk_getOpenFile -filetypes {{Pdf .pdf}}]

set pdf [mupdf::open $pdfFileName]

    # open a file and save 1st page as a .png file

# package require mupdf
# set pdf [mupdf::open /mydir/sample.pdf]
# $page savePNG /mydir/page0.png
# $pdf quit
set pageQty [$pdf npages]
for {set i 0} {$i < $pageQty} {incr i} {
        set page [$pdf getpage $i]   ;# 0 is the 1st page
        set ctr 0
        foreach imagen [$page images list] {
                puts $imagen
                set id [$page images extract -id [lindex $imagen 0] -as "img$i-[lindex $imagen 1]"]
                incr ctr
        }
}

set gApp(currpage) 0
set gApp(lastpage) [expr [$pdf npages]-1]

showPage $pdf 0
focus .page

======



<<categories>> Person