[Impromptu] Impromptu v1.4 Beta

Ben Swift benjamin.j.swift at gmail.com
Tue Mar 31 02:27:55 GMT 2009


Yeah.  Using the pseudo-namespaces and tab completion gives you some  
ability to see the names of all the functions of a particular type,  
but there are still examples (such as your 'image one') where some  
sort of string matching would be great.

On 31/03/2009, at 1:22 PM, Andrew Sorensen wrote:

> I like this idea.  Stretching this even further help could also  
> search inside the help contents to find matches.  This would allow  
> you to do something like (help image) which would print functions  
> like gfx:image2image gfx:text2image as well as functions whose  
> contents contain references to an image but don't include it in the  
> name - like gfx:get-movie-frame
>
>
> On 31/03/2009, at 11:13 AM, Ben Swift wrote:
>
>> Hi Folks
>>
>> I mostly use (help function #t).  One thing that would be nice,  
>> though, is an 'apropos' style search where you could search for a  
>> particular substring in a function name.  This may already exist,  
>> but I've never found it.
>>
>> Cheers
>> Ben
>>
>> On 31/03/2009, at 11:36 AM, Andrew Sorensen wrote:
>>
>>> Hi Pierre,
>>>
>>> Oh yes, what to do about help in impromptu.  It's such a large  
>>> problem that I try not to think about it :(  My current strategy  
>>> (and this changes regularly) is to provide FAQ entries on the  
>>> website that try to cover common areas of usage.  This covers the  
>>> most territory with the least amount of work.  The examples files  
>>> are also there to help out with this to a certain extent.   
>>> However, there are large chunks of impromptu functionality that no- 
>>> one really knows about because they're just not documented.
>>>
>>> Anyway ... I can't get either impromptu, or the help viewer to  
>>> crash?  Is anyone else seeing the problem that Pierre describes?   
>>> Any chance of a crash log?
>>>
>>> Out of interest, how many people use the help menu item?  How many  
>>> people access help on the website?  And how many people use the  
>>> scheme (help <function>) function?  I'm thinking about removing  
>>> the help menu item completely?
>>>
>>> Cheers,
>>> Andrew.
>>>
>>>
>>> On 31/03/2009, at 4:46 AM, Pierre-Yves Gérardy wrote:
>>>
>>>> It is still problematic with the help file bundled in 1.4
>>>>
>>>> Using the search box in the help window crashes the help viewer.  
>>>> The search field in the help menu (menu bar at the top) can't  
>>>> find anything besides the generic OS X apps menu items.
>>>> In the function reference page, you have to click the section  
>>>> titles twice to reach them
>>>> Crosslinks in function pages don't work (one of them once crashed  
>>>> Impromptu 1.34)
>>>>
>>>> Cheers,
>>>> Pierre-Yves
>>>> _______________________
>>>> Pierre-Yves Gérardy, MD
>>>> Headache Research Unit
>>>> University of Liege
>>>> Citadelle Hospital (University dept. of Neurology),
>>>> Boulevard du XIIe de Ligne, 1
>>>> B4000 Liège, Belgium
>>>> Phone : +32 (0) 4 225 71 41
>>>> Mobile : +32 (0) 472 543 727
>>>> Fax : +32 (0) 4 223 88 07
>>>> Department Secretary : Ms Groven : +32 (0) 4 225 63 91
>>>>
>>>>
>>>> 2009/3/30 Pierre-Yves Gérardy <pygy79 at gmail.com>
>>>> Hi,
>>>>
>>>> I couldn't test 1.4 yet since I'm at work, but there is a problem  
>>>> with the help menu in 1.3n versions. Using the search function or  
>>>> clicking in cross-links between function descriptions (see also  
>>>> sections) causes the help window to crash.
>>>>
>>>> Cheers, and thanks for this version the new features will make  
>>>> things easier for me :-)
>>>> Pierre-Yves
>>>> _______________________
>>>> Pierre-Yves Gérardy, MD
>>>> Headache Research Unit
>>>> University of Liege
>>>> Citadelle Hospital (University dept. of Neurology),
>>>> Boulevard du XIIe de Ligne, 1
>>>> B4000 Liège, Belgium
>>>> Phone : +32 (0) 4 225 71 41
>>>> Mobile : +32 (0) 472 543 727
>>>> Fax : +32 (0) 4 223 88 07
>>>> Department Secretary : Ms Groven : +32 (0) 4 225 63 91
>>>>
>>>>
>>>> 2009/3/28 Andrew Sorensen <andrew at moso.com.au>
>>>> Hi All,
>>>>
>>>> There are some reasonably large changes in version 1.4 and I  
>>>> would really appreciate your help to test the new release.   
>>>> Hopefully everything works OK but as the system grows it's  
>>>> getting harder and harder for me to test everything fully before  
>>>> making new releases.  If you could give the beta a bit of a  
>>>> thrash test I would be very grateful.  Please let me know if you  
>>>> find any problems (including erroneous or out of date  
>>>> documentation).
>>>>
>>>> A complete listing of impromptu functions as at v1.4 is attached  
>>>> as a PDF.
>>>>
>>>> You can download the beta from:
>>>> http://impromptu.moso.com.au/extras/impromptu_1.4b.dmg
>>>>
>>>>
>>>> -- IMPROMPTU 1.4 Release Notes --
>>>>
>>>> Major Additions:
>>>>
>>>> Upwards of 200 new user functions.
>>>>
>>>> * Over 150 new vDSP,vImage and veclib functions for direct data  
>>>> processing
>>>> * New functions for interoperating with binary data more easily  
>>>> and efficiently (objc:data:*)
>>>> * Movie performance has been improved and now supports all QT  
>>>> formats.
>>>> * iChat Theater support for remote AV performance (simply drag  
>>>> and drop impromptu into your ichat session for live AV streaming).
>>>> * Improved CoreImage filter support (gfx:make-filter gfx:apply- 
>>>> filter and gfx:set-filter-param).
>>>> * New opengl functionality
>>>> * New text rendering support
>>>>
>>>> Major Bug Fixes:
>>>>
>>>> * Multi-channel audio fixes
>>>> * Scheme string port fixes
>>>> * Added OSC timestamp support (also added NTP support which can  
>>>> be used with OSC)
>>>> * Kore Player instantiation fix
>>>>
>>>> ---------------------------------------------------------
>>>>
>>>>
>>>> Thanks very much everyone for your help!  Happy Hacking!
>>>>
>>>> Cheers,
>>>> Andrew.
>>>>
>>>>
>>>> p.s. Some example code demonstrating the use of the new  
>>>> objc:data, vDSP and veclib libraries
>>>>
>>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>>> ;;
>>>> ;; Some examples using the new vdsp: and veclib: functions
>>>> ;;
>>>> ;; C arrays are very useful because (a) they're fast a (b) many  
>>>> libraries use them.
>>>> ;; The easiest way to interact with C arrays in Impromptu is to  
>>>> use NSData/NSMutableData objects.
>>>> ;; Basically NSData/NSMutableData objects are wrappers for  
>>>> malloc'd memory.
>>>> ;;
>>>> ;; Calling (objc:data:make 512) allocates 512 bytes of memory
>>>> ;; and returns this "memory" as an objc object.  When the objc  
>>>> object goes out of scope
>>>> ;; the memory is automatically released (i.e. you don't need to  
>>>> do anything special).
>>>> ;;
>>>> ;; Many impromptu functions expect nsdata/nsmutabledata objects  
>>>> as arguments. in particular
>>>> ;; the new vector libraries vdsp: and veclib: expect nsdata/ 
>>>> nsmutabledata objects.
>>>> ;; In this example file any reference to a 'vector' actually  
>>>> means NSData or NSMutableData
>>>> ;; NOT a scheme vector.
>>>> ;;
>>>> ;; For a full list of functions tab complete on vDSP: or veclib:
>>>> ;;
>>>> ;; Note that when creating nsmutabledata objects all lengths are  
>>>> in bytes (think malloc)
>>>> ;; but the vdsp and veclib functions take length and count  
>>>> arguments in number of
>>>> ;; elements (think array access). The examples below should give  
>>>> you a reasonable idea about
>>>> ;; how all this fits together
>>>> ;;
>>>> ;; WARNING: working with these functions (indeed any impromptu  
>>>> functions using nsdata) means
>>>> ;; directly manipulating memory.  For efficiency reasons I'm not  
>>>> checking everything you do
>>>> ;; so be careful with your lengths counts strides etc..
>>>> ;; In other words - don't access elements in NSData objects  
>>>> beyond your allocated memory!!
>>>> ;;
>>>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>>>>
>>>> ;; a couple of utility functions that we'll use later
>>>> (define print-vectorsd
>>>>   (lambda args
>>>>      (print '------------------)
>>>>      (let ((size (/ (objc:call (car args) "length") 8)))
>>>>         (dotimes (i size)
>>>>            (map (lambda (v)
>>>>                    (print (objc:data:get-double v i)))
>>>>                 args)))))
>>>>
>>>> (define print-vectorsf
>>>>   (lambda args
>>>>      (print '------------------)
>>>>      (let ((size (/ (objc:call (car args) "length") 4)))
>>>>         (dotimes (i size)
>>>>            (map (lambda (v)
>>>>                    (print (objc:data:get-float v i)))
>>>>                 args)))))
>>>>
>>>>
>>>> ;; create a vector (i.e. NSMutableData object) of double  
>>>> precision floats (i.e. Float64) zeroed out
>>>> (define v1 (objc:data:make (* 10 8)))
>>>> ;; create a vector (i.e. NSMutableData object) of single  
>>>> precision floats (i.e. Float32) zeroed out
>>>> (define v2 (objc:data:make (* 10 4)))
>>>> ;; create a vector of single precision floats (i.e. Float32)  
>>>> zeroed out
>>>> (define v3 (objc:data:make (* 10 4)))
>>>> ;; create a vector of single precision floats (i.e. Float32)  
>>>> zeroed out
>>>> (define v4 (objc:data:make (* 10 4)))
>>>>
>>>>
>>>> ;; assign random values (0.0-1.0) to every 2nd element in v1
>>>> (vdsp:vrandd v1 2 10)
>>>> (print-vectorsd v1)
>>>> ;; reverse v1
>>>> (vdsp:vrvrsd v1 1 10)
>>>> (print-vectorsd v1)
>>>>
>>>> ;; assign the value 5.125 to each element of v2
>>>> (vdsp:vfill 5.125 v2 1 10)
>>>> (print-vectorsf v2)
>>>> ;; assign a series starting at 0 incrementing by pi to v3
>>>> (vdsp:vramp 0.0 3.141592 v3 1 10)
>>>> (print-vectorsf v3)
>>>> ;; assign random numbers (0.0-1.0) to v4
>>>> (vdsp:vrand v4 1 10)
>>>> (print-vectorsf v4)
>>>> ;; scale v4 by 256.0 and put result in v2
>>>> (vdsp:vsmul v4 1 256.0 v2 1 10)
>>>> (print-vectorsf v2)
>>>> ;; sum v2
>>>> (print 'sum-of-v2 (vdsp:sve v2 1 10))
>>>>
>>>>
>>>> ;; let's see how fast this stuff is.  one million float32 elements
>>>> (define v5 (objc:data:make (* 1000000 4)))
>>>> ;; lets ramp from 0.0 to 999999.0
>>>> (let ((t (now)))
>>>>   (vdsp:vramp 0.0 1.0 v5 1 1000000)
>>>>   (print 'time-taken: (- (now) t)))
>>>>
>>>> ;; the answer is VERY FAST
>>>> ;; don't print the whole vector because that will take FOREVER!
>>>> ;; instead we'll print the first, last and a random internal  
>>>> element
>>>> (print (objc:data:get-float v5 0)
>>>>       (objc:data:get-float v5 409193)
>>>>       (objc:data:get-float v5 999999))
>>>>
>>>> ;; now let's do something cool - like convolution!
>>>> ;; first create a 4 tap filter [4 3 2 1]
>>>> (define v-filter (objc:data:make (* 4 4)))
>>>> (vdsp:vramp 4.0 -1.0 v-filter 1 4)
>>>> ;; then create a constant signal
>>>> (define v-signal (objc:data:make (* 4 16)))
>>>> (vdsp:vfill 1.0 v-signal 1 16)
>>>> (vdsp:vfill 0.0 v-signal 1 4)
>>>> ;; now convolve the signal with the filter dumping the result  
>>>> into output
>>>> (define v-output (objc:data:make (* 4 16)))
>>>> (vdsp:conv v-signal 1 v-filter -1 v-output 1 16 4)
>>>> ;; and print
>>>> (print-vectorsf v-output)
>>>>
>>>> ;; You can also create a reference into a data object.
>>>> ;; This can be useful for working on subsections of a vector
>>>> ;; note that this is a ref not a copy so you MUST NOT let the  
>>>> original fall out of scope
>>>> ;; you can however let the refence fall out of scope without  
>>>> danger.
>>>> (define original-v (objc:data:make (* 9 4)))
>>>> ;; subrange ref takes an offset in bytes and a length in bytes
>>>> ;; and returns an NSData reference to the original
>>>> (define reference-v (objc:data:subref original-v (* 3 4) (* 3 4)))
>>>> (print-vectorsf original-v)
>>>> (print-vectorsf reference-v)
>>>> (vdsp:vfill 1.0 original-v 1 9)
>>>> (vdsp:vfill 2.0 reference-v 1 3)
>>>> (print-vectorsf original-v)
>>>> (print-vectorsf reference-v)
>>>>
>>>> ;; dont' forget the veclib: functions
>>>> (define new-sqrt-data (objc:data:make (* 9 4)))
>>>> (veclib:vvsqrtf new-sqrt-data original-v 9)
>>>> (print-vectorsf new-sqrt-data)
>>>>
>>>> ;; Note that we can get and set individual elements of vectors  
>>>> (i.e. NSMutableData objects)
>>>> ;; but we must use the correct type (i.e. float uint8 uint32  
>>>> double etc..)
>>>> ;; however, bare in mind that this is slow - try to use the vdsp  
>>>> and veclib functions
>>>> (print (objc:data:get-float original-v 0))
>>>> (objc:data:set-float original-v 0 22.125)
>>>> (objc:data:set-float original-v 8 22.125)
>>>> (print (objc:data:get-float original-v 8))
>>>> (print-vectorsf original-v)
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Impromptu mailing list
>>>> Impromptu at lists.moso.com.au
>>>> http://lists.moso.com.au/mailman/listinfo/impromptu
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> Impromptu mailing list
>>>> Impromptu at lists.moso.com.au
>>>> http://lists.moso.com.au/mailman/listinfo/impromptu
>>>
>>> _______________________________________________
>>> Impromptu mailing list
>>> Impromptu at lists.moso.com.au
>>> http://lists.moso.com.au/mailman/listinfo/impromptu
>>
>> _______________________________________________
>> Impromptu mailing list
>> Impromptu at lists.moso.com.au
>> http://lists.moso.com.au/mailman/listinfo/impromptu
>
> _______________________________________________
> Impromptu mailing list
> Impromptu at lists.moso.com.au
> http://lists.moso.com.au/mailman/listinfo/impromptu

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.moso.com.au/pipermail/impromptu/attachments/20090331/a6de4927/attachment-0001.htm 


More information about the Impromptu mailing list