Programmatically list a VI's dependencies (subVIs) recursively

In a large application I am developing I use VI Server calls to load VIs into memory. However, I recently came across a problem which is causing a bit of a headache. I've been able to successfully load and execute, using VI Server, a series of VIs (which are kind of like plugins). That is, all except for one. This odd VI loads up, gets its front panel inserted into a subpanel control, but is reportedly Execution State = Bad. According to the help, this means the VI is broken and cannot run.
Now, my supporting framework ensures that missing dependencies are requested when loading a VI using server calls, ie if a dependency cannot be found the familiar Browse dialogue appears, and indeed during development I've seen this happen a number of times. Therefore I know this latest VI is not missing any dependencies because it doesn't ask me to point it to any, and I know the VI should be working because it opens and executes fine when running in the development environment.
So, what I figure I need to do is programmatically determine which of the VI's dependencies (subVIs) are at fault. I've not done this before so I'm not sure where to start, I guess scripting will be necessary, but:
Is there an easy way to programmatically list a VI's dependencies (subVIs) recursively?
With such a list I should be able to examine each for the one(s) that are broken and get to the bottom of this conundrum. I'm hoping there are some unpublished codes that ship with LabVIEW I can harness for this.
Any help most appreciated!
Thoric (CLA, CLED, CTD and LabVIEW Champion)
Solved!
Go to Solution.

Thanks!
I was stupidly looking at a VI Properties node, not Method node, so I couldn't see it. Not sure why it doesn't appear in my help though, as I have those checkboxes ticked in Options. Maybe I mistyped something...
Anyways, that's great, thank you both!
Thoric (CLA, CLED, CTD and LabVIEW Champion)

Similar Messages

  • How it's possible to receive programmatically list of all OS that Sun uses?

    How it's possible to receive programmatically list of all OS that Sun uses?

    That question does not really make sense to me. A given JDK or JRE will always be implemented for a given platform or operating system. So, that JDK or JRE will only 'know' of one platform/OS. (I doubt even that is true, it's simply implied by the fact that it is implemented for a specific platform).
    If you want a list of supported operating system's, you would normally search for a page (such as the download area) here at java.sun.com.
    - Saish

  • Programmatically list the fonts used in a PDF

    Hello.
    I want to make a list of all the fonts used in a PDF. After reading (again) the ISO-32000 standard, I tend to think that the only way is to cycle through the pages and list the fonts used in each one.
    Is there any other (and faster) way to do this?

    Nope - that's the only way.
    And don't forget, that you can NOT just look at the Page's Resource dict.  You need to do a full recursive walk down the content stream finding all graphic objects that themselves have resources.  Oh, and don't forget Annotations!

  • Power shell script to list all files and folder permissions recursively

    Hi All,
    I am looking for a powershell script to perform the following operations.
    1) To list the folder and file permissions(Allow,Deny both) recursively in a given folder.
    2) List out all the files and folders which are having the deny permission or having only the read access (or) only the write access. Basically the folder should have Read,Execute,Write permissions. Else we have to flag that file/folder name.
    I had written a batch script for the same which does this task using icacls.exe output, but this script takes lot of time to recursively parse all the files ( ~1 lakh files).
    Please help me with the powershell script for the same.
    Thanks
    Sambasiva

    Try this module: http://gallery.technet.microsoft.com/scriptcenter/PowerShellAccessControl-d3be7b83
    After importing the module, you can run something like this:
    dir c:\folder -recurse | Get-AccessControlEntry
    That output can be exported to a CSV for later viewing. You can also provide some parameters to Get-AccessControlEntry to limit the results:
    dir c:\folder -recurse | Get-AccessControlEntry -FileRights Write
    dir c:\folder -recurse | Get-AccessControlEntry -AceType AccessDenied
    dir c:\folder -recurse | Get-AccessControlEntry -AceType AccessAllowed -FileRights Write

  • OMB command help: list object dependencies

    Hi,
    Is there any way in which we can get a list of all object dependencies of OWB mapping using OMB+ or otherwise.
    Thanks in advance

    Yeah, I could sense that I could make SQL query using OWB views. Could you help me making one?
    Thanks,

  • Missing subVI migrate

    I get the the error message as the attached picture showes. I tried to install the different LabView 8.6 supports from the Vision Acquisition Software and some other stuff from the LabView 8.6 Software (LabView and Vision parts). Whats the problem and how do I solve it?
    I know, I am a reel noob on LabView.
    /Johnny
    Attachments:
    Prob.JPG ‏70 KB

    Based on your error message, it looks like you have got a vi that is trying to call itself.
    from LabVIEW help:
    Recursive reference
    A subVI on the block diagram is making a call to itself somewhere in its call chain.
    To correct this error, click the Show Error button in the Error list window to find the subVI. Press the <Delete> key and restructure the block diagram to avoid this problem.
    Try View... VI Hierarchy and see if you can find the place in the tree where the subvi is being called.
    Message Edited by vt92 on 04-07-2009 09:31 AM
    "There is a God shaped vacuum in the heart of every man which cannot be filled by any created thing, but only by God, the Creator, made known through Jesus." - Blaise Pascal

  • Compile Project with Maven and Crystal Reports dependencies

    Hi.
    I'd like to build a java project with maven. That project uses Crystal Reports.  I have added all Crystal Reports jar files in the folder lib (from the runtime download) to my maven dependencies. But i get always the following error message.
    The import com.crystaldecisions.ReportViewer cannot be resolved
    in that package is the ReportViewerBean.class an so i get also the following message.
    ReportViewerBean cannot be resolved
    I tried several different ways with no success.
    im looking foreward for your advice.
    thanks.
    Edited by: hansmeier_de on Aug 25, 2010 11:20 AM

    did you list them in the dependencies in your pom file?

  • Get-ADGroupMember -recursive Show Groupnames

    I'm new to Powershell and im trying to get a list of the Members of some AD-Groups. Each Group is related to two other Groups for Read and Change permissions. Like FS101_EXAMPLE has two members wich are FS101_EXAMPLE_C and FS101_EXAMPLE_R
    So far I've got the following Code:
    import-module ActiveDirectory
    $GRP = "Groupname"
    Get-ADGroupMember $GRP -recursive | select objectclass,name | export-csv C:\Scripts\Exports\$(get-date -f yyyy-MM-dd-hh-mm-ss)-$GRP.txt –NoTypeInformation -Encoding UTF8
    If i scan on "FS101_EXAMPLE" it works and i get a list of all Members of FS101_EXAMPLE_C and FS101_EXAMPLE_R but i should know how's in wich group.
    How can I get a List with the Groupnames on it?

    If I understand you correctly, it sounds like you're getting the list of members from FS101_EXAMPLE, and recursively returning the members of groups within this first group. Your output lists the users but doesn't distinguish from which group they belong.
    I'm looking at Get-ADGroupMember and I see this behavior as well. I have ADPrincipal objects but there's not way on the surface to see their group membership.
    There are likely a number of ways to reach your goal, here is one way using a recursive function.
    function Get-ADGroupMembers {
    param(
    [string]$GroupName
    $objects = @()
    $members = Get-ADGroupMember -Identity $GroupName
    foreach ($member in $members) {
    if ($member.objectClass -eq "group") {
    $objects += Get-AdGroupMembers -GroupName $member.Name
    $objects += @{
    "objectclass" = $member.objectClass;
    "name" = $member.Name;
    "group" = $GroupName
    } # foreach
    return $objects
    } # Get-AdGroupMembers
    Import-Module ActiveDirectory
    $GRP = "Groupname"
    $AllMembers = Get-ADGroupMembers -GroupName $GRP
    $AllMembers | Foreach-Object {New-Object psobject -Property $_ } | Export-Csv C:\Scripts\Exports\$(get-date -f yyyy-MM-dd-hh-mm-ss)-$GRP.txt –NoTypeInformation -Encoding UTF8
    What I'm doing here is I've created a recursive function Get-ADGroupMembers (maybe not the best name) that calls Get-ADGroupMember against the given group. It then gets the members, collects the properties we want and adds them to an array which the function
    returns. If there is a group in the group, it will call the function again with this subgroup. 
    I'm storing the properties you want, objectClass, and Name, as well as the name of the group in a hashtable. The function returns the array of hashtables which I then convert to an object and export to CSV (HT powershell
    convert array of hastables into csv).
    Jason Warren
    @jaspnwarren
    jasonwarren.ca
    habaneroconsulting.com/Insights

  • Terminal - copy a few template folders to a long list of folders

    doing a family tree project
    want to copy the same basic folders (birth, death, marriages, children, etc) to each family member folder. Want to use Terminal - or Applescript, or whatever....
    the ditto command seems to lack any recursive destination function, although it can recursively source just fine.
    the cp command, born long ago of another Unix world, and still somewhat available on the Mac,  doesnt handle a list of folders inside another folder (recursively copying each to each destination folder)....
    The recursive folders part is holding me up. I can do this manually using the option drag copy but who wants to do things the hard way ?

    Use the following AppleScript:
    tell application "Finder"
    set source_folders to {folder "test1" of desktop}
    set dest_folders to {folder "test2" of desktop, folder "test3" of desktop}
    repeat with this_folder in dest_folders
    duplicate source_folders to this_folder
    end repeat
    end tell
    (58964)

  • VBA for Task Dependencies

    Say a task has two dependency chains associated with it. For instance, suppose one chain goes from task 2 to 4 to 8 to 10 and another chain goes from 2 to 5 to 9. When looping through the task dependencies object recursively, is there some way to detect
    when the links shift from one chain to another?
    I'm using the approach outlined by Rod Gill on pp 335-6 of his fine book. (See below.) The approach does not seem to differentiate between the two chains--Flag20 is marked for both chains at the same time. I need to process one chain, then the other.
    Public Sub DepSucc(Tsk As Task)
    Dim Dep As TaskDependency
    If Tsk.Flag20 = False Then
        Tsk.Flag20 = True
        For Each Dep In Tsk.TaskDependencies
            If (Dep.To.ID <> Tsk.ID) Then
                DepSucc Dep.To
            End If
        Next
    End If
    End Sub
    RobVV

    The first time you loop through all dependencies for the selected task you need to set in a variable what field to update. So you need a wrapper sub around what you have, something like (not tested)
    Public Sub DepFirstSucc(Tsk As Task)
    Dim Dep As TaskDependency
    Dim Flagnum as Long
    FlagNum = FlagNum
    If Tsk.GetField(FlagNum) = False Then
    Tsk.SetField FlagNum, True
    For Each Dep In Tsk.TaskDependencies
    If (Dep.To.ID <> Tsk.ID) Then
    DepSucc Dep.To, FlagNum
    FlagNum = FlagNum - 1
    End If
    Next
    End If
    End Sub
    Public Sub DepSucc(Tsk As Task, FlagNum as Long)
    Dim Dep As TaskDependency
    FlagNum = FlagNum
    If Tsk.GetField(FlagNum) = False Then
    Tsk.SetField FlagNum, True
    For Each Dep In Tsk.TaskDependencies
    If (Dep.To.ID <> Tsk.ID) Then
    DepSucc Dep.To, Flagnum
    End If
    Next
    End If
    End Sub
    Note Flag20 is last flag, so I decrement the Flagnum field to use Flgag19 etc.
    Rod Gill
    Author of the one and only Project VBA Book
    www.project-systems.co.nz

  • Recursive Parent Child relationship in JPA

    @Entity
    @Table(name = "OBJECTCATEGORY")
    public class ObjectCategory implements Serializable {
         @Id
         private String categoryId;
         private String categoryName;
         private String description;
         private static final long serialVersionUID = 1L;
         @ManyToMany(fetch = FetchType.EAGER)
         @JoinTable(name = "MAP_CATEGORY", joinColumns = @JoinColumn(name = "CATEGORYID"), inverseJoinColumns = @JoinColumn(name = "OBJECTID"))
         private List<MapC> mapList = new ArrayList<MapC>();
    // Recursion
         @OneToMany(fetch = FetchType.LAZY, mappedBy = "fqQuesCatagory")
         List<ObjectCategory > categoryList = new ArrayList<ObjectCategory>();
         @ManyToOne
         @JoinColumn(name = "PARENTCATEGORY")
         private ObjectCategory fqQuesCatagory
    // Recursion
         public FqQuesCatagory() {
              super();
         public String getCategoryname() {
              return this.categoryname;
         public void setCategoryname(String categoryname) {
              this.categoryname = categoryname;
         public String getDescription() {
              return this.description;
         public void setDescription(String description) {
              this.description = description;
         public List<MapC> getMapList() {
              return faqList;
         public void setFaqList(List<MapC> faqList) {
              this.mapList = mapList ;
         public String getCategoryid() {
              return categoryId;
         public void setCategoryid(String categoryid) {
              this.categoryid = categoryId;
         public List<ObjectCategory> getFqCategoryList() {
              return categoryList;
         public void setFqCategoryList(List<ObjectCategory> categoryList) {
              this.categoryList = categoryList;
         public ObjectCategory getFqQuesCatagory() {
              return fqQuesCatagory;
         public void setFqQuesCatagory(ObjectCategory fqQuesCatagory) {
              this.fqQuesCatagory = fqQuesCatagory;
    Doesn't SAP JPA support recursive parent-child relationship (highlighted by "// Recursion"). The same model works in TopLink perfectly.

    Sorry for the delayed update..
    I see an issue in the WSNavigator. I have a method in my EJB exposed as a web service. This method has a single argument, which is a serializable class containing a few string variables and the above-mentioned Entity with suitable getters and setters for all the class variables.
    When I try to select this operation under the WSDL in the Webservice Navigator, I get a stack overflow error. I think it is because WD4J run-time is not able to build the nested tree. Not sure though...I've attached the stack trace below:
    Cannot send an HTTP error response [500 "Application error occurred during the request procession." (details: java.lang.StackOverflowError
    at java.lang.String.lastIndexOf(String.java:1496)
    at java.lang.String.lastIndexOf(String.java:1458)
    at com.sap.dictionary.runtime.StringUtil.getPackageName(StringUtil.java:143)
    at com.sap.dictionary.runtime.DdBroker.getDataType(DdBroker.java:179)
    at com.sap.tc.webdynpro.progmodel.context.DictionaryHandler._getScalarType(DictionaryHandler.java:447)
    at com.sap.tc.webdynpro.progmodel.context.DictionaryHandler.getDataType(DictionaryHandler.java:159)
    at com.sap.tc.webdynpro.progmodel.context.DataAttributeInfo.init(DataAttributeInfo.java:447)
    at com.sap.tc.webdynpro.progmodel.context.NodeInfo.addAttribute(NodeInfo.java:746)
    at com.sap.tc.webdynpro.progmodel.context.NodeInfo.addAttribute(NodeInfo.java:759)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder.createParameterNodeInfo(DWSContextBuilder.java:984)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder.access$400(DWSContextBuilder.java:88)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1591)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createComplexTypeObject(DWSContextBuilder.java:1660)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1615)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createComplexTypeObject(DWSContextBuilder.java:1660)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1615)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createComplexTypeObject(DWSContextBuilder.java:1660)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1615)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createComplexTypeObject(DWSContextBuilder.java:1660)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1615)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createComplexTypeObject(DWSContextBuilder.java:1660)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1615)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createComplexTypeObject(DWSContextBuilder.java:1660)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1615)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createComplexTypeObject(DWSContextBuilder.java:1660)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForComplexType(DWSContextBuilder.java:1615)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.buildContextForTypeObject(DWSContextBuilder.java:1574)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createElementObject(DWSContextBuilder.java:1763)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.createFieldObject(DWSContextBuilder.java:1681)
    at com.sap.esi.esp.wsnavigator.helper.DWSContextBuilder$DInputParams.intWithStructureFields(DWSContextBuilder.java:1671)
    Any thoughts on this will be highly appreciated.
    BR.

  • Programmatically identify and select DAQ device

    Hi all,
    I'm using Labview 8.0 to control a system which contains a USB DAQ device (9215A BNC for info). I can control everthing fine and use the DAQ card, but the software I'm writing will ultimately be supplied (as an executable or the like) with the system for use on end user computers. Its possible that some of the end users may already have NI DAQ cards installed in their systems. How can I make sure my software addresses only the DAQ card inside my system? Is there a simple way of programmatically listing all of the devices attached to the computer and then identifying the one that I want?
    If I name the device in NI MAX, for example, if I then plug it into a different computer, does it maintain that name? Or is that a local thing only?
    Any help would be greatly appreciated.
    Regards
    Paul

    Hi,
    thanks for the second reply. What I basically wanted was some way of finding the "device name" of the DAQ device in my system when its connected to a computer with multiple other DAQ devices attached. Ultimately, I did something similar to what you sent in that second example (see attached) which scans through the serial numbers of the DAQ devices attached to the computer and compares them with the serial number (entered manually) of my device. It then returns the device name that matches, so I can pass that to whatever future daq commands need it!
    Thanks again for the help
    Regards
    Paul
    Attachments:
    DAQ_ID_example.vi ‏20 KB

  • 'SubVI not executabel', but has no error?

    Hi all,
    I've got a quite large project (400+ VIs) in LV 7.1 (english) on a German W2k.
    In the last weeks I had some situations, that, during editing, the main VI was not executabel. The Error List showed that one of the subVIs was not executabel. When choosing that SubVI, the run arrow was broken, but the Error List did not show any cause. Weird!!!
    After doing some editing this went away and all was good.
    I can not remember having done any special actions; it might even have helped to delete and recreate a wire.
    Is this a known issue? Is it serious? Anything to be done?
    Greetings from Germany!
    -- Uwe

    Shane, Carsten,
    I might have not been as clear as possibel. Sorry for that.
    No, the SubVI was neither executed nor 'reserved for execution' by another process. It simply showed a broken arrow, which in my understanding shows an error in the particular VI or problems in a subVI. In this case one could normally follow the path in the error list down to the broken subVI.
    But here I came to a 'final' subVI with a broken arrow, that showed no errors in the Error list but still had a broken arrow.
    Looks like some insane objects within LV, does'nt it?

  • Why does namcap say I don't need stuff I definitely do need?

    I have developed some bash scripts using ffmpeg, imagemagick's convert, yad, and lots of other tools that I had to explicitly install, but namcap claims I don't need to list any of those dependencies. It's called silentcast and makes it easy to create a variety of animated gif recordings of the screen. I haven't put it in the AUR yet because I'm still working on the README.md, but the package is basically ready for use and available on github: https://github.com/colinkeenan/silentcast/#silentcast. I created the animated gifs in that README.md with silentcast itself.
    Anyway, I was listing all the dependencies in a table in the README.md and realized I had missed a lot of stuff so added more. Then, still worried I had missed something, I read the wiki to find out how to test for missing dependencies and discovered namcap. First, I tried running namcap on PKGBUILD, but that didn't do anything. Next, I did a makepkg -s and ran namcap on the package just created. Here's what namcap has to say:
    namcap -i silentcast-1.0-1-any.pkg.tar.xz
    silentcast I: Script link detected (bash) in file ['usr/bin/genffcom', 'usr/bin/silentcast', 'usr/bin/temptoanim']
    silentcast I: Script link detected (python) in file ['usr/share/silentcast/transparent_window.py']
    silentcast W: Dependency included and not needed ('ffmpeg')
    silentcast W: Dependency included and not needed ('imagemagick')
    silentcast W: Dependency included and not needed ('yad')
    silentcast W: Dependency included and not needed ('xorg-xrandr')
    silentcast W: Dependency included and not needed ('wmctrl')
    silentcast W: Dependency included and not needed ('xdotool')
    silentcast W: Dependency included and not needed ('xorg-xwininfo')
    silentcast W: Dependency included and not needed ('python-gobject')
    silentcast W: Dependency included and not needed ('python-cairo')
    silentcast W: Dependency included and not needed ('xdg-utils')
    silentcast I: Dependency covered by dependencies from link dependence (bzip2)
    silentcast I: Dependency covered by dependencies from link dependence (readline)
    silentcast I: Dependency covered by dependencies from link dependence (linux-api-headers)
    silentcast I: Dependency covered by dependencies from link dependence (gdbm)
    silentcast I: Dependency covered by dependencies from link dependence (perl)
    silentcast I: Dependency covered by dependencies from link dependence (glibc)
    silentcast I: Dependency covered by dependencies from link dependence (iana-etc)
    silentcast I: Dependency covered by dependencies from link dependence (openssl)
    silentcast I: Dependency covered by dependencies from link dependence (ncurses)
    silentcast I: Dependency covered by dependencies from link dependence (gcc-libs)
    silentcast I: Dependency covered by dependencies from link dependence (db)
    silentcast I: Dependency covered by dependencies from link dependence (expat)
    silentcast I: Dependency covered by dependencies from link dependence (tzdata)
    silentcast I: Dependency covered by dependencies from link dependence (filesystem)
    silentcast I: Dependency covered by dependencies from link dependence (libffi)
    silentcast I: Dependency covered by dependencies from link dependence (sh)
    silentcast I: Dependency covered by dependencies from link dependence (zlib)
    silentcast I: Depends as namcap sees them: depends=(bash python)
    So, namcap thinks I only need bash and python! This is crazy. All the stuff I listed as dependencies are explicitly called in the bash scripts or imported in the python script because they were needed in that script. Many of these I had to install myself and were certainly not included with bash and python! Why is namcap saying I don't need this stuff?
    It occurs to me that maybe I haven't properly created the PKGBUILD so that namcap thinks the dependencies are covered by installing the various included scripts. Do I have to somehow make it clear all those scripts ARE the package? Here is my PKGBUILD.
    # Maintainer: Colin Keenan <colinnkeenan at gmail dot com>
    pkgname=silentcast
    pkgver=1.0
    pkgrel=1
    pkgdesc="Silent Screencast: video record your screen and make it into an animated gif"
    arch=('any')
    url="https://github.com/colinkeenan/silentcast"
    license=('GPL')
    depends=('ffmpeg' 'imagemagick' 'yad' 'xorg-xrandr' 'wmctrl' 'xdotool' 'xorg-xwininfo' 'python-gobject' 'python-cairo' 'xdg-utils')
    install=${pkgname}.install
    source=('silentcast' 'genffcom' 'temptoanim' 'transparent_window.py' 'silentcast.desktop' 'README.md')
    md5sums=('de05e0140e4640bf0b52077f4ade5a26'
    '3b7311751662d8bd3034e4720239b070'
    '6ce4638b3358ca388838cf650083a528'
    '6bf9e695750a3f65e4421544c53bdb96'
    'f1641d3959f479a97b6bcd26f103f900'
    '539141058e7f8bcb99218e632a817e1e')
    package() {
    install -D -m755 silentcast "$pkgdir/usr/bin/silentcast"
    install -D -m755 genffcom "$pkgdir/usr/bin/genffcom"
    install -D -m755 temptoanim "$pkgdir/usr/bin/temptoanim"
    install -D -m755 transparent_window.py "$pkgdir/usr/share/silentcast/transparent_window.py"
    install -D -m755 silentcast.desktop "$pkgdir/usr/share/applications/silentcast.desktop"
    install -D -m755 README.md "$pkgdir/usr/share/doc/silentcast/README.md"
    Last edited by colinkeenan (2014-09-22 05:56:37)

    colinkeenan wrote:The specific answer I was looking for and hoping namcap would give me had to do with xdg-open from the xdg-utils package. I use it to open the desktop's file-browser. On the Packages page for xdg-utils, optional dependencies are listed according to what desktop it's being run on. So, for example, I use Xfce and it lists 'exo' and 'xorg-xprop' as optional dependencies. I have no idea if those optional dependencies are actually required in order for my script to open the file-browser in Xfce.
    How can you not know?  Do you use exo or xprop in the script or not?  If you only use xdg-open, then only specify that as a dependency.  Users can then figure out which specific tools they wish to use to satisfy that dependency.  I use my own replacement for xdg-open, and if I wanted I could package it listing "xdg-open" in the provides array so your tool would then call my xdg-open replacement tool.  It's not up to you to worry about how other users chose to implement xdg-open unless your scripts depend on a specific implementation.
    Much the same could be bash.  If your script uses a bash hashbang, then bash is a dependency.  If you use a "sh" hashbang than any shell will do - but then you must use only posix shell commands and conditionals - there are a lot of "bashisms" that will not work in other shells (e.g. the [[ bash builtin for conditionals).  But even if bash is a dependency it does not need to  be listed: you should not list dependencies that are in base or base-devel.
    On a related question that you touched on in this thread, you do not need to list recursive dependencies.  If you list python modules that have python as a hard dependency, then you do not need to list python.  But just like the 'bashisms' example above, if you use a specific version of python (2.7 or 3) these are generally not compatible.  The modules might not care which python is installed to meet it's needs, but your script may require a specific implementation of python.  In such a case, you'd have to specify which python you used in addition to the python module(s).
    EDIT:
    Bear in mind I just whipped this up on the spot, and I have no idea how reliable it is - but in principle the following line should find dependencies for any script or anything else for that matter - provided that simply running the script/command will use everything that is required:
    pacman -Qqo $(strace ./script 2>&1 | awk '/^(open|stat|access)/ {sub(/[a-z]*\("/,"",$1); sub(/",/,"",$1); print $1}') 2>/dev/null | sort -u
    This is assuming the script is in the current working directory and named "script".  I'll put together a more flexible and useful version momentarily.

  • Demlo - A dynamic and extensible music library organizer (in pure Lua)

    Demlo organizes your music library automatically and dynamically. It runs a chain of user-defined scripts using variables such as tags and file properties. This way it yields virtually unlimited customization power to the user.
    Use case
    As an example, consider a music library that is a a perfect definition of chaos:
    No folder structure.
    Tags are not homogeneous, some entries are filled, other not, it varies from file to file.
    Some files have bad audio quality.
    Audio codecs are not always the same. Some file are CBR/VBR, lossless/lossy, ...
    mp3's ID3 tags are a nightmare.
    Covers are sometimes embedded in tags, others are of terrible quality.
    Features
    A few scripts are already provided and they give a good example of what you can do. You can choose to use them, to rewrite them, or to write a new script from scratch. You can preview changes, and once you are done you call the program over you music library, it will process everything in one single run!
    Scripts can be chained: this feature makes Demlo extremely flexible and powerful!
    Move all files according to a unique, yet dynamic folder hierarchy. For
    instance, setting
    output.filename = table.concat {library, '/', o.artist, '/',
                     not empty (o.album) and (empty (o.date) and o.album .. '/' or o.date .. ' - ' .. o.album .. '/') or '',
                     empty (track_padded) and '' or track_padded .. ' - ',
                     o.title}
    will move "john doe - 1. intro.ogg" to
    "/home/$USER/music/John Doe/2013 - Great Album/01 - Intro.ogg" if there is an album and a date,
    "/home/$USER/music/John Doe/Great Album/01 - Intro.ogg" if there is an album and no date,
    "/home/$USER/music/John Doe/01 - Intro.ogg" if there is no album.
    Case checking: a powerful script that will turn everything to title case. It supports special cases such as Roman numerals, McDonald, etc. It also supports a list of exceptions (e.g. AC-DC, DJ, feat., etc.).
    Encoding: you can conditionally re-encode you files, so you can choose to only re-encode files with some particular encoding settings. You can set the desired bitrate, etc.
    Covers: automatically remove embedded covers, remove duplicates, remove files beyond/below a quality threshold, etc.
    Different kinds of music: classical, OST, and band songs have usually different kinds of tags and folder structures. You can manage different audio libraries easily by setting the corresponding "library" variables.
    Edit tags of a file set with your favorite text editor.
    Support for cue sheets. (Both external and embedded.)
    Demlo can be interfaced with any other program, both ways. (X calls Demlo or Demlo calls X.)
    MusicBrainz support for online tagging and cover fetching.
    Technical characteristics
    This program is completely written in Lua. Its only major dependency is FFmpeg. A few Lua modules are required, which should not eat more than a few KiB on your drive. This leads to a lightweight codebase for a portable and extensible program.
    Dependencies
    ffmpeg
    lua (>= 5.1)
    lua-dkjson
    lua-filesystem
    lua-llthreads2
    lua-penlight
    lua-socket
    slnunicode
    chromaprint (optional)
    History
    This program is based on Musish by the same author.
    The original program was written in POSIX shell but suffured from many limitations as well as performance issues. It was rewritten in Lua to circumvent all those issues while applying minor changes to the CLI options and to the variable names. The syntax of the script changed to Lua as well. Here follows a list of major changes:
    Traversing folders recursively is no longer a security issue.
    Overall performance got boosted by a factor of approx. 2.
    Scripts and configuration files are sandboxed, which means they can no longer contain harmful code. However it is no longer possible to chain scripts.
    All tags are processed dynamically, no more hard-coded tags.
    Links
    Official web page
    Arch Wiki
    AUR package
    Issue tracker: Please file bug reports there thanks!
    Last edited by Ambrevar (2015-02-20 09:22:22)

     I hoped the structure I presented was clear enough. No, all/majority of tags would be a little too much, but genre, different release types, file types and some other basic distinctions, yes and tagsfs will probably help with that. There are special folders like [Compilation], [High Voltage SID Collection] and probably others in the future, maybe with help of tagsfs. Compilations and Artists are prepended by the leading letter of 'sorted artists/albums' level. Then albums/artists are sorted/presented in the manner visible in the Picard script:
    $if($eq(%compilation%,1),
    %COMPILATION%///%FIRSTLETTER%///$if2(%ALBUM%,%NONALBUMTRACKS%,[Other]) - $if(%DATE%,[%DATE%],),
    %FIRSTLETTER%///$trim($if2(%ALBUMARTIST%,%ARTIST%),.)///$if(%DATE%,%DATE% - ,)$if2(%ALBUM%,%NONALBUMTRACKS%,[Other]) )
    $if(%RELEASETYPE%,[%RELEASETYPE%],)%BARCODE%$if(%INCOMPLETE%,[%INCOMPLETE%],)[%EXT%]///
    $if(%DISCNUMBER%,%DISCNUMBER%-,)%TRACKNUMBER%. %ARTIST% - %TITLE%
     Picard has preview examples, so copying the whole script into file naming script under options should make this definitely clear.
    Ambrevar wrote:Thinking about it, a similar feature is provided by most library managers where you can choose filters and tree structure and so on. It remains virtual though, it does not touch the filesystem. Is it really necessary to you to have that sort of view directly on your filesystem? The problem of the filesystem view seems very complex to me.
    Not all devices provide that capability. It is more pleasant to work with that approach than previous structures I used, remember that I can restructure the whole library at any time and probably copy the local one elsewhere using the new structure, but I have not looked into that yet.
     We probably have very different experiences, I see this as very comfortable and convenient. Before that I had been using folders for different file types in the main directory, but it ended up with so many entries for FLAC and MP3, that parsing that directories in a player or any maintenance using a file browser/terminal was too troublesome/slow. So I reduced the number of files, by using the alphabet and additional characters as sorting mechanism. And since that was one step away from separating compilations from albums/single releases, I did that also. Now I can access the whole library very quickly, even when one or two additional characters need to be typed.
    Ambrevar wrote:Furthermore, would you consider this to be an automated task or a manual one? Using your example, how can a program know that Lauge & Baba Gnohm is both Lauge and Baba Gnohm if no tags says so?
     Both, I want as always full control. MusicBrainz [database] relations.
    Ambrevar wrote:Hard links do not work for folders.
    Symlinks cause problems with most file browsers that do not follow them during copying.
     I do not recall writing they should link folders, the directory structure would have to be [re]build and then files [hard/sym]linked, which might pose a maintenance issue, although deleting links and empty directories not really, but "leftovers" like covers could block cleaning. *The only file browser* I would recommend is Proto from a very friendly Polish programmer named Mieszko Lassota, but it is, or at least was last time I checked, Windows only and slowly further developed, although still kills every mc, mucommander and ranger on sight, that is how I remember it. SpaceFM is bearable, but I still only use rsync to copy files and see no point using anything else.
    Ambrevar wrote:Can you elaborate on this? What are the limitations of Picard beyond symlinking? It could be interesting to know what feature you would like.
     The recursive/linking aspect it the main point here. I hope this is not too big of a disappointment. Having too long names has also been a problem in few cases, classical music if I recall correctly, but those are limitations of the file system, however even that could be overcome with Picard, but the code would not be as easily readable as it is now. The question would be what should be abbreviated/priorities, what to do when after abbreviation the directory/file names are still too long and so on. I had to do it by hand these few times. Picard does not handle covers/images well in my experience, but I used something else for that, puddletag I think. I would have to continue to organize the library to remember.
     Furthermore, not all media players/organizers do have the capability to get exactly this structure with formatting, leading letters and distinction between compilations and albums being two examples. Browsing this robust file structure with ncmpcpp is very efficient, I almost never use the library view. As long as a media player has the browsing capability, I have the same view/behavior. And other hardware also works without issues. Yes, it basically comes down to having the file system do, what media players should, however with a few exceptions I had only positive results for more than almost two years now. Do you now see benefits of having that file structure?
     Again I will take a look at your tool, when I find some time and what progandy suggested also of course. How do you save your music on the file system?
    Edit: Style. Clarification.
    Last edited by emeres (2014-09-12 13:02:34)

Maybe you are looking for

  • Why is my daughter asked to enter my AppleID password to open *any* app on her iPhone?

    Preamble: When iOS 8 dropped and my family of 5 had all upgraded, I set up Family Sharing. As it turns out, it's an incomplete solution and is therefore completely useless for isolating the spendy account (home sharing, iTunes share, etc.), but setti

  • Can not sync photos from my PC to my Ipad via Itunes

    I have updated my itunes and ma Ipad 1 to IOS 5 . And now I can not sync the photos from my PC to my Ipad. The syncing process of the Ipad starts and end just whe. it comes to sync the pictures, and in the bar at the bottom of I tunes shows that ther

  • Query related to multiple attachments in mail adapter

    Hi, I have a query related to multiple attachments in receiver mail adapter. I have successfully configured mail related scenarios but now I have another requirement in which I have multiple source files in one directory and I want to send one mail f

  • How do I delete tabs in Final Cut Express?

    Final Cut Express 4:  I know I can't delete whole projects; what I'm worried about is doing a bunch of short projects and having the tabs that show the titles of each project become so many I can't even use the program.  If I do 5 short videos and ha

  • Integrating with external access control system

    Hi, I am new at the network but have read a lot recently about the above subject as much as I could. However, I am a bit mixed up at something. I understand in order to update SAP HR module with employees time and attendance logs I need to interface