Producer consumers questions

I am developing an application that reads and processes serial data from a prototype device.  The data is transferred from my device at 160 Hz and is comprised of about 200 bytes of data. Each data packet has header, data, and checksum bytes.  A illustration of my data packets would be the following: [Header bytes][Data bytes][Checksum bytes].
The main design pattern I am using in my application is the producer consumer design pattern.  The producer reads in the data byte-by-byte (via VISA Read) and enqueues it for the consumer loop.  The consumer loop dequeues the data byte-by-byte and then passes each byte through a state machine that finds the header, forms the data bytes into an array, and then finally parses, processes, and saves the data. The states of my state machine are:  find header, build packet array, and process and save.
I've used this approach in the past and it has always worked for me, but I've always wondered if it is the best solution for this type of application.  Are there better solutions out there?  Reading and processing data in byte-by-byte doesn't seem like a good idea, but it is simple and straightforward. 
I have been considering pushing all of the parsing, checking, processing, and saving into a third loop.  In this approach, my current consumer would act as both a consumer and a producer.  It would consume data by finding packet headers and building data packet arrays, and it would produce data by enqueuing data packet arrays for a new, second consumer loop.  The reasoning behind this approach is that it would separate tasks and allow me to only have to change the second consumer for different projects that use my base hardware.  Is this kind of approach reasonable or is it too complex and/or ill advised?

Will something like this work?
It looks like it should, but Match Regular Expression is throwing null character errors.
Attachments:
full.png ‏94 KB
state2.png ‏43 KB
state3.png ‏42 KB

Similar Messages

  • Classic Producer/Consumer question

    All,
    I've a straightforward (hopefully) question regarding the producer consumer thread example. While I get the entire picture - I have a question about the lines in the code :
                   sleep((int)(Math.random() 100));*
    in the Producer. WITHOUT this line, the output goes haywire (with Producer and Consumers putting/getting values randomly)- while with it, the producers and consumers start behaving normally (ie Producer Puts and Consumer Gets like clockwork)
    Why is it necessary to put this line in? What's it trying to put to sleep anyways and for what reason?
    public class DerTest {
         public static void main(String...argv) throws Exception {
              Holder holder = new Holder();
              Producer producer = new Producer(holder);
              Consumer consumer = new Consumer(holder);
              producer.start();
              consumer.start();
    class Holder {
         private int i;
         private boolean hasPut;
         public synchronized void put(int i) throws Exception {
              while(this.hasPut == true) {
                   wait();
              this.i = i;
              this.hasPut = true;
              notifyAll();
         public synchronized int get() throws Exception {
              while(this.hasPut == false) {
                   wait();
              this.hasPut = false;
              notifyAll();
              return this.i;
    class Producer extends Thread {
         private Holder holder;
         public Producer(Holder holder) {
              this.holder = holder;
         public void run() {
              int i = 0;
              try {
                   while(true) {
                        this.holder.put(i);
                        System.out.println("Putting : "+i);
                        i++;
                        sleep((int)(Math.random() * 100));
              } catch(Exception e) {
                   e.printStackTrace();
    class Consumer extends Thread {
         private Holder holder;
         public Consumer(Holder holder) {
              this.holder = holder;
         public void run() {
              try {
                   while(true) {
                        int i = this.holder.get();
                        System.out.println("Getting : "+i);
              } catch(Exception e) {
                   e.printStackTrace();
    }

    because the printlns are not synchronized with the get/put calls. put those printlns inside of the get/put methods and you will see the output you expect.

  • Producer/consumer question

    Hi everyone
    I am stucked with a problem using the producer/consumer VI.
    My VI continuously acquires data from the DAQ using a producer/consumer VI.
    In the maintime, I would like to introduce and save some notes that can help me to identify the acquired data in a separate file without stopping the acquisition.... but  I don't know how to do it or modify the producer/consumer scheme.
    Any suggestion?
    Thanks for the reply
    matomato
    Solved!
    Go to Solution.
    Attachments:
    ProducerConsumerData_time_Y_Sim_Start_13.vi ‏70 KB

    matomato wrote:
    Hi Smercurio_fc
    The purpose of the code with the Write to Spreadsheet File on the left is to save some comments without stopping the acquisition.
    The problem with it is that it only runs once at the beginning of the program.
    ...The new one should be be to introduce and save his details without stopping the acquisition.
    Save where? In this secondary file, or in the measurement file as a comment?
    Technically, I don't know how to modify the producer/consumer scheme to introduce the new loop with the case structure maintaining the data acquisition as the main loop.
    Hope to have answered your question, if not let me know.
    I'm not sure I understand what you are asking. Are you saying you don't know how to add another loop to the code? Or are you saying you don't know how to use the event structure?

  • Two Federation Questions

    Hey experts,
    I have my federation working with a producer and consumer but I'm having some permission problems I think:
    1) In my consumer I can't see any roles in UserAdmin when selecting Role, "my Producer", and * in the search criteria fields even though I have a role there. However if I give j2ee_guest in "my producer" the super_admin_role priviledges then I see a ton of roles.
    2) In my consumer under Content Admin | Portal Content | Netweaver Content Producers | "my Producer" I can see the entire Portal Content tree. Shouldn't I only be able to see the PCD directory that I established in:
    Syss Admin | Sys Config | Service Configuration | com.sap.portal.ivs.wsrpservice | AutoGenProcuder1_0 service?
    Any help is appreciated.
    Mike

    Jo,
    Netweaver 7.0 sp18
    my question: 1) In my consumer I can't see any roles in UserAdmin when selecting Role, "my Producer", and * in the search criteria fields even though I have a role there. However if I give j2ee_guest in "my producer" the super_admin_role priviledges then I see a ton of roles.
    elaboration:
    a) In the consumer portal going to User Administration | Identity Management | Search Criteria using in the dropdown: Role, "my Producer", * result => I can not see any roles from the producer.
    b) If I go to my producer portal and modify the user j2ee_guest and give him the super_admin_role then when following a) above result => I can see roles in the producer
    my question: 2) In my consumer under Content Admin | Portal Content | Netweaver Content Producers | "my Producer" I can see the entire Portal Content tree. Shouldn't I only be able to see the PCD directory that I established in:
    Sys Admin | Sys Config | Service Configuration | com.sap.portal.ivs.wsrpservice | AutoGenProcuder1_0 service?
    elaboration: In the service AutoGenProcuder1_0 service it explicitly asks for a PCD directory called "content_root_folder" that I presume is the pcd directory structure that is to be federated. So, I have defined there a directory structure lower in the portal_content tree, i.e. I have not just defined "portal_content" there but "portal_content/blah ... /blah .... /blah ...."
    I hope that helps explain.
    Mike

  • Trying to make a loop and repeat a question.

    Hello all,
    I am trying to get a question to repeat itself only if the user enters an invalid amount. I have got the program to generate the invalid question "This is an invalid rate of pay, please enter a valid rate of pay.", but after the program produces this question, the program will still continue (ask the next question) as if the input was valid. I have tried several different if and while statements to try to manipulate the program to call the previous question, but it will not????? Thank you all in advance.I am at a loss. Can someone help please???? Here is the section of code:
    // Employee's hourly rate.
    System.out.print( "Enter hourly rate of employee:" );
    Double employeeHourlyRate = input.nextDouble();
    System.out.println();
    // Monitors pay rate for validity.
    if ( employeeHourlyRate <= 0 ){
    System.out.println ( "This is an invalid rate of pay, please enter a valid rate of pay." );
    //Loops back to hourly rate question.
    I THINK THIS IS WHERE I NEED A LOOP COMMAND.?.?               
    } // Ends loop program.

    Hello and thanks for the advice! I have reconstructed as you suggested. However I am receiving 3 errors. I would also like the program to just repeat the question "Enter hourly rate of employee:". Here are the errors. How do I make this work? Thanks for the help. If it makes a difference I am running windows XP and using text pad.
    1. Payroll1.java:34: cannot find symbol
    symbol : variable employeeHourlyRate
    location: class Payroll1
    while( employeeHourlyRate <= 0) {
    2. Payroll1.java:75: cannot find symbol
    symbol : variable employeeHourlyRate
    location: class Payroll1
    else { grossPay = employeeHourlyRate * employeeHoursWorked;
    3. Payroll1.java:82: cannot find symbol
    symbol : variable employeeHourlyRate
    location: class Payroll1
    System.out.printf( "\nHourly rate: $%.2f", employeeHourlyRate );

  • Message Delivery in a Clustered Environment

    Hello,
    I was wondering if someone could give me a quick explanation/lesson on the following scenario.
    I have a two broker cluster (say, SERVERA and SERVERB where SERVERA is the master). Each server has a consumer connected to it, CONA and CONB respectively. I'm throwing evenly distributed producers at the system such that message consumption cannot keep up with production.
    CONB is slow due to issues external to the JMS system. After 15 minutes, when I stop the producers, SERVERB has ~3,500 messages in the queue whereas SERVERA has ~450. CONA stops receiving messages when there is still 2750 messages in the queue on SERVERB (SERVERA has 0 left). CONB, which is slow, is left to deal with the remaining messages. Restarting the CONA seems to work and messages being flowing from SERVERB to CONA via SERVERA.
    I've tried a consumerFlowLimit of 1000 and 100 but the same thing is happening. I also don't have localDeliveryPreferred set. My goal is to have both CONA and CONB working until all messages in the cluster have been processed. Is there a config setting I can tweak to fix this?
    Thanks in advance,
    Aaron

    Thanks for your response.
    I'll answer your questions as best as I can remember but I can't invest any time in recreating the situation. Since this post, we have set localDeliveryPreferred because the amount of inter-broker communication seemed too much. The server with the slow consumer received 6110 messages according to metrics and the fast server received 4950 messages. Each were sent 4080 messages.
    What is the MQ broker version and the MQ client
    version
    (if different from broker) ?They should have both been running 3.5 SP1. However, it is possible that the client was 3.5.
    Steps (when/order in starting brokers, producer,
    consumers)
    to reproduce the problem ?Start cluster brokers.
    Start consumers.
    Start producers.
    After the one consumer stopped receiving messages, I restarted it and messages began flowing again.
    Can you provide code examples of the consumers and
    producer that reproduces the problem ? This will
    also answer the questions like,
    Is the destination Queue or Topic ? Queue.
    Are the messages produced persistent messages ?Persistent.
    Are the consumers using transacted session or what
    is acknowledge mode ?DUPS_OK_ACKNOWLEDGE
    Aaron

  • How do I open and close VIs from within a VI?

    Ladies and gentlemen,
    I would like to use a VI to open and close other VIs based on user input.  Example:  The first VI will have text that reads:  "Does the car have heated mirrors?"  There will be two buttons: one for "YES" and the other for "NO."
    If the user hits the "NO" button, the current VI will close and a similar VI will open that asks the user the next question, "Are the mirrors lighted?" "YES" or "NO..."
    If the user hits the "YES" button, the current VI will close and another will open that will tell the user to "Activate the heated mirrors" and press a button that will say "NEXT."  At that point, that VI will close, and in two minutes another VI will open and ask the user "Is the driver's side mirror hot?" with another set of "Yes" or "No" buttons.  If the user presses "YES" we will have verified that the heated driver's side mirror is working properly and store that information somewhere .  If the user presses "NO", the VI will close and another VI will open with some kind of repair instruction and a button that says "RETEST" that will rerun the heated mirror test when repairs are completed.
    During the two minutes we are waiting for the mirrors to heat up the program should move on to the next question: "Are the mirrors lighted?" "YES" or "NO..."
    Does anyone know how to manipulate VIs in this way?  Please help!
    Drew

    Instead of opening and closing vi's, just create one main vi with a state machine architecture.  Search for examples on state machines to get a basic understanding of them.  This is pretty complex so I have written an example of how this could be accomplished.  The trick part was the 2 minute timer (my vi is set for 5 seconds for quick testing).  Each state produces a question, and depending on the answer, the next state is inserted into a queue.  You can add more states for more questions and answers.  Notice that the boolean buttons can be hidden if you just want to show one button (like Next) instead of two buttons (Yes and No).  Study the vi and let me know if you have questions.
    - tbob
    Inventor of the WORM Global
    Attachments:
    Q&A.vi ‏166 KB

  • How to repair a void character?

    my macbook air 13" I am using for aImost two years but how sad I discovered this month, I found out one character is void. I don't know how it happenned. I have two kids , 13 and 7 years old, who are using the laptop as well, but of course, they don't have any idea. My wild guess, is that maybe, moisture got inside the one character. So I just want to know , is it possible to fix or repair a void or not functioning button. I hope I receive an answer , thanks so much.

    Whoops! Read that backwards somehow. Shift+key does produce the question mark. Non shifted gets you nothing. Either way, the key itself works, or you'd get nothing whether you hold the shift key or not.
    Is it any font that won't return a /, or a specific one?
    How to assign a character to a key?
    You can't. Pressing a key returns a specific ordinal value to the OS. The keyboard layout for the language you are using then determines what letter is assigned to that value. Well, I shouldn't say you can't, there's quite a few utilities that will letter you remap a keyboard. Essentially, they intercept the value from the keyboard and change the value from what you actually pressed, then pass that value on to the OS.
    Anyway, I would first suspect a corrupt font. Especially if it's only affecting one font in particular. Next guess would be a corrupt language keyboard layout file. It could even just be a bad preference file. Try this to verify. Open the System Preferences and click on Accounts. Create a new account. Log out and then log in to the new account. If it works as it should, then the problem is somewhere in your user account. If it behaves the same, then it's either a hardware issue (not as likely) or the OS is damaged.

  • ASCP Test for Load Legacy Data

    Through to the legacy Web Adi ASCP Data in the Test of the load.
    Plan to check more than one, but the result is not correct  that there is  cause msc_operation_components not exists.
    Questions 1: msc_operation_components Table also through the Upload Web Adi BOM_Component and Routing_operation Data should be used or whether the Pre-Process Monitor Program or other Concurrent Program please tell us what is produced?
    Questions 2: If you create a Data Collect flat file data self service if you need through the OA Template Upload for msc_operation_components Dat there is no there, what should I do??

    I think you'll find the white paper published on metalink, our main avenue for publishing documentation and providing support information to customers.
    <BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by JohnWorthington:
    Hello,
    The 11.0.2 implementation doc mentions a technical "White Paper about the Data Pump" for loading legacy data into HRMS.
    I cannot find this White Paper anywhere.
    Does it exist?
    What is the easiest way to load our legacy data into 11.0.3 HRMS??
    Thanks,
    John Worthington
    [email protected]<HR></BLOCKQUOTE>
    null

  • What is the documetary interview workflow for Story/Premiere CS5.5?

    I've looked in vain for the answer to this question, which I'm sure is thoroughly documented SOMEWHERE - I just can't find it.  The few things I HAVE found online including at Lynda.com or other paid services involve CS5, which has a different workflow that involves OnLocation; this changed in CS5.5 but I don't see any on-point articles that incorporate the changes.
    We've been using Premiere CS5.5 since its release but have never worked with dialogue metadata.  At the moment we're working on a documentary with a number of lengthy interviews.  In each case the interview subject is talking to an off-camera producer.  Accurate transcriptions of the raw interviews have been prepared.  Only the interview subject's ANSWERS are transcribed; the producer's questions are not (and are also barely audible on the soundtrack).  So, typically, the producer will ask a question and then the subject will give an answer that could be ten seconds or a minute.  Then another question, then another answer, all in the one clip.
    So what I am looking for is a step-by-step workflow (for someone who has never so much as TOUCHED Adobe Story before) for importing the transcripts into the raw footage and then ultimately having Premiere match the transcript up with the spoken audio, and then maximizing the usefulness of this with the newly annotated clips as source footage.  Realizing that the interview answers are separated by barely-audible producer's questions, I assume that one challenge will be to let the software know that it should only be paying attention to the answers, and lining the text up appropriately, and not getting confused by the questions.  Perhaps the answers need to be subclipped?
    If there's a tutorial on this subject I would very much appreciate being pointed to it.  If not, if someone could do a step-by-step (beginning with an empty Premiere CS5.5 project and nothing in Story) I'm sure there must be a number of other folks in my position who would benefit from it.
    As a product suggestion: for documentary applications it seems to me that it would be much better to be able to cut and paste text directly from a text editor into Premiere and then let it fit it to the audio instead of going through Story.  While I understand it was even more cumbersome prior to CS5.5, I don't think interviews in a documentary need most of what Story offers (unless I'm missing something), so it seems like an unnecessary complication that could be eliminated.
    Thanks in advance for any help.
    Peter

    Well, I tried following your steps, and I'm going wrong somewhere.
    I created the film script and four scenes (one for each of four clips), giving the speaker's name as a character name (it's actually the same character in a continuous interview broken into several five-to-ten minute clips).  I let Story number the scenes (1 through 4, as expected).  I then exported an .astx file.
    Within Premiere, I located the four clips and in the Scene column numbered them 1, 2, 3, and 4 respectively.
    When I right-click on one of the clips, select "attach script file," and point to the exported .astx file, I get the following error message: "Failed to attach script file to the following clip: \MyProjectName.prproj\FolderNameWIthinProject\00019.mts [Matching scene number not found]" (of course I have replaced the path and folder names in this example with generic names since the actual names reveal my client company's name).
    Opening and inspecting the .astx file in a text editor I confirm that it does in fact contain scene numbers 1, 2, 3, and 4, respectively, for the numbered scenes.  Likewise I confirm the numbers 1, 2, 3, and 4, respectively, in the Scene number column for the four relevant clips.
    Any idea what the problem is?
    Peter

  • Trashed Mail by mistake

    My Cousin's iMac somehow had multiple Mail icons of on her desktop. After I removed all the icons, I went back to the Mail icon on the dock and tried to relaunch Mail. Clicking on the Mail icon in the dock produced a question Mark. I went back to the Applications Folder and found no Mail application. I can not find he Mail program on the Apple website. Can someone tell me where it is at? Also is the future Mail program going to change to the Post Box application described on the Apple website?

    Custom installs in Mac OS X 10.4
    http://docs.info.apple.com/article.html?artnum=301229
    Here's a complete list of all the custom installation options available with Optional Installs.mpkg:
    * Applications
    o Address Book 4.0
    o iCal 2.0
    o iChat 3.0
    o iTunes 4.7.1
    o Mail 2.0
    o Oxford Dictionaries
    o Safari 2.0
    o X11

  • Error 200284-DAQmx Analog trigger

    Hi,
    I am trying to start data acquisition (e.g. input channels ai6 to ai10) and save it to a file based on an analog input voltage signal change (acquire whenever ai6 >2 Volts) that will work as a trigger.
    I also found an example that is pretty similar to this (attached). The trigger source in my case is the first analog input channel. Following the attached example, I am always getting the error code 200284 after running the vi. Basically it gives the error after the specified timeout.
    I am using PCI-6289, but the problem is I cannot use any PFI lines for the voltage trigger and have to use ai channels only for trigger.
    Can't figure out what is wrong. 
    Any help is highly appreciated. 
    Thanks,
    Roy
    Attachments:
    cont_acq_volt_analog_start.vi ‏79 KB
    cont_acq_volt_analog_start.vi ‏79 KB

    Yes, you must use a digital channel as your trigger source because it has a different clock.  Remember, something has to activate your trigger!  For instance, let's say you want to use PFI0 as your trigger...when PFI0 goes high, start collecting data.
    How do you plan to control when PFI0 goes high?
    It can be an external trigger.  It can be another, digital, DAQmx task, where the DO line is hard-wired to PFI0.  But something has to cause PFI0 to go high, in order to trigger your task.
    Since you can only have a single AI task, since there's only one AI clock, you have no way of ever generating a trigger.  You won't start acquiring until you receive a specific signal on an AI channel, but you won't receive that signal until you start acquiring.  See why it's a no-go?
    So you want to acquire for 3 seconds after getting a signal on ai6 that's >2V.  So let's think this through, ok?
    If we set our task to finite samples, and we set our number of samples to 3000, what will happen?
    We'll acquire 3000 samples.  Right?  Right!  If our acquisition rate is set to 1kHz, it will take 3 seconds to acquire those samples.
    While we are acquiring those 3000 samples, we may (or may not!) see ai6 go over 2V.  Let's say we see ai6 read >2V after 2 seconds -- that is, our second loop iteration.  Since we've set our # of samples to acquire at 3000, we've already acquired 2000 samples (assuming a 1kHz sample rate).  That leaves us 1000 samples until our task expects to terminate (after which, you'll get an error).  That's not 3 seconds worth of data, is it?
    What if ai6 never goes >2V within our 3000 sample window?  Now you haven't collected anything, and your task will throw an error if you try to collect beyond 3000 samples.
    So no, setting our samples to finite and specifying the collection of 3000 samples isn't going to work, is it?  Clearly not.  That's 3 seconds' worth of data, all right, but it may not be the right 3 seconds' worth of data.  Since you don't know when ai6 will be >2V, you need to continuously acquire samples.
    Do you suppose we could do something with keeping track of time?  Specifically, the time at which >2V was detected?  Compared to the current time?  And take action based on that?  The logic for your case structure will become slightly more complex.
    Do you know about shift registers?  I'm not trying to be insulting, you said you were new and I'm not 100% sure of how new you are.  :-) 
    You seriously do need to take your Write to File out of your DAQ loop...please look into producer-consumers, or you'll be right back on this forum asking us about buffer overflow errors.  :-)  Also, beware of the Write to Measurement File Express VI...you don't have a file path wired in the code you showed, so it's going to pop up a dialog box every time it's called, asking for a file path.
    If you really want to learn LabVIEW, you will get rid of all Express VIs in your code.  At the very least, you need to understand exactly what they do and how they work.  Writing code that you don't understand is only going to cause problems later

  • Maximum Query Objects within a report...

    Hello Everyone,
    We have done several reports that contained one or two data model query objects, however, we are presented with the following task:
    We have to output the following:
    a) a single PDF document, approx. 200 pages generated from a web (url) request.
    -----> piece of cake, we do this for smaller reports now.
    b) this document will have about 50 sources, e.g. 50 queries necessary to run it.
    Question 1: is it possible to to have one "master" report that calls a bunch of other oracle reports AND maintains one page number sequence for the whole thing being output to the resultant PDF?
    Question 2: if we can NOT get sequential page numbers via the method above, what is the maximum number of
    ----> data model query objects
    ----> data model user parameters
    per report.
    Question 3: is it possible to have multiple modules for a single report call that would maintain page numbers across module outputs? Further, would parameters supplied to this big call make it to the proper modules-- module1 needs parms 1,2 and 3... module2 needs parms 4,5, and 6... module3 needs parms 5,6 and 7 for example.
    Any insight available would be greatly appreciated,

    Question 1: is it possible to to have one "master" report that calls a bunch of other oracle reports AND maintains one page number sequence for the whole thing being output to the resultant PDF?It's possible to have one master report that calls other reports, but it's not possible to do this and have one single PDF file produced.
    Question 2: if we can NOT get sequential page numbers via the method above, what is the maximum number of
    ----> data model query objects
    ----> data model user parameters
    per report.There aren't any published maximums for this (and you should be okay with 50 queries - although I can't vouch for the performance of this!)
    Question 3: is it possible to have multiple modules for a single report call that would maintain page numbers across module outputs? Further, would parameters supplied to this big call make it to the proper modules-- module1 needs parms 1,2 and 3... module2 needs parms 4,5, and 6... module3 needs parms 5,6 and 7 for example.Not sure that I understand the question.
    Just one more thing to think about - if you're running this on the web you should probably run it on a schedule and serve up a cached version 'on demand' - this way the users aren't waiting for this mammoth report to complete.
    Hope this helps,
    Danny

  • Do you REALLY need Space Designer and all those extra plugins/?

    My quest to for answers to determine what machine (iMac or Mac Pro) to purchase for running Logic keeps producing more questions. There is so much talk in this forum about using Space Designers and other effects and plug ins (and all sorts of other hardware or software) additional to Logic. Is there something lacking in Logic's effects that necessitates Space Designers etc. or is this mostly a matter of preference, people looking for more precise/ extensive types of effects? I was hoping to utilize Logic for most of my drum, bass and synth sounds, most if not all of my reverbs and effects, and all of my mixing and mastering needs. I'd like to hear from people doing it this way-- using mostly Logic's sounds, effects and capabiliters, and if they think they are sufficient. For those who go with additional effects/plug ins, I'd like to know why -- do you feel Logic's effects are inadequate, or do you just prefer the sound of the addition plug ins?

    in terms of what you get to start creating music with right off the bat, logic pro really is the most complete offer out there. it's basically like buying the equivalent of a sequencer, a mixer, a multitrack recorder, a rack of synths, samplers and drum machines, and a rack of effects, all at the same time.
    the stuff it comes with right in the box varies from perfectly usable to world-class in terms of quality and creative potential.
    you'll have your work cut out for you just getting up to speed on all the tools in logic in the first instance.. I don't think it's the best idea to start deciding about what 3rd party stuff you might want until you start getting your head around the gear in logic first. unless you have some specific plug ins or synths in mind that you're already familiar with and really want, get into logic first and then later go shopping for extra stuff that suits your tastes and the music that you make.
    it's actually quite hilarious that in this day and age, you can easily buy, download and install some of the best sounding instruments and effects available anywhere, all in the space of a few minutes, with your trusty credit card. I can't tell you how much I like the fact that I never have to set foot in a music gear store hardly ever anymore. no more having to deal with incompetent (and stoned) frustrated guitar heros trying to sell me some rubbish from alesis that is on sale. not to mention the fact that since things went all plug-in, you basically get to chop a zero off the end of the price of what things used to cost.
    apart from, uh, global warming, these are great times..

  • Javascript in Quiz

    I am developing exams in Captivate that includes a lot
    javascript. The problem is that there is not too much documentation
    about it. Therefore, I have a lot problems.
    My problem in the time being is using javascript in Question
    Slides. More specifically, I want to use "Execute javascript"
    option in the "Edit Question" part at options tab and I don't wanna
    show to user "Incorrect, click anywhere to continue" or "Correct,
    click anywhere to continue" messages but if "Incorrect, click
    anywhere to continue" message is not used "Execute javascript"
    option does not work when the user answer is wrong. I believe it is
    a bug but if you know an answer for this problem, I am glad to
    hear..
    Thanks in advance...

    I sent the bug to the captivate as follows
    ******BUG******
    Concise problem statement:
    The problem is using javascript in Question Slides. More
    specifically, I want to use "Execute javascript" option in the
    "Edit Question" part at options tab and I don't wanna show to user
    "Incorrect, click anywhere to continue" or "Correct, click anywhere
    to continue" messages but if "Incorrect, click anywhere to
    continue" message is not used "Execute javascript" option does not
    work when the user answer is wrong. I believe it is a bug.
    Steps to reproduce bug:
    1.Insert Question Slide
    2.Choose any type of Question
    3.Produce a question and select an answer
    4. Go options tab
    5."If correct answer" select "Action", choose "Execute
    Javascript"
    6.Write alert("true") in the javascript panel
    7."If wrong answer"
    8. Allow user 1 attempt
    9. Select "Failure levels" <none>
    10. Select "Action" choose "Execute Javascript"
    7. alert("wrong")
    Results:
    If the answer is correct a message box shows "True"
    but if the answer is wrong nothing happens
    Expected results:
    If the answer is correct a message box shows "True"
    if the answer is wrong, a message box must show "False"

Maybe you are looking for