SageTV Community  

Go Back   SageTV Community > SageTV Development and Customizations > SageTV Studio
Forum Rules FAQs Community Downloads Today's Posts Search

Notices

SageTV Studio Discussion related to the SageTV Studio application produced by SageTV. Questions, issues, problems, suggestions, etc. relating to the Studio software application should be posted here.

Reply
 
Thread Tools Search this Thread Display Modes
  #41  
Old 04-27-2009, 03:35 PM
Tiki's Avatar
Tiki Tiki is offline
Sage Icon
 
Join Date: Feb 2005
Location: Southwest Florida, USA
Posts: 2,009
Ben,

I think you are struggling because you are not understanding the difference between a single variable and an array.

It would help if you look through your code line by line so you understand what is happening.

1. You call the function GetMediaFiles(), which gets a list of all the Media Files that Sage knows about and stores it in a temporary variable (called "This"). This list actually contains more than just the names of the media files, it contains the actual mediafile objects. Each object is a complex structure containing all of the information about the mediafile.
2. You call the function FilterByBoolMethod(). You pass it 3 parameters. The first one is "This" which is the list of media files from the first step. The second parameter is "IsCompleteRecording|IsManualRecord". These are the names of two other functions from the sage api. Both of these functions can take a medifile object as an argument and both return a boolean result (boolean basically means true or false). So the filterByBoolMethod() function is going to call these two functions for every mediafile stored in the "This" array. Then it is going to take the results and OR them together (the "|" is a bit-wise OR operator). So , if one or the other or both is true, it returns true. The 3rd argument you pass ("true") is matched against the result of the OR operation. So the result is for every media file in your collection, it will check to see if it is a complete recording, then it will check to see if it is a manual recording. If either of these is true, the intermediate value is true, otherwise it is false. Then it compares the intermediate value to the 3rd argument (true) and if they match, that media file will get added to the result (which will be stored in the object variable you called "RecordedFiles".
3. Same as step 2, but this time it will keep anything from the "RecordedFiles" list that is a TVFile, and throw out everything else.
4. You read a property and store its value into a variable called movieCat.
5. Similar to Step 2 and 3, but this time the function is FilterByMethod(), which expects one additional argument. So, this time it will check every mediafile that is stored in the "RecordedFiles" variable to see what its category is. It will compare this to the new argument you are passing (movieCat), and if they match it will get stored back into "RecordedFiles", otherwise it gets thrown out.
6. Now you call the GroupByMethod() function and pass it the "RecordedFiles" object and the function name "GetShowTitle". It returns a map and stores it in your RecordedFiles variable. The map is a special object that is kind of hard to explain, but basically, it grous the objects by assigining each one a key. The key is whatever the function you told it to use (GetShowTitle) returns. So the map is basically a grouped list of all the media files you have left, grouped by title.
7. You assign the contents of "RecordedFiles" to a new variable called "Grouped". (Don't know why - would have made more sense to do this directly in step 6).
8. You check to see if the size of "Grouped" is greater than or equal to 2. For a map object, the function "Size()" returns the size of it (I believe this would be the number of objects stored in the map). If you have more than 2 media files stored in Grouped this will be true.

You really want to iterate through each title in the map and see if there are 2 or more media files associated with it.

I am not sure if there is a function that does what you want, or if you will need to create a loop that iterates through each title in the map, but this is where you went wrong...
__________________
Server: Ryzen 2400G with integrated graphics, ASRock X470 Taichi Motherboard, HDMI output to Vizio 1080p LCD, Win10-64Bit (Professional), 16GB RAM
Capture Devices (7 tuners): Colossus (x1), HDHR Prime (x2)
,USBUIRT (multi-zone)
Source:
Comcast/Xfinity X1 Cable
Primary Client: Server Other Clients: (1) HD200, (1) HD300
Retired Equipment: MediaMVP, PVR150 (x2), PVR150MCE,
HDHR, HVR-2250, HD-PVR
Reply With Quote
  #42  
Old 04-27-2009, 03:48 PM
Opus4's Avatar
Opus4 Opus4 is offline
Administrator
 
Join Date: Sep 2003
Location: NJ
Posts: 19,624
Quote:
Originally Posted by GKusnick View Post
Seems like filtering via API calls ought to be possible, although I don't have a code example handy to illustrate. You'd need to apply the filtering after you've done the grouping, using a method that tests the size of the group and excludes groups with size == 1. But I'm not super-familiar with exactly how FilterByMethod() works on Maps, so it would probably take some trial and error to figure that out.
I don't think this is possible... you would need to check the Size() of GetSubgroup() inside the FilterByMethod() call, but FilterByMethod() only operates on a single method name. If this were possible, I wouldn't mind hearing about it since I could probably use it in a few places.


jaminben: I really think you are going to need to do your filtering in a loop, unless someone comes up with some other way to group/filter your list of videos than the obvious-looking one of checking the size of each subgroup. I know you said you didn't want to mess with a loop, but looking inside a lit house for the glasses you lost outside in the dark just because the light is on inside won't find the glasses. Tutorial 10 of the Studio manual goes over the basics of loops.

For the loop, you would need to deal with the list of the group's keys (java_util_Map_keySet), then either remove the subgroups that have single items or copy the multi-item subgroups to a new grouping. You can use java_util_Map_remove() to remove a subgroup item.

- Andy
__________________
SageTV Open Source v9 is available.
- Read the SageTV FAQ. Older PDF User's Guides mostly still apply: SageTV V7.0 & SageTV Studio v7.1.
- Hauppauge remote help: 1) Basics/Extending it 2) Replace it 3) Use it w/o needing focus
- HD Extenders: A) FAQs B) URC MX-700 remote setup
Note: This is a users' forum; see the Rules. For official tech support fill out a Support Request.
Reply With Quote
  #43  
Old 04-27-2009, 04:12 PM
GKusnick's Avatar
GKusnick GKusnick is offline
SageTVaholic
 
Join Date: Dec 2005
Posts: 5,083
Quote:
Originally Posted by Opus4 View Post
I don't think this is possible... you would need to check the Size() of GetSubgroup() inside the FilterByMethod() call, but FilterByMethod() only operates on a single method name. If this were possible, I wouldn't mind hearing about it since I could probably use it in a few places.
Again, I haven't actually done the experiment. But in general it should be possible to write a static Java method to perform whatever concatenation of API calls you need and pass in the fully qualified name of that method (suitably Studioized of course with underscores in place of dots).

I grant that this may be beyond Ben's current level of expertise (no offense, Ben).
__________________
-- Greg
Reply With Quote
  #44  
Old 04-27-2009, 04:22 PM
jaminben jaminben is offline
Sage Icon
 
Join Date: Sep 2007
Location: Norwich, UK
Posts: 1,754
Send a message via MSN to jaminben
Quote:
Originally Posted by Tiki View Post
I think you are struggling because you are not understanding the difference between a single variable and an array.
Wow, thats a really nice write-up of what I'm doing. I can see what "Key" means now


Quote:
Originally Posted by Opus4 View Post
jaminben: I really think you are going to need to do your filtering in a loop
I guess I need to learn how to use loops then

Quote:
Originally Posted by GKusnick View Post
I grant that this may be beyond Ben's current level of expertise (no offense, Ben).
None taken

I'm just gratefull for all the help I'm getting in understanding how things work.
__________________
Server - Win7 64bit, 2.4Ghz Intel Core 2 Duo, TBS 6284 PCI-E Quad DVB-T2 Tuner, 3 x HD200 & 1 x HD300 extenders
Reply With Quote
  #45  
Old 04-27-2009, 05:54 PM
Opus4's Avatar
Opus4 Opus4 is offline
Administrator
 
Join Date: Sep 2003
Location: NJ
Posts: 19,624
Quote:
Originally Posted by GKusnick View Post
Again, I haven't actually done the experiment. But in general it should be possible to write a static Java method to perform whatever concatenation of API calls you need and pass in the fully qualified name of that method (suitably Studioized of course with underscores in place of dots).
I had to ask about that one because I focus on what can be done in Studio & don't add custom Java functions... you would then have the issue where your custom Java code would receive the current key being processed, but it wouldn't have access to the map so that it could get the subgroup associated with the key.

- Andy
__________________
SageTV Open Source v9 is available.
- Read the SageTV FAQ. Older PDF User's Guides mostly still apply: SageTV V7.0 & SageTV Studio v7.1.
- Hauppauge remote help: 1) Basics/Extending it 2) Replace it 3) Use it w/o needing focus
- HD Extenders: A) FAQs B) URC MX-700 remote setup
Note: This is a users' forum; see the Rules. For official tech support fill out a Support Request.
Reply With Quote
  #46  
Old 04-27-2009, 09:14 PM
GKusnick's Avatar
GKusnick GKusnick is offline
SageTVaholic
 
Join Date: Dec 2005
Posts: 5,083
Quote:
Originally Posted by Opus4 View Post
you would then have the issue where your custom Java code would receive the current key being processed, but it wouldn't have access to the map so that it could get the subgroup associated with the key.
Yes, I thought of that after I posted. FilterByMethodRegex() allows extra arguments to be passed, which it then passes through to the supplied method. So that would be a way to get the map passed in to your custom method. The description for FilterByMethod() doesn't say anything about this option, but I seem to recall testing it and finding that it works there too. (At least I added code to handle this case to my API wrappers.)
__________________
-- Greg
Reply With Quote
  #47  
Old 04-27-2009, 09:30 PM
GKusnick's Avatar
GKusnick GKusnick is offline
SageTVaholic
 
Join Date: Dec 2005
Posts: 5,083
Quote:
Originally Posted by Tiki View Post
6. Now you call the GroupByMethod() function and pass it the "RecordedFiles" object and the function name "GetShowTitle". It returns a map and stores it in your RecordedFiles variable.
I noticed this myself and meant to comment on it earlier. I consider this to be bad programming style, reusing the same variable (RecordedFiles) to hold objects of two different types (first an Array, then a Map). So depending on where you are in the code, the variable means something different than it means elsewhere. Not just different degrees of filtering on the same type of object (that would be OK), but a different kind of thing entirely (a one-dimensional set of files, versus a multi-dimensional set of key-value pairs, the values of which are themselves sets of files). This is a recipe for confusion, since the kinds of operations you can perform on arrays are different from those you can perform on maps.

So my advice would be first, to understand the types of objects you're dealing with (e.g. files, arrays, maps, etc.) and second, to limit the use of a given variable to a single type of object, so that when you see a variable name in the code you always know what type it is and what operations are valid on it, without having to read back through the code to see how it got that way (which can be tricky if there are multiple code paths to a given usage).
__________________
-- Greg
Reply With Quote
  #48  
Old 04-27-2009, 09:32 PM
Opus4's Avatar
Opus4 Opus4 is offline
Administrator
 
Join Date: Sep 2003
Location: NJ
Posts: 19,624
Quote:
Originally Posted by GKusnick View Post
Yes, I thought of that after I posted. FilterByMethodRegex() allows extra arguments to be passed, which it then passes through to the supplied method. So that would be a way to get the map passed in to your custom method. The description for FilterByMethod() doesn't say anything about this option, but I seem to recall testing it and finding that it works there too. (At least I added code to handle this case to my API wrappers.)
Unless I'm misunderstanding the source, FilterByMethod() doesn't make use of any extra args. (It is obvious to me that FilterByMethodRegex() does, so I don't think I'm just missing it.) Might be a feature request if it is needed...

- Andy
__________________
SageTV Open Source v9 is available.
- Read the SageTV FAQ. Older PDF User's Guides mostly still apply: SageTV V7.0 & SageTV Studio v7.1.
- Hauppauge remote help: 1) Basics/Extending it 2) Replace it 3) Use it w/o needing focus
- HD Extenders: A) FAQs B) URC MX-700 remote setup
Note: This is a users' forum; see the Rules. For official tech support fill out a Support Request.
Reply With Quote
  #49  
Old 04-27-2009, 09:42 PM
GKusnick's Avatar
GKusnick GKusnick is offline
SageTVaholic
 
Join Date: Dec 2005
Posts: 5,083
Guess I'm misremembering then. (Wouldn't be the first time.)
__________________
-- Greg
Reply With Quote
  #50  
Old 04-28-2009, 03:33 AM
jaminben jaminben is offline
Sage Icon
 
Join Date: Sep 2007
Location: Norwich, UK
Posts: 1,754
Send a message via MSN to jaminben
I have to admit that I did think about this but I left it as it was because it worked.

Quote:
Originally Posted by GKusnick View Post
I noticed this myself and meant to comment on it earlier. I consider this to be bad programming style, reusing the same variable (RecordedFiles) to hold objects of two different types (first an Array, then a Map). So depending on where you are in the code, the variable means something different than it means elsewhere. Not just different degrees of filtering on the same type of object (that would be OK), but a different kind of thing entirely (a one-dimensional set of files, versus a multi-dimensional set of key-value pairs, the values of which are themselves sets of files). This is a recipe for confusion, since the kinds of operations you can perform on arrays are different from those you can perform on maps.

So my advice would be first, to understand the types of objects you're dealing with (e.g. files, arrays, maps, etc.) and second, to limit the use of a given variable to a single type of object, so that when you see a variable name in the code you always know what type it is and what operations are valid on it, without having to read back through the code to see how it got that way (which can be tricky if there are multiple code paths to a given usage).
If anyone wanted to read "Head First Java" as recommended by Mike but didn't want to splash the cash you can get it via Google books. Some pages are omitted but it still gives you the general idea. I think I'll still buy the book but it'll do until my copy gets delivered.
__________________
Server - Win7 64bit, 2.4Ghz Intel Core 2 Duo, TBS 6284 PCI-E Quad DVB-T2 Tuner, 3 x HD200 & 1 x HD300 extenders

Last edited by jaminben; 04-28-2009 at 03:40 AM.
Reply With Quote
  #51  
Old 04-28-2009, 07:29 AM
jaminben jaminben is offline
Sage Icon
 
Join Date: Sep 2007
Location: Norwich, UK
Posts: 1,754
Send a message via MSN to jaminben
Ok, so I've been through the Loops tutorial several times now but it just doesn't make any sense. When looking at the result of the basic loop tutorial why does it give a result of 55.

This is how I look at it:

First line is Sum = 0 not sure what this means, is it just a reference?

Second line is LoopIndex = 1 which means that each time it loops it increments by 1.

Third line is the conditional LoopIndex <= 10 which means has the loop gone round 10 times or less if it hasn't continue (true) if it has then its completed its looping (else).

First line of true conditional Sum = Sum + LoopIndex which means add sum (0) to loopindex (1 - 10).

Second line of true conditional LoopIndex = LoopIndex + 1 which means each time it comes round it adds 1 to loopindex (until its greater than or equal to 10).

Third line of true conditional LoopIndex <= 10 reference back to the begining of the "if" conditional if its less than 10 or equal to 10.

else which means its the way out of the loop.

So where does the on-screen 55 come from. no matter how I look at it, it doesn't add up to 55.

I've attached a screenie to quickly show what the sample loop looks like.
Attached Images
File Type: jpg loops.jpg (68.8 KB, 101 views)
__________________
Server - Win7 64bit, 2.4Ghz Intel Core 2 Duo, TBS 6284 PCI-E Quad DVB-T2 Tuner, 3 x HD200 & 1 x HD300 extenders
Reply With Quote
  #52  
Old 04-28-2009, 08:13 AM
doc's Avatar
doc doc is offline
Sage Fanatic
 
Join Date: Jun 2006
Location: Leicester, England
Posts: 918
I don't know studio but a basic loop would set the values as shown below

At the start you set sum to 0

sum = 0

when loop = 1 then sum = 0 + 1 = 1
when loop = 2 then sum = 1 + 2 = 3
when loop = 3 then sum = 3 + 3 = 6
when loop = 4 then sum = 6 + 4 = 10
when loop = 5 then sum = 10 + 5 = 15
when loop = 6 then sum = 15 + 6 = 21
when loop = 7 then sum = 21 + 7 = 28
when loop = 8 then sum = 28 + 8 = 36
when loop = 9 then sum = 36 + 9 = 45
when loop = 10 then sum = 45 + 10 =55

so thats where the 55 comes from I'd guess.
Reply With Quote
  #53  
Old 04-28-2009, 08:31 AM
jaminben jaminben is offline
Sage Icon
 
Join Date: Sep 2007
Location: Norwich, UK
Posts: 1,754
Send a message via MSN to jaminben
Ah, that makes perfect sense now, thanks for that. So the next question would be, how is this going to sort my single recordings?

I'm coming to the conclusion that this is just way to hard for me to understand at my current level so I think the best thing for me to do is give up the dream and go down the pub before I throw the *****NG PC through the window.



Quote:
Originally Posted by doc View Post
I don't know studio but a basic loop would set the values as shown below

At the start you set sum to 0

sum = 0

when loop = 1 then sum = 0 + 1 = 1
when loop = 2 then sum = 1 + 2 = 3
when loop = 3 then sum = 3 + 3 = 6
when loop = 4 then sum = 6 + 4 = 10
when loop = 5 then sum = 10 + 5 = 15
when loop = 6 then sum = 15 + 6 = 21
when loop = 7 then sum = 21 + 7 = 28
when loop = 8 then sum = 28 + 8 = 36
when loop = 9 then sum = 36 + 9 = 45
when loop = 10 then sum = 45 + 10 =55

so thats where the 55 comes from I'd guess.
__________________
Server - Win7 64bit, 2.4Ghz Intel Core 2 Duo, TBS 6284 PCI-E Quad DVB-T2 Tuner, 3 x HD200 & 1 x HD300 extenders
Reply With Quote
  #54  
Old 04-28-2009, 08:40 AM
doc's Avatar
doc doc is offline
Sage Fanatic
 
Join Date: Jun 2006
Location: Leicester, England
Posts: 918
I've used bubble sorts in the past where you compare 2 values in an array and then swap them over and keep repeating the process until no values need swapping, but thats a lot of work.

When I was programming in cobol we used sort routines from external modules which makes life a lot easier - you call the module and pass into it a file or array and tell it what characters to sort on.

As for Studio? I haven't got a clue but hopefully one of the experts will come back to you soon.
Reply With Quote
  #55  
Old 04-28-2009, 09:47 AM
Opus4's Avatar
Opus4 Opus4 is offline
Administrator
 
Join Date: Sep 2003
Location: NJ
Posts: 19,624
Quote:
Originally Posted by jaminben View Post
Ok, so I've been through the Loops tutorial several times now but it just doesn't make any sense. When looking at the result of the basic loop tutorial why does it give a result of 55.
Because it adds each successive number to the running sum each time through the loop.

Quote:
This is how I look at it:

First line is Sum = 0 not sure what this means, is it just a reference?

Second line is LoopIndex = 1 which means that each time it loops it increments by 1.
No. These statements are assigning values. The single equal sign means values are getting assigned.

Quote:
...So where does the on-screen 55 come from. no matter how I look at it, it doesn't add up to 55.

I've attached a screenie to quickly show what the sample loop looks like.
Let's go over what each line is doing... (BTW: you took the loop from the tutorial, but skipped the important remark line and there is a set of code above the sample loop that does nothing but remark what each portion does; those are the lines with the yellow markers.)
Code:
Sum = 0 -- Initialize Sum to 0
 LoopIndex = 1 -- Initialize LoopIndex to 0
  If LoopIndex <= 10 -- Conditional to see if that value is less than or equal to 10
   > true -- Branch to execute if conditional is true
     Sum = Sum + LoopIndex -- Add LoopIndex to Sum & assign value to Sum
      LoopIndex = LoopIndex + 1 -- Add 1 to LoopIndex
       Reference to 'If LoopIndex <= 10' -- Jump back to the conditional
   > else -- Branch to execute if conditional is not true
     "Values summed in a basic loop: " + Sum -- Create a string with the Sum in it.
       Text widget -- Feed the above string to the text widget & display it.
You have a basic loop there, so to understand it better, walk through the code as if you are are the computer executing each line & then try changing portions to see what happens & try to predict what will happen. See if your predictions match the reasults; if not, check each line to see what it is doing.

Quote:
Originally Posted by jaminben View Post
I'm coming to the conclusion that this is just way to hard for me to understand at my current level so I think the best thing for me to do is give up the dream and go down the pub before I throw the *****NG PC through the window.
I strongly urge you to read & learn more about the basics of programming before trying the things you don't currently understand. Programming in any language will be very frustrating if all you are doing is changing code to try to get the results you want w/o understanding what the changes actually accomplish.

Studio is easy enough for a non-programmer to move UI elements around & change some of the data displayed, but if you really want to do more programmatically, then you'll need to have an understanding of programming concepts. Then, Studio's programming 'language' is different enough from most programming languages that it takes a bit of understanding to know how to do something different in Studio compared to other languages... such as loops.

- Andy
__________________
SageTV Open Source v9 is available.
- Read the SageTV FAQ. Older PDF User's Guides mostly still apply: SageTV V7.0 & SageTV Studio v7.1.
- Hauppauge remote help: 1) Basics/Extending it 2) Replace it 3) Use it w/o needing focus
- HD Extenders: A) FAQs B) URC MX-700 remote setup
Note: This is a users' forum; see the Rules. For official tech support fill out a Support Request.
Reply With Quote
  #56  
Old 04-28-2009, 10:53 AM
GKusnick's Avatar
GKusnick GKusnick is offline
SageTVaholic
 
Join Date: Dec 2005
Posts: 5,083
Quote:
Originally Posted by Opus4 View Post
I strongly urge you to read & learn more about the basics of programming before trying the things you don't currently understand. Programming in any language will be very frustrating if all you are doing is changing code to try to get the results you want w/o understanding what the changes actually accomplish.
I strongly agree. It's not just a matter of your frustration level as a programmer. You have an obligation to fully understand exactly how your code works before you release it for other people to use. Even if the code seems to do what you want, but you have no idea why, then you're not ready for release.
__________________
-- Greg
Reply With Quote
  #57  
Old 04-28-2009, 11:45 AM
jaminben jaminben is offline
Sage Icon
 
Join Date: Sep 2007
Location: Norwich, UK
Posts: 1,754
Send a message via MSN to jaminben
I also agree and that's why I'm trying to build a new menu from scratch whilst learning and not do my usual trick of "Hack 'n' Slash". Maybe its a bad thing that I've released several imports already and probably should remove them due to the potential dangers of my coding. However in saying that they are free and I always make sure to tell people to backup before they use them.

What you guys are doing is actually more helpful than reading the tutorials as they don't explain what a loop is only how to use it, if that makes sense. Reading java books are also helpful but things aren't really sinking in, hopefully after time I'll start remembering what the difference between strings and objects are
__________________
Server - Win7 64bit, 2.4Ghz Intel Core 2 Duo, TBS 6284 PCI-E Quad DVB-T2 Tuner, 3 x HD200 & 1 x HD300 extenders
Reply With Quote
  #58  
Old 04-28-2009, 11:57 AM
Opus4's Avatar
Opus4 Opus4 is offline
Administrator
 
Join Date: Sep 2003
Location: NJ
Posts: 19,624
Quote:
Originally Posted by jaminben View Post
What you guys are doing is actually more helpful than reading the tutorials as they don't explain what a loop is only how to use it, if that makes sense.
If you are referring to the Studio tutorials, then yes that makes sense because when I wrote those tutorials, I was assuming certain knowledge on the reader's part; I wasn't trying to write a programming primer.

- Andy
__________________
SageTV Open Source v9 is available.
- Read the SageTV FAQ. Older PDF User's Guides mostly still apply: SageTV V7.0 & SageTV Studio v7.1.
- Hauppauge remote help: 1) Basics/Extending it 2) Replace it 3) Use it w/o needing focus
- HD Extenders: A) FAQs B) URC MX-700 remote setup
Note: This is a users' forum; see the Rules. For official tech support fill out a Support Request.
Reply With Quote
  #59  
Old 04-28-2009, 12:00 PM
jaminben jaminben is offline
Sage Icon
 
Join Date: Sep 2007
Location: Norwich, UK
Posts: 1,754
Send a message via MSN to jaminben
Quote:
Originally Posted by Opus4 View Post
If you are referring to the Studio tutorials, then yes that makes sense because when I wrote those tutorials, I was assuming certain knowledge on the reader's part; I wasn't trying to write a programming primer.
Sorry, I wasn't having a pop at the content. Do you fancy writing a programming primer with Studio in mind
__________________
Server - Win7 64bit, 2.4Ghz Intel Core 2 Duo, TBS 6284 PCI-E Quad DVB-T2 Tuner, 3 x HD200 & 1 x HD300 extenders
Reply With Quote
  #60  
Old 04-28-2009, 12:42 PM
Opus4's Avatar
Opus4 Opus4 is offline
Administrator
 
Join Date: Sep 2003
Location: NJ
Posts: 19,624
Quote:
Originally Posted by jaminben View Post
Sorry, I wasn't having a pop at the content.
I didn't think you were; I was just confirming your conclusion that the Studio tutorials aren't the very beginning.

I referred you to the Studio manual & tutorials until you mentioned not knowing what '!=' means, at which point I suggested you read something else first.

Quote:
Do you fancy writing a programming primer with Studio in mind
Sorry, I wouldn't know where to begin. I couldn't even explain elementary math to my daughter because I ended up teaching her things beyond what her class was doing in order to help her understand her assignment... I'm not sure why the teacher complained about that, though.

- Andy
__________________
SageTV Open Source v9 is available.
- Read the SageTV FAQ. Older PDF User's Guides mostly still apply: SageTV V7.0 & SageTV Studio v7.1.
- Hauppauge remote help: 1) Basics/Extending it 2) Replace it 3) Use it w/o needing focus
- HD Extenders: A) FAQs B) URC MX-700 remote setup
Note: This is a users' forum; see the Rules. For official tech support fill out a Support Request.
Reply With Quote
Reply


Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Studio and SageMC Questions bama SageMC Custom Interface 4 07-26-2008 01:11 PM
Silly Newbie Question: Starting Studio willetin SageTV Studio 2 01-05-2008 08:21 AM
Studio Newbie Question mightyt SageTV Studio 4 01-30-2006 01:52 AM
Some questions about the upcoming Studio. ToxMox SageTV Customizations 26 06-08-2004 09:00 AM


All times are GMT -6. The time now is 04:25 AM.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, vBulletin Solutions Inc.
Copyright 2003-2005 SageTV, LLC. All rights reserved.