Hi,

I've become interested in Computer Numeric Control (CNC) machine control. I 
find there is very little support for the Macintosh platform and many PC 
programs for the task have a crude user interface so I would like to create a 
Macintosh CNC application using MacRuby.

CNC programs and motor drivers generally use the LPT parallel port output from 
a PC in the basic unidirectional mode. Most PC CNC apps do not support PC 
laptops due to processor sleep logic interfering with stepper motor timing. I 
would need a similar fast interface on the Mac.

I have a Prolific 2305 based USB to IEEE 1284 adapter cable that I would like 
to use. Mac OS recognizes the device as an "IEEE-1284 Controller" in the USB 
device tree and I can add a generic print queue for the device, but I don't 
know how to connect to the device at high speed as the printer controller does.

Prolific provides documentation for the simple report protocol for the device. 
I suspect that an appropriate driver already exists for this device but how 
would I find it?

Thanks,
Bob Rice


On Jan 17, 2012, at 2:27 PM, Alan Skipp wrote:

> Hi folks,
> just a quick note (followed by a question) to let you know that my GCD 
> rendition of ruby 1.9's most used feature – Fibers, is nearing completion. 
> Code here:
> 
> https://github.com/alskipp/MacrubyFibers
> 
> Currently passes 51 expectations from the fiber spec. 3 failures, all related 
> to raising exceptions, 2 of which can't be solved just yet as Macruby doesn't 
> raise LocalJumpError for errant procs. The final test failure I'd like to 
> fix, so here's the question…
> 
> When executing code on a serial dispatch queue, how can I raise an exception 
> on the main queue? The following works in an Xcode project:
> 
> Dispatch::Queue.new('serial_queue').async do
>     Dispatch::Queue.main.sync do
>         raise "Exception from #{Dispatch::Queue.current}"
>     end
> end
> #> Exception from com.apple.main-thread (RuntimeError)
> 
> My assumption is that this works because it is executed within an application 
> run loop. The same code does not work if invoked directly by Macruby, 
> presumably due to the lack of an application run loop, Macruby exits before 
> the Exception can be raised on the main queue, sometimes resulting in a 
> EXC_BAD_ACCESS crash.
> 
> Is there an alternative approach? 
> 
> Cheers,
> Al
> 
> 
> On 10 Jan 2012, at 18:44, Joshua Ballanco wrote:
> 
>> Hey Alan,
>> 
>> Awesome! I haven't had a chance to go through the code in detail, but I like 
>> the general approach. I'll definitely be looking into this in more detail 
>> later, but for now I just wanted to let you know that there are specs for 
>> Ruby 1.9's fibers in the MacRuby repo at 'spec/frozen/library/fiber'. It 
>> would be interesting to see how many of them pass with your implementation.
>> 
>> Cheers,
>> 
>> Josh
>> On Thursday, January 5, 2012 at 10:36 AM, Alan Skipp wrote:
>> 
>>> Hi everyone,
>>> I've had a go at implementing Fibers using dispatch queues. The code can be 
>>> found here:
>>> 
>>> https://gist.github.com/1565393
>>> 
>>> Inspiration was taken from the following ruby 1.8 Fibers implementation: 
>>> https://gist.github.com/4631
>>> 
>>> The implementation of Fiber.yield currently relies upon a hash stored as a 
>>> class variable. This is hopefully just a temporary solution to get things 
>>> started. The hash is always accessed through a serial queue (so it should 
>>> be thread safe) and dead fibers are removed after use. There are a couple 
>>> of GCD functions that look like they could be used to solve this problem: 
>>> 'dispatch_queue_set_specific' and 'dispatch_set_context'. Though I'm not 
>>> sure how to use these from Macruby. If anyone has any experience using 
>>> either of those GCD functions I'd be interested in learning more.
>>> 
>>> The major omission currently is the lack of a 'transfer' method. I've 
>>> pondered this quite a bit, but I've yet to come up with a solution. It is 
>>> quite possible that the way I've written the Fiber class prevents a 
>>> successful implementation of a 'transfer' method - but I've not given up 
>>> just yet. If anyone has a cunning plan on how to achieve it, that would be 
>>> great.
>>> 
>>> I've tested all the examples here:
>>> http://pragdave.blogs.pragprog.com/pragdave/2007/12/pipelines-using.html
>>> 
>>> and they all seem to work, plus I've included a few tests in the gist.
>>> The test which creates a fiber from Fiber.current, causes macruby to crash, 
>>> but I don't know why - it doesn't cause a crash when invoked normally 
>>> outside of minitest.
>>> 
>>> From my limited tests, everything other than the 'transfer' method appears 
>>> to be working, but feedback would be welcome if you discover any problems.
>>> 
>>> Al
>>> _______________________________________________
>>> MacRuby-devel mailing list
>>> MacRuby-devel@lists.macosforge.org
>>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
>> 
>> _______________________________________________
>> MacRuby-devel mailing list
>> MacRuby-devel@lists.macosforge.org
>> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel
> 
> _______________________________________________
> MacRuby-devel mailing list
> MacRuby-devel@lists.macosforge.org
> http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

_______________________________________________
MacRuby-devel mailing list
MacRuby-devel@lists.macosforge.org
http://lists.macosforge.org/mailman/listinfo.cgi/macruby-devel

Reply via email to