Re: [Hardhats-members] Data dictionary question
Interesting. I just did it again. I am prompted for a field number, but not for the node to store the data in. I wonder which of us has the more recent code (or even how to tell.? Kevin On 9/27/05, steven mcphelan [EMAIL PROTECTED] wrote: This is a false statement: Turns out that the screenman way doesn't allow one to specify the node to store data on. I use screenman exclusively for creating new fields in files. I am always prompted to for node and piece to store the data. --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
RE: [Hardhats-members] Data dictionary question
Kevin, Are you going into FileMan with either P^DI or Q^DI ? Those entry points let FileMan know that you are a programmer. If FileMan thinks that you are not a programmer, it won't let you set the node and piece number. tjh -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Wednesday, September 28, 2005 9:41 AM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question Interesting. I just did it again. I am prompted for a field number, but not for the node to store the data in. I wonder which of us has the more recent code (or even how to tell.? Kevin On 9/27/05, steven mcphelan [EMAIL PROTECTED] wrote: This is a false statement: Turns out that the screenman way doesn't allow one to specify the node to store data on. I use screenman exclusively for creating new fields in files. I am always prompted to for node and piece to store the data. --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question
I was going in through do ^XUP, then getting to the fileman options through the menu system. I have a program access code of @. I haven't found anything else that locks me out with this method. I would be interested to know if what you describe gives more abilities... Kevin On 9/28/05, Holloway, Thomas (EDS) [EMAIL PROTECTED] wrote: Kevin, Are you going into FileMan with either P^DI or Q^DI ? Those entry points let FileMan know that you are a programmer. If FileMan thinks that you are not a programmer, it won't let you set the node and piece number. tjh -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Wednesday, September 28, 2005 9:41 AM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question Interesting. I just did it again. I am prompted for a field number, but not for the node to store the data in. I wonder which of us has the more recent code (or even how to tell.? Kevin On 9/27/05, steven mcphelan [EMAIL PROTECTED] wrote: This is a false statement: Turns out that the screenman way doesn't allow one to specify the node to store data on. I use screenman exclusively for creating new fields in files. I am always prompted to for node and piece to store the data. --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
RE: [Hardhats-members] Data dictionary question
Kevin, As a FileMan troglodyte, I never go in through the menu system and I avoid ScreenMan if possible. I prefer the Line Editor and roll scroll entry. I hadn't ever seen what would happen if I went into FM from the EVE menu and added a field to a file. Well, now I've tried it. I do get the prompt for node and piece. Here's the screen scrape: Field #47 in File #101747 FIELD LABEL: KEVINDATA TYPE... FREE TEXT - | SUBSCRIPT: 1 | AUDIT C| PIECE-POSITION: 1 | REA- DELETE ACCESS: WRITE ACCESS: SOURCE: DESCRIPTION...TECHNICAL DESCRIPTION... IS THIS FIELD MULTIPLE... NO MANDATORY: NO HELP-PROMPT: Answer must be 5-22 characters in length XECUTABLE HELP: ___ The inset window came up after I answered NO to the Multiple prompt. If you're not seeing this, and if you are correct about having the @ mode set, I'm not sure what the problem is. tjh -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Wednesday, September 28, 2005 10:22 AM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question I was going in through do ^XUP, then getting to the fileman options through the menu system. I have a program access code of @. I haven't found anything else that locks me out with this method. I would be interested to know if what you describe gives more abilities... Kevin On 9/28/05, Holloway, Thomas (EDS) [EMAIL PROTECTED] wrote: Kevin, Are you going into FileMan with either P^DI or Q^DI ? Those entry points let FileMan know that you are a programmer. If FileMan thinks that you are not a programmer, it won't let you set the node and piece number. tjh -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Wednesday, September 28, 2005 9:41 AM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question Interesting. I just did it again. I am prompted for a field number, but not for the node to store the data in. I wonder which of us has the more recent code (or even how to tell.? Kevin On 9/27/05, steven mcphelan [EMAIL PROTECTED] wrote: This is a false statement: Turns out that the screenman way doesn't allow one to specify the node to store data on. I use screenman exclusively for creating new fields in files. I am always prompted to for node and piece to store the data. --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question
This is a false statement: Turns out that the screenman way doesn't allow one to specify the node to store data on. I use screenman exclusively for creating new fields in files. I am always prompted to for node and piece to store the data. - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: Hardhats Sourceforge hardhats-members@lists.sourceforge.net Sent: Tuesday, September 27, 2005 10:32 PM Subject: [Hardhats-members] Data dictionary question Trick/Quick question: Where all is the node;piece stored in the data dictionary? I ask because I think it is stored in two places, and I can only find one of them. I had added a field (#22700--my number space) to file 2005.2 using the screenman form method (mistake!). Turns out that the screenman way doesn't allow one to specify the node to store data on. I then had the option of deleting the field and entering everything back in again. I had written lengthy descriptions so wanted to avoid that if possible. I had not entered any actual data into the field, and had created no cross-references, so I thought that I could change its DD definition OK (you know about assumptions...). I found that $p(^DD(2005.2,22700,0),^,4) = 7;1 I didn't want my data stored in note 7, so changed this to 22700;1 Now, when I use VPE data dictionary browser, it looks fine (shows 22700;1). And when I go to enter data in with Fileman, it is fine--the file goes in, and when I come back to edit it again it is still there.. But when I do I do an INQUIRE of the data I added, it doesn't show. And when I do the LIST FILE ATTRIBUTES, and in GLOBAL MAP listing format, it still shows the old 7;1 So apparently the node;piece is stored in more than one location. Any idea where the other location is? Thanks Kevin --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by: Power Architecture Resource Center: Free content, downloads, discussions, and more. http://solutions.newsforge.com/ibmarch.tmpl ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
RE: [Hardhats-members] Data dictionary question...
Developers always prefer elegant solutions to the brute force of the hammer it is in the blood. Thanks Marc Aylesworth C3I Associates AFRL/IFSE Joint Battlespace Infosphere Team 525 Brooks Rd Rome, NY 13441-4505 Tel:315.330.2422 Fax:315.330.7009 Email: [EMAIL PROTECTED] -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Thurman Pedigo Sent: Tuesday, July 12, 2005 10:37 PM To: hardhats-members@lists.sourceforge.net Subject: RE: [Hardhats-members] Data dictionary question... This speaks volumes. I can get what I wannt from FileMan, though it's a greenscreen telnet program. The general public think it is useless if it's not MADISON AVENUE FANCY GLOSSY. New York and Hollywood have long tentacles. thurman -Original Message- From: [EMAIL PROTECTED] [mailto:hardhats- [EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Tuesday, July 12, 2005 2:44 PM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... Isn't if funny how we like things to not just to do the job, but to also be beautiful? If your code gets the job done, then its OK with me.. :-) Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Perhaps the worst thing is that back in the main Triton class, I have code like this. void setConnected(boolean isConnected) { l_connected = isConnected; if (l_connected) { mi_login.setEnabled(false); mi_logout.setEnabled(true); } else { mi_login.setEnabled(true); mi_logout.setEnabled(false); } } boolean isConnected() { return(l_connected); } All this does is toggle the connected state, and enables/disables menu items accordingly. I really, really don't like this design. === Gregory Woodhouse [EMAIL PROTECTED] Nothing is as powerful than an idea whose time has come. -- Victor Hugo On Jul 12, 2005, at 5:49 AM, Kevin Toppenberg wrote: I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position
Re: [Hardhats-members] Data dictionary question...
From: Cameron Schlehuber [EMAIL PROTECTED] Reply-To: hardhats-members@lists.sourceforge.net Date: Tue, 12 Jul 2005 22:21:13 -0600 To: hardhats-members@lists.sourceforge.net Subject: RE: [Hardhats-members] Data dictionary question... Indeed, the HealtheVet Person Service appears to me to be repeating some of the same limited constraints as were imposed over two decades ago (e.g., ONLY real humans are being given consideration ... no test entries, no avatar IDs, etc.) There are two approaches I've recommended from the beginning: One is to have instead of a patient file, to have a file of objects of interest. E.g. file 2 could contain any arbitrary object of interest, differentiated by identifying traits and other attributes (human, animal, vegetable, mineral, etc.) Note that DHCP/VistA used in veterinary care has posed no problem with this approach. Or two, use a fully qualified ID for each entity in the entity-role-act instances. The latter is similar to what was developed with the so-called Variable Pointer ... which is how VistA lab handles the unlimited categories of objects of interest that VistA lab can deal with. But I'd like to hear your approach Richard. ... . My approach is always the same--recognize the larger domain of which the initial set is actually a subset. That is what you propose for the PATIENT file where objects of interest may be the universe set that contains all PATIENTS and other subsets of interest as well. The key issue becomes one of 'art' not technology as the debate then shifts to determining the balance point at which the domain of the file membership is finally, formally decided. Note that as the domain is enlarged, one gathers up complexity and all the implications of that trend. On the one hand we have the restrictive PATIENT file domain as originally established, and on the other hand, a file of objects of interest in a universe domain so grand that the entire system of files is contained in the one single file! ...and, in between a system with some form of domain context switching. (See the variable pointer discussion below.) Notice that FileMan can be seen as a single file itself. FileMan could have been fully recursive and completely self referential. It could have been the case that operations on 'classical' FileMan files would work equally well on the FileMan itself. Programmer API's for FileMan could have worked just as well on the file that contains the data dictionary. Thus, the inquiry that started this thread would have not been needed. But, alas, the MUMPS language did not include a mechanism to support recursion in a practical way. George did write %RCR to serve essential internal functions within FileMan, but that was a stop-gap solution. The performance of %RCR was prohibitive and discouraged making FileMan fully self referential. When I wrote the code in the Food Nutrient Analysis package that reads the data dictionary as Kevin wants to do, my discussions with George Timson did include a call for extensions to cover this kind of functionality. George's interests were focused elsewhere and there has always been only one George Timson.:-( (...no sadder words of tongue nor pen than those--it might have been.) Your point #2 is I believe always needed as well. As long as a system design intends to limit attributes on file to those that represent properties of the entities being described in the file, then the future will always be at risk for cases where two or more real world instances can not be distinguished based on their native attributes. I would always include for every entry in a given file a SYSTEM ASSIGNED attribute, where the values of that attribute are everywhere unique. The FileMan Internal Entry Number (IEN) represents such a system assigned attribute. However, the implementation of IEN was for specific technical purposes that did not include the function I associate with point #2. So, I don't recognize FileMan IEN as a good example of a system assigned, uniquely valued attribute. As for the 'variable pointer', it has an ugliness that is exceeded only by that of the NEW PERSON mess. I see the requirement that the variable pointer was intended to serve as a domain scope switch. That is, a mechanism that supports the function of changing the domain in which you are operating. This allows a large set of software tools to be enabled over a wider range of contexts by context switching at runtime rather than at system design time which brings us back to the list of laments Gregory presented. Maybe then getting dog blood and ice machine water into the lab system becomes trivial. Regards, Richard. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP
Re: [Hardhats-members] Data dictionary question...
I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1; p.add(password, c); setSize(300,200); c.weightx = 0.0; c.gridx = 0; c.gridy = 2; p.add(l_loginButton, c); c.gridx = 1; c.gridy = 2; c.weightx = 0.0; c.fill= GridBagConstraints.NONE; p.add(l_cancelButton, c); } protected void signIn() { l_application.setConnected(true); } protected void signOut() { l_application.setConnected(false); } } === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 11, 2005, at 5:15 PM, Kevin Toppenberg wrote: I wonder if the reference to the JFrame is for a messaging system. In Borland/Windows, a GUI object has both an 'owner' (one responsible for utimately destroying it) as well as a 'parent' (one from whom one receives windows messages). I can't see why your objects would need to reference the JFrame (is this a graphic frame?) unless it was for messaging (i.e. time to repaint your area!) Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___
RE: [Hardhats-members] Data dictionary question...
The Frame is an AWT Frame. This is only used to indicate that the Frame is the parent of the dialog box so that the dialog box is positioned relative to the parent and could not be hidden behind the parent and not be able to be selected because dialog boxes are modal. Thanks Marc -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Tuesday, July 12, 2005 8:49 AM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1; p.add(password, c); setSize(300,200); c.weightx = 0.0; c.gridx = 0; c.gridy = 2; p.add(l_loginButton, c); c.gridx = 1; c.gridy = 2; c.weightx = 0.0; c.fill= GridBagConstraints.NONE; p.add(l_cancelButton, c); } protected void signIn() { l_application.setConnected(true); } protected void signOut() { l_application.setConnected(false); } } === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 11, 2005, at 5:15 PM, Kevin Toppenberg wrote: I wonder if the reference to the JFrame is for a messaging system. In Borland/Windows, a GUI object has both an 'owner' (one responsible for utimately destroying it) as well as a 'parent' (one from whom one receives windows messages). I can't see why your objects would need to reference
RE: [Hardhats-members] Data dictionary question...
OK. Thanks Kevin --- Aylesworth Marc A Ctr AFRL/IFSE [EMAIL PROTECTED] wrote: The Frame is an AWT Frame. This is only used to indicate that the Frame is the parent of the dialog box so that the dialog box is positioned relative to the parent and could not be hidden behind the parent and not be able to be selected because dialog boxes are modal. Thanks Marc -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Tuesday, July 12, 2005 8:49 AM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1; p.add(password, c); setSize(300,200); c.weightx = 0.0; c.gridx = 0; c.gridy = 2; p.add(l_loginButton, c); c.gridx = 1; c.gridy = 2; c.weightx = 0.0; c.fill= GridBagConstraints.NONE; p.add(l_cancelButton, c); } protected void signIn() { l_application.setConnected(true); } protected void signOut() { l_application.setConnected(false); } } === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 11, 2005, at 5:15 PM, Kevin Toppenberg wrote: I wonder if the reference to the JFrame
Re: [Hardhats-members] Data dictionary question...
As an old Mumpster who did all of his programming in languages other than Mumps before the advent of OO and as a result has tried to understand OO without knowing anything about C++, Java, etc. I miss what is being said. I would like to know what you mean by tight coupling and poor cohesion we see in the Vista code base. Jim Gray - Original Message - From: Gregory Woodhouse [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 5:24 PM Subject: Re: [Hardhats-members] Data dictionary question... My point of view is that OO can easily be done poorly (something that bothers me -- a lot), but it can b incredibly powerful when done right. Rather than being an interesting aside, I see object orientation, or something like it, as critical to the long range success of Vista. The tight coupling and poor cohesion we see in the Vista code base is way, way out of hand, and trying to move Vista into new environments only makes the issue more acute. No, I don't think for a moment that using an object oriented language will somehow magically solve these problems, but I find it hard to envision a solution that doesn't at least use basic ideas of object orientation in a fundamental way. In fact, I think it is part of the genius of Vista that it anticipated OO technology to a surprising extent, and I doubt it would have been as successful as it has been were that not the case. === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 11, 2005, at 3:46 PM, Kevin Toppenberg wrote: Speaking of discipline, its pretty clear that one can't tie the hands of the programmer. It's like Marty's analagy of the girlfriend and the motorcycle again. :-) But I don't see why garbage collection would be any more of an issue with variables acting as object than it would be with any other variable. A simple kill would take them all out. For those stored in ^TMP etc, if one set up an infrastructure that instantiated the objects for the programmer, then they could be put in locations that would be immediately obvious that they were no longer in use. A $J node would be a first thought. I'm sure you put quite a bit of thought into this before. I am just shooting from the hip. It was just a thought that was buzzing around my head. But to be honest, I find the benefits of an OO oriented language to be most helpful when I am either working with a graphic environment, or when using a library like Borland's VCL. I don't know if I really need OO in what I am doing now. Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I save the reference as l_parent and then use it in the event handlers to invoke methods defined in the main application. The idea is that I might want to use it connect to MySQL, sign in to VistA, or something else. Anyway, the dialog isn't supposed to know what you're doing when you log in. The good thing about this design is that it's flexible. The bad thing is that it means that lot of application logic gets stuck in subclass of Frame. If you want to sound jaded, you can say that it is poor cohesion, if you don't, it violates the principle Do one thing, and do it well. === Gregory Woodhouse [EMAIL PROTECTED] Education is a progressive discovery of our own ignorance. --Will Durant On Jul 12, 2005, at 5:49 AM, Kevin Toppenberg wrote: I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Perhaps the worst thing is that back in the main Triton class, I have code like this. void setConnected(boolean isConnected) { l_connected = isConnected; if (l_connected) { mi_login.setEnabled(false); mi_logout.setEnabled(true); } else { mi_login.setEnabled(true); mi_logout.setEnabled(false); } } boolean isConnected() { return(l_connected); } All this does is toggle the connected state, and enables/disables menu items accordingly. I really, really don't like this design. === Gregory Woodhouse [EMAIL PROTECTED] Nothing is as powerful than an idea whose time has come. -- Victor Hugo On Jul 12, 2005, at 5:49 AM, Kevin Toppenberg wrote: I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1; p.add(password, c); setSize(300,200); c.weightx = 0.0; c.gridx = 0; c.gridy = 2; p.add(l_loginButton, c); c.gridx = 1; c.gridy = 2; c.weightx = 0.0; c.fill= GridBagConstraints.NONE; p.add(l_cancelButton, c); } protected void signIn() { l_application.setConnected(true); } protected void signOut() { l_application.setConnected(false); } } === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 11, 2005, at 5:15 PM, Kevin Toppenberg wrote: I wonder if the reference to the JFrame is for a messaging system. In Borland/Windows, a GUI object has both an 'owner' (one responsible for utimately destroying it) as well as a 'parent' (one
Re: [Hardhats-members] Data dictionary question...
It is certainly true that the infrastructure packages (Kernel, Fileman, etc.) do a good job of reducing the degree of coupling in Vista (part of its genius, IMO) but pick your favorite application. How easy it to rework it to use a different approach? How many Vista applications still use HL7 1.5 (notably Lab) because it's not practical to move over to 1.6? Why are people so interested in using Imaging to store scanned documents (something having absolutely nothing to do with medical imagining)? Why has it taken so much effort to figure out how to add new patients to a Vista system when it is not being used in a VA setting? Why is it so hard to adapt IB/ AR to the needs of non-VA users of Vista? Why is re-indexing file 2 such a case of shoot self in foot? Why did identifying and resolving duplicates in this file require such a herculean effort? === Gregory Woodhouse [EMAIL PROTECTED] Without the requirement of mathematical aesthetics a great many discoveries would not have been made. -- Albert Einstein On Jul 12, 2005, at 9:16 AM, James Gray wrote: As an old Mumpster who did all of his programming in languages other than Mumps before the advent of OO and as a result has tried to understand OO without knowing anything about C++, Java, etc. I miss what is being said. I would like to know what you mean by tight coupling and poor cohesion we see in the Vista code base. Jim Gray --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
RE: [Hardhats-members] Data dictionary question...
Usually when I design a GUI I logically split it up and then put the code that defines the controls in it and the GUI is comprised of those with access functions that set/get information that is needed from those components. Thanks Marc Aylesworth C3I Associates AFRL/IFSE Joint Battlespace Infosphere Team 525 Brooks Rd Rome, NY 13441-4505 Tel:315.330.2422 Fax:315.330.7009 Email: [EMAIL PROTECTED] -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Gregory Woodhouse Sent: Tuesday, July 12, 2005 1:59 PM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... Right, and if that's all it were being used for, I wouldn't worry about it so much. The point of my example was that this reference was also being used to allow the dialog to communicate with the main application. This is common is Swing applications, but is it good design? === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 12, 2005, at 6:58 AM, Aylesworth Marc A Ctr AFRL/IFSE wrote: The Frame is an AWT Frame. This is only used to indicate that the Frame is the parent of the dialog box so that the dialog box is positioned relative to the parent and could not be hidden behind the parent and not be able to be selected because dialog boxes are modal. Thanks Marc --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
If I understand what you're saying (and I'm not at all sure I do), this isn't unlike the approach I took here. My firs step was to actually create the dialog (design the GUI) and then I went on to do the plumbing by using my reference to the main class to invoke whatever functions are appropriate. In this prototype, nothing interesting happens, but I have another version that creates a JDBC connection (and, in principle, it should also be possible to sign in to Vista). I don't like the approach because I have all kinds of unrelated methods in one class (kind of like the god class antipattern). === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 12, 2005, at 11:18 AM, Aylesworth Marc A Ctr AFRL/IFSE wrote: Usually when I design a GUI I logically split it up and then put the code that defines the controls in it and the GUI is comprised of those with access functions that set/get information that is needed from those components. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
RE: [Hardhats-members] Data dictionary question...
Kind of my, GUI is a collection of JPanels that have the actual GUI code in it, disable button if this happens etc etc. Then I have main class that is called GUI and contains all these JPanels. The JPanels have set/get functions for the things that need it like table entries and textFields and controls the functionality of the controls based on what is set or gotten. The GUI class then has functions that set/set the fields on the JPanel. Actually, after writing this it does sound basically the same. Thanks Marc Aylesworth C3I Associates AFRL/IFSE Joint Battlespace Infosphere Team 525 Brooks Rd Rome, NY 13441-4505 Tel:315.330.2422 Fax:315.330.7009 Email: [EMAIL PROTECTED] -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Gregory Woodhouse Sent: Tuesday, July 12, 2005 2:38 PM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... If I understand what you're saying (and I'm not at all sure I do), this isn't unlike the approach I took here. My firs step was to actually create the dialog (design the GUI) and then I went on to do the plumbing by using my reference to the main class to invoke whatever functions are appropriate. In this prototype, nothing interesting happens, but I have another version that creates a JDBC connection (and, in principle, it should also be possible to sign in to Vista). I don't like the approach because I have all kinds of unrelated methods in one class (kind of like the god class antipattern). === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 12, 2005, at 11:18 AM, Aylesworth Marc A Ctr AFRL/IFSE wrote: Usually when I design a GUI I logically split it up and then put the code that defines the controls in it and the GUI is comprised of those with access functions that set/get information that is needed from those components. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I should have been more clear in my question. I am more interested in what you mean by the terms tight coupling and poor cohesion. I am aware of most of these specific problems in Vista (except for the the Lab one). I am becoming more and more aware of the tangled mess in some of the RPC calls in the OR* namespace. I assume that amounts to tight coupling. I doubt I would know what poor or good cohesion was when I saw it. I do know when the code is hard to read. Jim Gray - Original Message - From: Gregory Woodhouse [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Tuesday, July 12, 2005 11:54 AM Subject: Re: [Hardhats-members] Data dictionary question... It is certainly true that the infrastructure packages (Kernel, Fileman, etc.) do a good job of reducing the degree of coupling in Vista (part of its genius, IMO) but pick your favorite application. How easy it to rework it to use a different approach? How many Vista applications still use HL7 1.5 (notably Lab) because it's not practical to move over to 1.6? Why are people so interested in using Imaging to store scanned documents (something having absolutely nothing to do with medical imagining)? Why has it taken so much effort to figure out how to add new patients to a Vista system when it is not being used in a VA setting? Why is it so hard to adapt IB/ AR to the needs of non-VA users of Vista? Why is re-indexing file 2 such a case of shoot self in foot? Why did identifying and resolving duplicates in this file require such a herculean effort? === Gregory Woodhouse [EMAIL PROTECTED] Without the requirement of mathematical aesthetics a great many discoveries would not have been made. -- Albert Einstein On Jul 12, 2005, at 9:16 AM, James Gray wrote: As an old Mumpster who did all of his programming in languages other than Mumps before the advent of OO and as a result has tried to understand OO without knowing anything about C++, Java, etc. I miss what is being said. I would like to know what you mean by tight coupling and poor cohesion we see in the Vista code base. Jim Gray --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I'm actually struggling to come up with better definitions. These terms were possibly introduced by Erich Gamma et al. (the Gang of Four) in Design Patterns: Elements of Reusable Object-Oriented Software. Tight coupling -- This means there are many interdependencies (direct and indirect) between different software components. think of it as big interfaces with high fan-in. Poor cohesion - This means that the job a particular component does is poorly defined or that a component has many responsibilities that are not clearly related. (Could this be big implementations with high fan-out?) === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 12, 2005, at 12:06 PM, James Gray wrote: I should have been more clear in my question. I am more interested in what you mean by the terms tight coupling and poor cohesion. I am aware of most of these specific problems in Vista (except for the the Lab one). I am becoming more and more aware of the tangled mess in some of the RPC calls in the OR* namespace. I assume that amounts to tight coupling. I doubt I would know what poor or good cohesion was when I saw it. I do know when the code is hard to read. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
RE: [Hardhats-members] Data dictionary question...
These terms go back to a style of creating software. It describes the Model, View, Controller type of development. There is no connection between the data, how it is controlled and how it is viewed. For example an integer would be data. There could be more than on view for the data for example there could be a slider where the position indicates the integer value, there could also be a text field that has a character or String representation of the integer value. There would be different controls for each of these input methods for instance for the text field you would have to make sure it was a numerical value and that it was not a float value etc etc, the slider could just make the increments as integer and that could be the only control. This is considered to be tightly coupled because the view actually has the control built right in. The first is a description of being loosely coupling because you can change the way it checks the inputs and the View would have no idea that the implementation has changed. There are places where the display of information is tightly incorporated into how it is displayed to the user that is why it is so hard to put new front ends onto the underlying M Database. If these layers were separated it would be much easier to change how the information is displayed such as roll-n-scroll, or screenMan or in CPRS or what ever any one wishes to show a user. Sorry for the long explaination but I thought it was necessary to explain fully. The Sun Java swing tutorial has more information for those interested here is the URL for models and there use in swing. http://java.sun.com/docs/books/tutorial/uiswing/components/model.html Marc Aylesworth C3I Associates AFRL/IFSE Joint Battlespace Infosphere Team 525 Brooks Rd Rome, NY 13441-4505 Tel:315.330.2422 Fax:315.330.7009 Email: [EMAIL PROTECTED] -Original Message- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Gregory Woodhouse Sent: Tuesday, July 12, 2005 3:21 PM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... I'm actually struggling to come up with better definitions. These terms were possibly introduced by Erich Gamma et al. (the Gang of Four) in Design Patterns: Elements of Reusable Object-Oriented Software. Tight coupling -- This means there are many interdependencies (direct and indirect) between different software components. think of it as big interfaces with high fan-in. Poor cohesion - This means that the job a particular component does is poorly defined or that a component has many responsibilities that are not clearly related. (Could this be big implementations with high fan-out?) === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 12, 2005, at 12:06 PM, James Gray wrote: I should have been more clear in my question. I am more interested in what you mean by the terms tight coupling and poor cohesion. I am aware of most of these specific problems in Vista (except for the the Lab one). I am becoming more and more aware of the tangled mess in some of the RPC calls in the OR* namespace. I assume that amounts to tight coupling. I doubt I would know what poor or good cohesion was when I saw it. I do know when the code is hard to read. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Isn't if funny how we like things to not just to do the job, but to also be beautiful? If your code gets the job done, then its OK with me.. :-) Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Perhaps the worst thing is that back in the main Triton class, I have code like this. void setConnected(boolean isConnected) { l_connected = isConnected; if (l_connected) { mi_login.setEnabled(false); mi_logout.setEnabled(true); } else { mi_login.setEnabled(true); mi_logout.setEnabled(false); } } boolean isConnected() { return(l_connected); } All this does is toggle the connected state, and enables/disables menu items accordingly. I really, really don't like this design. === Gregory Woodhouse [EMAIL PROTECTED] Nothing is as powerful than an idea whose time has come. -- Victor Hugo On Jul 12, 2005, at 5:49 AM, Kevin Toppenberg wrote: I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1; p.add(password, c); setSize(300,200); c.weightx = 0.0; c.gridx = 0; c.gridy = 2; p.add(l_loginButton, c); c.gridx = 1; c.gridy = 2; c.weightx = 0.0; c.fill= GridBagConstraints.NONE; p.add(l_cancelButton, c); } protected void signIn() { l_application.setConnected(true); }
Re: [Hardhats-members] Data dictionary question...
I know that OO programming tends to encourage encapsulation, interfaces, and lego-block style programming. It makes it easier to switch and swap code modules. Kevin --- James Gray [EMAIL PROTECTED] wrote: I should have been more clear in my question. I am more interested in what you mean by the terms tight coupling and poor cohesion. I am aware of most of these specific problems in Vista (except for the the Lab one). I am becoming more and more aware of the tangled mess in some of the RPC calls in the OR* namespace. I assume that amounts to tight coupling. I doubt I would know what poor or good cohesion was when I saw it. I do know when the code is hard to read. Jim Gray - Original Message - From: Gregory Woodhouse [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Tuesday, July 12, 2005 11:54 AM Subject: Re: [Hardhats-members] Data dictionary question... It is certainly true that the infrastructure packages (Kernel, Fileman, etc.) do a good job of reducing the degree of coupling in Vista (part of its genius, IMO) but pick your favorite application. How easy it to rework it to use a different approach? How many Vista applications still use HL7 1.5 (notably Lab) because it's not practical to move over to 1.6? Why are people so interested in using Imaging to store scanned documents (something having absolutely nothing to do with medical imagining)? Why has it taken so much effort to figure out how to add new patients to a Vista system when it is not being used in a VA setting? Why is it so hard to adapt IB/ AR to the needs of non-VA users of Vista? Why is re-indexing file 2 such a case of shoot self in foot? Why did identifying and resolving duplicates in this file require such a herculean effort? === Gregory Woodhouse [EMAIL PROTECTED] Without the requirement of mathematical aesthetics a great many discoveries would not have been made. -- Albert Einstein On Jul 12, 2005, at 9:16 AM, James Gray wrote: As an old Mumpster who did all of his programming in languages other than Mumps before the advent of OO and as a result has tried to understand OO without knowing anything about C++, Java, etc. I miss what is being said. I would like to know what you mean by tight coupling and poor cohesion we see in the Vista code base. Jim Gray --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
You know, Greg, it may be just as hopeless getting us docs on board with this ideal computer professional behavior as it is getting doctors in the US military to act like line officers. Sometimes it is just easier to give up! However, I admire that you are at least trying to straighten us up! On Tuesday 12 July 2005 04:44 pm, Kevin Toppenberg wrote: Isn't if funny how we like things to not just to do the job, but to also be beautiful? If your code gets the job done, then its OK with me.. :-) Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Perhaps the worst thing is that back in the main Triton class, I have code like this. void setConnected(boolean isConnected) { l_connected = isConnected; if (l_connected) { mi_login.setEnabled(false); mi_logout.setEnabled(true); } else { mi_login.setEnabled(true); mi_logout.setEnabled(false); } } boolean isConnected() { return(l_connected); } All this does is toggle the connected state, and enables/disables menu items accordingly. I really, really don't like this design. === Gregory Woodhouse [EMAIL PROTECTED] Nothing is as powerful than an idea whose time has come. -- Victor Hugo On Jul 12, 2005, at 5:49 AM, Kevin Toppenberg wrote: I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1; p.add(password, c); setSize(300,200); c.weightx = 0.0;
Re: [Hardhats-members] Data dictionary question...
I don't think it's just an issue of being beautiful.At least in my experience, when something has seemed disquieting, either because it is not aesthetically pleasing or because it looks awkward or just doesn't feel right, that's been a good indication that there really is something wrong. I've learned to back off and not just forge ahead with something I know is wrong. Pursuing a solution that I subconsciously know is not the right one has bitten me in the past, even if I thought I might be able to save time with the course I was taking. === Gregory Woodhouse [EMAIL PROTECTED] The most profound technologies are those that disappear. --Mark Weiser On Jul 12, 2005, at 1:44 PM, Kevin Toppenberg wrote: Isn't if funny how we like things to not just to do the job, but to also be beautiful? If your code gets the job done, then its OK with me.. :-) Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Nancy: The task isnt hopeless but it also isnt trying to make docs (healthcare practitoners of all types) into information systems engineers (you are doing far better than I as a clinical laboratorian, for example) but rather sufficiently oriented to engage in productive dialog with such engineers. The key practitioner contribution lies in the conceptual content and how it is used in cognitive processing and how to describe this to their counterpart engineers; the reverse process involves getting information systems engineers in biomedical health informatics sufficiently aware to the background biomedical conceptual matrix that they know how to engineer (define,design, code, test,validate) systems that do what practitioners need. We've got some pretty talented participants in hardhats, WV and the VA and their associated suppliers. Historically the M community (with example by Octo Barnett to begin it all) has been an unusually innovative and collaborative bunch whose real story is yet to be told but just keep learning all you can and pushing to do the things we've all set out to contribute to and dont try to turn everytone into a comprehensive genius. We'll have a lot of fun and produce more than others can imagine and we can take tim out to celebrate one of these days! But dont Give UP! On Tue, 12 Jul 2005, Nancy Anthracite wrote: You know, Greg, it may be just as hopeless getting us docs on board with this ideal computer professional behavior as it is getting doctors in the US military to act like line officers. Sometimes it is just easier to give up! However, I admire that you are at least trying to straighten us up! On Tuesday 12 July 2005 04:44 pm, Kevin Toppenberg wrote: Isn't if funny how we like things to not just to do the job, but to also be beautiful? If your code gets the job done, then its OK with me.. :-) Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Perhaps the worst thing is that back in the main Triton class, I have code like this. void setConnected(boolean isConnected) { l_connected = isConnected; if (l_connected) { mi_login.setEnabled(false); mi_logout.setEnabled(true); } else { mi_login.setEnabled(true); mi_logout.setEnabled(false); } } boolean isConnected() { return(l_connected); } All this does is toggle the connected state, and enables/disables menu items accordingly. I really, really don't like this design. === Gregory Woodhouse [EMAIL PROTECTED] Nothing is as powerful than an idea whose time has come. -- Victor Hugo On Jul 12, 2005, at 5:49 AM, Kevin Toppenberg wrote: I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new
Re: [Hardhats-members] Data dictionary question...
On Tue, 2005-07-12 at 17:29, Gregory Woodhouse wrote: Yes, but if you think about object oriented programming as just being about encapsulation, then I think you've missed the point to some extent. I like to think about it as programming in space rather than programming in time. Another way of looking at it is that it isn't just about decentralization of function (encapsulation) but decentralization of responsibility. It's not just a matter of creating components that know how to do a particular job, but of creating components who only need be concerned about doing that one job. Rather poetic and also all true of structured programming. (except for the programming in space part which I'll be gracious enough to just ignor :) ) --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I can't take credit for it, though. Though Meyer talks about design by contract, that's not quite the same thing. This particular approach to objects something I encountered in Design Patterns Explained by Alan Shalloway and James R. Trott, an excellent, thought provoking book. I don't think I entirely agree with you when it comes to structured programming (or maybe I do?) Certainly, this is a good guiding principle, but you end up building knowledge of the larger context into parts of the program that you would rather not depend on this kind of thing. For example, I wrote a function to recursively traverse a file entry, visiting each field and subfield. the first parameter was the file number and the second the field number. For a file entry that's enough, butt when you descend into subfiles you have to worry about *which* subentry you are processing, so I added a third parameter that would only be used in recursive calls and never used by the (outside) caller. Or, to use a more traditional example, think of The Towers of Hanoi. Conceptually, a recursive solution is all but trivial, but once you've moved one or more disks to the destination peg, your program has to pretend they are not there and solve the smaller subproblem. Unfortunately, your program doesn't only have to know it's solving the Towers of Hanoi puzzle, but it has to know that at each stage, certain disks have to be ignored. === Gregory Woodhouse [EMAIL PROTECTED] Before one gets the right answer, one must ask the right question. -- S. Barry Cooper On Jul 12, 2005, at 3:22 PM, Ruben Safir wrote: On Tue, 2005-07-12 at 17:29, Gregory Woodhouse wrote: Yes, but if you think about object oriented programming as just being about encapsulation, then I think you've missed the point to some extent. I like to think about it as programming in space rather than programming in time. Another way of looking at it is that it isn't just about decentralization of function (encapsulation) but decentralization of responsibility. It's not just a matter of creating components that know how to do a particular job, but of creating components who only need be concerned about doing that one job. Rather poetic and also all true of structured programming. (except for the programming in space part which I'll be gracious enough to just ignor :) ) --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Well, Gregory, many folks miss the point about OOP. There is a simple and not too abstract characteristic of OOP that distinguishes it from classical programming. The rest of the putative differences between the two can be recognized as differences in terminology--often just nomenclature, much of which serves only the purpose of creating a justifying rationale for OOP. What follows is a highly restricted explanation edited to make the text here reasonable for an email discussion. Consider a master program, one that is not invoked by any other process. That master program can invoke one, or many, other programs as the program developer chooses. In classical programming, when the programmer inserts a phrase that invokes another program, that is a deterministic construct. The programmer knows (or, at least 'should know') as the code is written exactly what program will be executed when that phrase is used to control the process. The sole distinction in object oriented programming is the possibility that that same phrase that invokes another program is non-deterministic. There is always the 'possibility' that the program that is ultimately invoked may be a program about which the programmer has little or no knowledge. Even the nomenclature used by the programmer in the master program to declare the invoked program may not be that which is used to identify the program that is ultimately executed. In classical programming, when the master program invokes another program, the 'message' path between the master program and the invoked program has a length of ZERO. One example: the invoked program may actually be embedded into the master program by the compilation process, which certainly qualifies as a message path of length zero. In OOP, though this may not usually occur in practice today, the message path length between the master program and the ultimately executed subordinate program MAY be longer than zero length. Moreover, the message path length and ramifications may differ from one invocation of the same named process to the next. It is the fact that OOP allows the invocation message path length to be greater than zero which given OOP the great power and scope of effect that is at the heart of all else that is thought to be fundamental to OOP. From this simple elaboration of program structure and functionality flows things like inheritance. Inheritance is merely a system of formalizations that describe how the message path is governed as to length and ramifications. If one restricts the message path length to 'zero' all the semantic and functional characteristics of OOP collapse, and you are back in the classical programming world. Note that 'encapsulation' is not a distinctive feature of OOP, although this organizational technique is given great emphasis in the context of OOP. Encapsulation was used (maybe even developed initially) by the ancient Egyptians to reduce the complexity of social systems to manageable subdivisions. Encapsulation in software engineering is just as feasible in classical programming with subprogram invocations being entirely deterministic and using a message path length of zero. There are many other issues raised in the context of OOP that are mistakenly presented as special to the domain of OOP, when they are much more general and have a life that precedes modern OOP. Regards, Richard. From: Gregory Woodhouse [EMAIL PROTECTED] Reply-To: hardhats-members@lists.sourceforge.net Date: Tue, 12 Jul 2005 14:29:34 -0700 To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... Yes, but if you think about object oriented programming as just being about encapsulation, then I think you've missed the point to some extent. I like to think about it as programming in space rather than programming in time. Another way of looking at it is that it isn't just about decentralization of function (encapsulation) but decentralization of responsibility. It's not just a matter of creating components that know how to do a particular job, but of creating components who only need be concerned about doing that one job. === Gregory Woodhouse [EMAIL PROTECTED] ... . --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
HmmI'm going to have to respond to this in more detail later (after I've had more of a chance to digest it). It is intriguing, though, because I tend to think of nondeterminism as providing a theoretical basis for analyzing recursion. But you will recall that I compared OOP to programming space rather than time (the idea being that a problem is solved by building a network of communicating objects rather then creating a set of procedural rules of the form do this, and then this, and if some condition holds, this, etc.) But sorting provides a particularly simple case in which we see this same dynamic. There are well known recursive algorithms like quicksort, but happens if we unwind the recursion? Obviously, we end up with an explicit data structure that would otherwise be implicit in the call stack. To push this a bit further, the essence of data structures (like balanced trees, say) used in nonrecursive sorting algorithms is *locality*. The structure is not something that must be described globally, but the basic organizational rule involves just a node and some of its nearest neighbors. I'm struggling to come up with a good theoretical model here, but it seems to me that the principles of coupling and cohesion that I've been discussing are just locality in disguise. === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 12, 2005, at 6:41 PM, Richard G. DAVIS wrote: Well, Gregory, many folks miss the point about OOP. There is a simple and not too abstract characteristic of OOP that distinguishes it from classical programming. The rest of the putative differences between the two can be recognized as differences in terminology--often just nomenclature, much of which serves only the purpose of creating a justifying rationale for OOP. What follows is a highly restricted explanation edited to make the text here reasonable for an email discussion. Consider a master program, one that is not invoked by any other process. That master program can invoke one, or many, other programs as the program developer chooses. In classical programming, when the programmer inserts a phrase that invokes another program, that is a deterministic construct. The programmer knows (or, at least 'should know') as the code is written exactly what program will be executed when that phrase is used to control the process. The sole distinction in object oriented programming is the possibility that that same phrase that invokes another program is non- deterministic. There is always the 'possibility' that the program that is ultimately invoked may be a program about which the programmer has little or no knowledge. Even the nomenclature used by the programmer in the master program to declare the invoked program may not be that which is used to identify the program that is ultimately executed. In classical programming, when the master program invokes another program, the 'message' path between the master program and the invoked program has a length of ZERO. One example: the invoked program may actually be embedded into the master program by the compilation process, which certainly qualifies as a message path of length zero. In OOP, though this may not usually occur in practice today, the message path length between the master program and the ultimately executed subordinate program MAY be longer than zero length. Moreover, the message path length and ramifications may differ from one invocation of the same named process to the next. It is the fact that OOP allows the invocation message path length to be greater than zero which given OOP the great power and scope of effect that is at the heart of all else that is thought to be fundamental to OOP. From this simple elaboration of program structure and functionality flows things like inheritance. Inheritance is merely a system of formalizations that describe how the message path is governed as to length and ramifications. If one restricts the message path length to 'zero' all the semantic and functional characteristics of OOP collapse, and you are back in the classical programming world. Note that 'encapsulation' is not a distinctive feature of OOP, although this organizational technique is given great emphasis in the context of OOP. Encapsulation was used (maybe even developed initially) by the ancient Egyptians to reduce the complexity of social systems to manageable subdivisions. Encapsulation in software engineering is just as feasible in classical programming with subprogram invocations being entirely deterministic and using a message path length of zero. There are many other issues raised in the context of OOP that are mistakenly presented as special to the domain of OOP, when they are much more general and have a life that precedes modern OOP. Regards, Richard.
Re: [Hardhats-members] Data dictionary question...
If I may be so presumptious as to paraphrase Dr. Davis' explanation here: When you create an object, you do not know in advance what messages may be sent to that object or when. the object only responds to the messages it receives. Think of an ant colony on the move. Each ant knows how to respond when its neighbor moves to the right or the left, but whatever intelligence there may be in an ant colony doesn't reside in the individual ants but, rather, in how they interact as a group. It's easier to build an ant, if you will, than it is to build an ant colony. Similarly, individual object or classes can be much more manageable than a single monolithic application. === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 12, 2005, at 6:41 PM, Richard G. DAVIS wrote: The sole distinction in object oriented programming is the possibility that that same phrase that invokes another program is non- deterministic. There is always the 'possibility' that the program that is ultimately invoked may be a program about which the programmer has little or no knowledge. Even the nomenclature used by the programmer in the master program to declare the invoked program may not be that which is used to identify the program that is ultimately executed. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... It is certainly true that the infrastructure packages (Kernel, Fileman, etc.) do a good job of reducing the degree of coupling in Vista (part of its genius, IMO) but pick your favorite application. How easy it to rework it to use a different approach? How many Vista applications still use HL7 1.5 (notably Lab) because it's not practical to move over to 1.6? Why are people so interested in using Imaging to store scanned documents (something having absolutely nothing to do with medical imagining)? Why has it taken so much effort to figure out how to add new patients to a Vista system when it is not being used in a VA setting? Why is it so hard to adapt IB/ AR to the needs of non-VA users of Vista? Why is re-indexing file 2 such a case of shoot self in foot? Why did identifying and resolving duplicates in this file require such a herculean effort? === Gregory Woodhouse [EMAIL PROTECTED] --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
RE: [Hardhats-members] Data dictionary question...
This speaks volumes. I can get what I wannt from FileMan, though it's a greenscreen telnet program. The general public think it is useless if it's not MADISON AVENUE FANCY GLOSSY. New York and Hollywood have long tentacles. thurman -Original Message- From: [EMAIL PROTECTED] [mailto:hardhats- [EMAIL PROTECTED] On Behalf Of Kevin Toppenberg Sent: Tuesday, July 12, 2005 2:44 PM To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... Isn't if funny how we like things to not just to do the job, but to also be beautiful? If your code gets the job done, then its OK with me.. :-) Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Perhaps the worst thing is that back in the main Triton class, I have code like this. void setConnected(boolean isConnected) { l_connected = isConnected; if (l_connected) { mi_login.setEnabled(false); mi_logout.setEnabled(true); } else { mi_login.setEnabled(true); mi_logout.setEnabled(false); } } boolean isConnected() { return(l_connected); } All this does is toggle the connected state, and enables/disables menu items accordingly. I really, really don't like this design. === Gregory Woodhouse [EMAIL PROTECTED] Nothing is as powerful than an idea whose time has come. -- Victor Hugo On Jul 12, 2005, at 5:49 AM, Kevin Toppenberg wrote: I've done very little with java, so let me feel my way here. I assume that function public LoginDialog is the constructor for class LoginDialog. I see Frame passed as a parameter to the constructor, but I don't see that you use it. What is it doing? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1
Re: [Hardhats-members] Data dictionary question...
Well, the paraphrase is apt, but misses my fundamental point. You raise an important behavior of complex systems that leads into the subject of emergent properties--a matter for beyond the scope of this discussion. The master program and the program developer do not know anything about the 'message' process. That process is fully, completely hidden--encapsulated. Thus, reading the Master Program phrase that invoked another program does NOT tell the reader what will happen when the invocation is acted upon by some final recipient program. The invocation in OOP is truly indeterminate, or at lease may be so. That is what makes it hard for me to discuss this with others. At best, the reader of an OOP Master program may develop a belief about what may happen, an conjecture at best. Consider an example--the effects of inheritance can not be known by the reader of a Master Program in an OOP system based on the invoking phrase--the call is indeterminate. Some notes: Message paths can ramify, they are not restricted to single thread. The message process is where inheritance rules are implemented. Some message processing may be driven by things like: which hardware capable of acting on the message is least busy? Because the message path can ramify, I prefer to speak about the message switch mechanism that mediates between Master Programs and invoked programs. The term message agent comes into use here with a broader semantic that message switch. Regards, Richard. From: Gregory Woodhouse [EMAIL PROTECTED] Reply-To: hardhats-members@lists.sourceforge.net Date: Tue, 12 Jul 2005 19:25:00 -0700 To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... If I may be so presumptious as to paraphrase Dr. Davis' explanation here: When you create an object, you do not know in advance what messages may be sent to that object or when. the object only responds to the messages it receives. Think of an ant colony on the move. Each ant knows how to respond when its neighbor moves to the right or the left, but whatever intelligence there may be in an ant colony doesn't reside in the individual ants but, rather, in how they interact as a group. It's easier to build an ant, if you will, than it is to build an ant colony. Similarly, individual object or classes can be much more manageable than a single monolithic application. === Gregory Woodhouse [EMAIL PROTECTED] ... . --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I'm not entirely certain that I missed your point here. A good example of a non-deterministic program is Select the element of array A having the greatest value But that's cheating! Or is it? I may not know which array element is the largest, but of all the actions involving selection of a single array element (at least) one will involve choosing the largest one, so this is a perfectly good non-deterministic program (more than one array element can have the same value). Of course, a real program might be Get the value of the first element and store it as X Get the largest element of the array obtained by removing the first element and store it as Y If X Y return X, otherwise return Y That's a real (deterministic) algorithm. The point here, of course, is that the non-determinism masks a recursive solution. If I were going to implement the first solution, I might write a function get(i) that gets the value of the ith element of A, then my program would be something like big = get(magic()) where magic() just happens to pick the right index for me (I don't know how). To draw a geometric analogy, get() is local and magic() is global. I may not know about the global topology of the problem, but perhaps I can put together pieces involving only local knowledge that somehow fit together into a global solution. But, of course, my pieces don't know how they will be used. More precisely *I* have to create pieces that may be used in unpredictable ways, knowing full well that I can't say in advance what will happen to them. But is this non-determinism? A good question. What I've attempted to do here is suggest that the more theoretical notion of non- determinism does actually fit well with the more practical notion of unpredictability. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 12, 2005, at 7:54 PM, Richard G. DAVIS wrote: Well, the paraphrase is apt, but misses my fundamental point. You raise an important behavior of complex systems that leads into the subject of emergent properties--a matter for beyond the scope of this discussion. The master program and the program developer do not know anything about the 'message' process. That process is fully, completely hidden--encapsulated. Thus, reading the Master Program phrase that invoked another program does NOT tell the reader what will happen when the invocation is acted upon by some final recipient program. The invocation in OOP is truly indeterminate, or at lease may be so. That is what makes it hard for me to discuss this with others. At best, the reader of an OOP Master program may develop a belief about what may happen, an conjecture at best. Consider an example--the effects of inheritance can not be known by the reader of a Master Program in an OOP system based on the invoking phrase--the call is indeterminate. Some notes: Message paths can ramify, they are not restricted to single thread. The message process is where inheritance rules are implemented. Some message processing may be driven by things like: which hardware capable of acting on the message is least busy? Because the message path can ramify, I prefer to speak about the message switch mechanism that mediates between Master Programs and invoked programs. The term message agent comes into use here with a broader semantic that message switch. Regards, Richard. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
This is a good example of lack of reusability (or better, poor encapsulation) at the design, rather than the implementation, level. I completely agree that when our design proves a poor match for an unanticipated usage scenario, we are helpless to address it (aside from ugly kludges or extensive rework). Design patterns represent one attempt to deal with this problem, but it is embarrassingly difficult to even come up with a simple definition of pattern. In fact, in their seminal work Gamma et al. (the Gang of Four) basically presented a catalog of patterns (after some preliminary discussion) and in effect said: They're things like these. === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 12, 2005, at 7:32 PM, Richard G. DAVIS wrote: The example I usually choose to illustrate the issue is the VistA PATIENT file. Consider the LABORATORY system, and what happens when the Infectious Disease personnel bring water samples to microbiology taken from the ice machines in the food service areas. When asked for the patient to be used for the transaction, what does VistA do with ice machine data. Or, consider the Research Service personnel who bring blood samples from dogs and cats. Again, VistA is helpless to deal with these instances of samples that lie OUTSIDE the domain of what is implemented in the semantics of the PATIENT file #2. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I believe this is all fundamentally the result of constrained problem definition, more important, of constrained problem domain. The example I usually choose to illustrate the issue is the VistA PATIENT file. Consider the LABORATORY system, and what happens when the Infectious Disease personnel bring water samples to microbiology taken from the ice machines in the food service areas. When asked for the patient to be used for the transaction, what does VistA do with ice machine data. Or, consider the Research Service personnel who bring blood samples from dogs and cats. Again, VistA is helpless to deal with these instances of samples that lie OUTSIDE the domain of what is implemented in the semantics of the PATIENT file #2. Actually, VistA isn't helpless in those situations. The VistA lab module doesn't depend on lab tests being done on the PATIENT File. I'm not sure why you thought it does. The LAB DATA file (#63) has a field named PARENT FILE (Field #.02) and a field named NAME (Field #.03). Any entry in any file in the system could in theory (though some concepts are crazy) be the source of a lab test. That is why the LRDFN (Field #.01) is just a number, and why the PATIENT file has an explicit pointer to the LRDFN rather than just being DINUMed to the PATIENT File. The Lab developers already thought of all those cases of needing to do lab tests, and designed the LAB DATA file to handle them. David The first order question preliminary to developing a file, ala FileMan, should be answered, understood and answered, before any further work is done in creating that data structure. Specifically, what is this a file of? (poor english intended...) The fact is that the notion of a PATIENT file was so widespread and commonly held, that no effort was made to become obsessive about what it meant to say the PATIENT file. If you raised the issues of dogs, cats, ice machines and other such entities, the groans, eyes averted skyward, and outcries of pain quickly quenched any motivation to pursue the issue, and to surely avoid raising such domain of files issues in the future. For those familiar with DHCP history, consider the mess surrounding the PERSON/NEW PERSON/EMPLOYEE/PROVIDER/PHYSICIAN/ files constellation. NEW PERSON file Doh! It is the acceptance of 'ad hoc' file definitions, and other associated semantics, and the willingness to ignore the importance of 'a priori' due diligence for database semantics that lurks in the background of all the examples you have presented Gregory. Even now, I suspect that this tendency is still very much present as the DVA tries to roll over its Healthcare IT system to the next generation. Regards, Richard. P. S. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
subcommittee left that meeting and was never seen in the MDC again to my knowledge. BUT. I believe that it is fundamentally an issue of the original MUMPS language framers not asserting due diligence to clarify the problem domain of the control of MUMPS process environments. We would have started out with some form of the NEW command, the pesky KILL command would have never troubled us. Why all those things happened? ...because human thought is often overwhelmed by local context. ...sigh R. D. From: Gregory Woodhouse [EMAIL PROTECTED] Reply-To: hardhats-members@lists.sourceforge.net Date: Tue, 12 Jul 2005 10:54:55 -0700 To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... It is certainly true that the infrastructure packages (Kernel, Fileman, etc.) do a good job of reducing the degree of coupling in Vista (part of its genius, IMO) but pick your favorite application. How easy it to rework it to use a different approach? How many Vista applications still use HL7 1.5 (notably Lab) because it's not practical to move over to 1.6? Why are people so interested in using Imaging to store scanned documents (something having absolutely nothing to do with medical imagining)? Why has it taken so much effort to figure out how to add new patients to a Vista system when it is not being used in a VA setting? Why is it so hard to adapt IB/ AR to the needs of non-VA users of Vista? Why is re-indexing file 2 such a case of shoot self in foot? Why did identifying and resolving duplicates in this file require such a herculean effort? === Gregory Woodhouse [EMAIL PROTECTED] --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Kevin, Here's are some Database Server/FM calls that will return all fields in a file, and subfile: S FILE=20101 S MSG= S FDA= S IENS=** S FLAGS= D GETS^DIQ(1,FILE,IENS,FLAGS,FDA,MSG) To get just the top-level fields from the file: S FILE=20101 S MSG= S FDA= S IENS=* ;just change this from 2 asterisks to 1 asterisk S FLAGS= D GETS^DIQ(1,FILE,IENS,FLAGS,FDA,MSG) HTH, Bob --- Robert H. Dobbins IT Administrator III -- Computer Operations Univ. of Tenn. -- College of Veterinary Medicine 2407 River Drive, Rm. A108 Knoxville, TN 37996-4500 (865) 974-5593 [EMAIL PROTECTED] Knowledge, Compassion, Discovery ---
Re: [Hardhats-members] Data dictionary question...
Actually, in GETS^DIQ, the first argument is the file and the second is the IENS. If you set the FIELD argument to "*", that means you want all the fields in a file, and if you set it to "**", it means you want all fields in the file, including all fields in its subfiles, etc. The IENS is kind of like a URL for a file entry, giving you a string of internal entry numbers (hence the name) you must follow to get to the (sub)entry (remembering that subfiles may be nested arbitrarily). The call looks like thisD GETS^DIQ(file,iens,fields,flags,target_root,message_root)(of which the first 3 arguments are required). ===Gregory Woodhouse[EMAIL PROTECTED]"The policy of being too cautious isthe greatest risk of all."--Jawaharlal Nehru On Jul 11, 2005, at 6:26 AM, Robert H Dobbins/HOSPOPS/VET/UTIA wrote:Kevin, Here's are some Database Server/FM calls that will return all fields in a file, and subfile: S FILE=20101 S MSG="" S FDA="" S IENS="**" S FLAGS="" D GETS^DIQ(1,FILE,IENS,FLAGS,"FDA","MSG") To get just the top-level fields from the file: S FILE=20101 S MSG="" S FDA="" S IENS="*" ;just change this from 2 asterisks to 1 asterisk S FLAGS="" D GETS^DIQ(1,FILE,IENS,FLAGS,"FDA","MSG") HTH, Bob --- Robert H. Dobbins IT Administrator III -- Computer Operations Univ. of Tenn. -- College of Veterinary Medicine 2407 River Drive, Rm. A108 Knoxville, TN 37996-4500 (865) 974-5593 [EMAIL PROTECTED] "Knowledge, Compassion, Discovery" ---
Re: [Hardhats-members] Data dictionary question...
Well I am glad to see that this need has been filled with a proper API. I does seem a bit suspicious that it took over a week for someone to come up with the appropriate function (thanks Bob). The names in the API are often less than helpful. Thanks everyone Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Actually, in GETS^DIQ, the first argument is the file and the second is the IENS. If you set the FIELD argument to *, that means you want all the fields in a file, and if you set it to **, it means you want all fields in the file, including all fields in its subfiles, etc. The IENS is kind of like a URL for a file entry, giving you a string of internal entry numbers (hence the name) you must follow to get to the (sub)entry (remembering that subfiles may be nested arbitrarily). The call looks like this D GETS^DIQ(file,iens,fields,flags,target_root,message_root) (of which the first 3 arguments are required). === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 11, 2005, at 6:26 AM, Robert H Dobbins/HOSPOPS/VET/UTIA wrote: Kevin, Here's are some Database Server/FM calls that will return all fields in a file, and subfile: S FILE=20101 S MSG= S FDA= S IENS=** S FLAGS= D GETS^DIQ(1,FILE,IENS,FLAGS,FDA,MSG) To get just the top-level fields from the file: S FILE=20101 S MSG= S FDA= S IENS=* ;just change this from 2 asterisks to 1 asterisk S FLAGS= D GETS^DIQ(1,FILE,IENS,FLAGS,FDA,MSG) HTH, Bob --- Robert H. Dobbins IT Administrator III -- Computer Operations Univ. of Tenn. -- College of Veterinary Medicine 2407 River Drive, Rm. A108 Knoxville, TN 37996-4500 (865) 974-5593 [EMAIL PROTECTED] Knowledge, Compassion, Discovery --- __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 7:48 AM, Kevin Toppenberg wrote: Well I am glad to see that this need has been filled with a proper API. I does seem a bit suspicious that it took over a week for someone to come up with the appropriate function (thanks Bob). The names in the API are often less than helpful. Thanks everyone Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I know I'm being hopelessly pedantic here (but maybe there is ultimately some point to it). If you take the point of view that files are classes and file entries are objects (an excellent way to think about Fileman, IMO), the difference becomes clear: GETS^DIQ gives you fairly comprehensive information about an object (even if you only know the name of its class), but you've been asking for a way to get information about a class, not an object of that class. Introspection is involved in each case, but in one case it is explicit, but in the other it is implicit in the objects ability to describe itself. This basically comes down to the design principle (which I think is a good one) that objects are things with responsibilities and not merely behavior and data bundled up on a single package. === Gregory Woodhouse [EMAIL PROTECTED] The most profound technologies are those that disappear. --Mark Weiser On Jul 11, 2005, at 7:58 AM, Gregory Woodhouse wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 7:48 AM, Kevin Toppenberg wrote: Well I am glad to see that this need has been filled with a proper API. I does seem a bit suspicious that it took over a week for someone to come up with the appropriate function (thanks Bob). The names in the API are often less than helpful. Thanks everyone Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members Sell on Yahoo! Auctions no fees. Bid on great items. http://auctions.yahoo.com/ --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Speaking of classes, have you given thought to making globals/arrays act like objects by putting code into them, and merging to instantiate a new object? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: I know I'm being hopelessly pedantic here (but maybe there is ultimately some point to it). If you take the point of view that files are classes and file entries are objects (an excellent way to think about Fileman, IMO), the difference becomes clear: GETS^DIQ gives you fairly comprehensive information about an object (even if you only know the name of its class), but you've been asking for a way to get information about a class, not an object of that class. Introspection is involved in each case, but in one case it is explicit, but in the other it is implicit in the objects ability to describe itself. This basically comes down to the design principle (which I think is a good one) that objects are things with responsibilities and not merely behavior and data bundled up on a single package. === Gregory Woodhouse [EMAIL PROTECTED] The most profound technologies are those that disappear. --Mark Weiser On Jul 11, 2005, at 7:58 AM, Gregory Woodhouse wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Discover Yahoo! Have fun online with music videos, cool games, IM and more. Check it out! http://discover.yahoo.com/online.html --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 9:13 AM Subject: Re: [Hardhats-members] Data dictionary question... A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 7:48 AM, Kevin Toppenberg wrote: Well I am glad to see that this need has been filled with a proper API. I does seem a bit suspicious that it took over a week for someone to come up with the appropriate function (thanks Bob). The names in the API are often less than helpful. Thanks everyone Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members Sell on Yahoo! Auctions - no fees. Bid on great items. http://auctions.yahoo.com/ --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
But you can use the traditional Fileman calls on the DD. Do the silent calls not work on the DD? Jim Gray - Original Message - From: Gregory Woodhouse [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 3:39 PM Subject: Re: [Hardhats-members] Data dictionary question... But file 1 (the FILE file) doesn't store a list of fields, so it is of no use in getting a list of fields. Now, if the DD itself were really a file, then you'd be in business. === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 11, 2005, at 10:26 AM, James Gray wrote: I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
So File 1 has a standard fileman structure? I thought I had been told that it defined the file structures, thus one couldn't use Fileman on itself so to speak. I'll have to experiment with this. Thanks for the tip. Kevin --- James Gray [EMAIL PROTECTED] wrote: I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 9:13 AM Subject: Re: [Hardhats-members] Data dictionary question... A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 7:48 AM, Kevin Toppenberg wrote: Well I am glad to see that this need has been filled with a proper API. I does seem a bit suspicious that it took over a week for someone to come up with the appropriate function (thanks Bob). The names in the API are often less than helpful. Thanks everyone Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members Sell on Yahoo! Auctions - no fees. Bid on great items. http://auctions.yahoo.com/ --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do you Yahoo!? Yahoo! Mail - Helps protect you from nasty viruses. http://promotions.yahoo.com/new_mail --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology
Re: [Hardhats-members] Data dictionary question...
To my knowledge there is no way to do what Kevin is asking by doing it using standard FileMan APIs only. There are standard Fileman APIs to get you: 1. All the attributes for a field if you know the field number and file number. 2. All the attributes for a file number But I could not get any of the Fileman standard APIs to give me a list of field numbers and field names when all you have is a file number. I would like to see that code posted here if it can be accomplished. I am not counting those screen scrape approach, i.e.., do a List File Attributes to a file and then read that file back in a scrape out the field numbers and names. - Original Message - From: James Gray [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 1:26 PM Subject: Re: [Hardhats-members] Data dictionary question... I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 9:13 AM Subject: Re: [Hardhats-members] Data dictionary question... A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
File #1 (ie: root : ^DIC( does have a standard fileman structure. In fact, the data dictionary for each file also has a standard fileman structure: for patient file the root ^DD(2, for NEW PERSON file ^DD(200, etc. accessible with classic calls such as D ^DIC or D ^DIE for example the captioned output of a field's definition is available using EN^DIQ (but it is rather ugly) example of this using global root:=^DD(200, and field number .01 would be like a File with entry number .01 MUMPS S DIC=^DD(200,,DA=.01 D EN^DIQ Running this code shows you the self-referential field names used in the Data Dictionary of the data dictionary itself. Self-reflective data structures are really cool, in my opinion. David So File 1 has a standard fileman structure? I thought I had been told that it defined the file structures, thus one couldn't use Fileman on itself so to speak. I'll have to experiment with this. Thanks for the tip. Kevin --- James Gray [EMAIL PROTECTED] wrote: I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 9:13 AM Subject: Re: [Hardhats-members] Data dictionary question... A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 7:48 AM, Kevin Toppenberg wrote: Well I am glad to see that this need has been filled with a proper API. I does seem a bit suspicious that it took over a week for someone to come up with the appropriate function (thanks Bob). The names in the API are often less than helpful. Thanks everyone Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members Sell on Yahoo! Auctions - no fees. Bid on great items. http://auctions.yahoo.com/ --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
The DD as a whole is not structured as a file, so that each entry would be organized as the definition for that file. (because there isn't a ^DD(0) node, nor are there any cross references on the whole DD, but there are 0-nodes for each file.). But the root ^DD( followed by the file (or sub-file) number does have the form of a file itself. So use of a $ORDER For loop as an iterator could easily do most of what you want... David But file 1 (the FILE file) doesn't store a list of fields, so it is of no use in getting a list of fields. Now, if the DD itself were really a file, then you'd be in business. === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 11, 2005, at 10:26 AM, James Gray wrote: I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
The only problem I had with that kind of approach, when I played with it years ago, was that there isn't an easy way to know what temporary object get created by subroutine calls. ie: you can do this MERGE @(RESULT=_$$ObjectCreating^Call(possible,arguments)) with ObjectCreating^Call being code that creates a new object on the fly as the result of the call. (perhaps using ^TMP($J, or something like that as a temporary storage location.) The problem is recognizing which ones are still in use and which ones need to be garbage collected. MUMPS indirection (ie: extremely late-binding) is very useful, but using it in a disciplined way is tricky at times. David Speaking of classes, have you given thought to making globals/arrays act like objects by putting code into them, and merging to instantiate a new object? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: I know I'm being hopelessly pedantic here (but maybe there is ultimately some point to it). If you take the point of view that files are classes and file entries are objects (an excellent way to think about Fileman, IMO), the difference becomes clear: GETS^DIQ gives you fairly comprehensive information about an object (even if you only know the name of its class), but you've been asking for a way to get information about a class, not an object of that class. Introspection is involved in each case, but in one case it is explicit, but in the other it is implicit in the objects ability to describe itself. This basically comes down to the design principle (which I think is a good one) that objects are things with responsibilities and not merely behavior and data bundled up on a single package. === Gregory Woodhouse [EMAIL PROTECTED] The most profound technologies are those that disappear. --Mark Weiser On Jul 11, 2005, at 7:58 AM, Gregory Woodhouse wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Discover Yahoo! Have fun online with music videos, cool games, IM and more. Check it out! http://discover.yahoo.com/online.html --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Well, as I have learned more about M and Fileman, I have found that it is often just easier to get the information yourself rather than going through the API's. I guess everyone else must be doing the same thing, or this API would have been written already. As per the code I posted before, the function to do this is only a few lines long. Kevin --- steven mcphelan [EMAIL PROTECTED] wrote: To my knowledge there is no way to do what Kevin is asking by doing it using standard FileMan APIs only. There are standard Fileman APIs to get you: 1. All the attributes for a field if you know the field number and file number. 2. All the attributes for a file number But I could not get any of the Fileman standard APIs to give me a list of field numbers and field names when all you have is a file number. I would like to see that code posted here if it can be accomplished. I am not counting those screen scrape approach, i.e.., do a List File Attributes to a file and then read that file back in a scrape out the field numbers and names. - Original Message - From: James Gray [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 1:26 PM Subject: Re: [Hardhats-members] Data dictionary question... I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 9:13 AM Subject: Re: [Hardhats-members] Data dictionary question... A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
When I've needed to do it, I have just written the few lines going through the B cross reference of the ^DD(Filenumber, root. It does keep one from dynamically creating fields on the fly, and makes the list of fields in a file static, I guess. Perhaps if we had an API call, we would be able to over-ride it and make dynamic fields etc David Well, as I have learned more about M and Fileman, I have found that it is often just easier to get the information yourself rather than going through the API's. I guess everyone else must be doing the same thing, or this API would have been written already. As per the code I posted before, the function to do this is only a few lines long. Kevin --- steven mcphelan [EMAIL PROTECTED] wrote: To my knowledge there is no way to do what Kevin is asking by doing it using standard FileMan APIs only. There are standard Fileman APIs to get you: 1. All the attributes for a field if you know the field number and file number. 2. All the attributes for a file number But I could not get any of the Fileman standard APIs to give me a list of field numbers and field names when all you have is a file number. I would like to see that code posted here if it can be accomplished. I am not counting those screen scrape approach, i.e.., do a List File Attributes to a file and then read that file back in a scrape out the field numbers and names. - Original Message - From: James Gray [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 1:26 PM Subject: Re: [Hardhats-members] Data dictionary question... I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 9:13 AM Subject: Re: [Hardhats-members] Data dictionary question... A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net
Re: [Hardhats-members] Data dictionary question...
I recall that there was time when there was serious talk about creating a meta-DD. I'm sorry it never happened. === Gregory Woodhouse [EMAIL PROTECTED] Before one gets the right answer, one must ask the right question. -- S. Barry Cooper On Jul 11, 2005, at 3:21 PM, [EMAIL PROTECTED] wrote: The DD as a whole is not structured as a file, so that each entry would be organized as the definition for that file. (because there isn't a ^DD(0) node, nor are there any cross references on the whole DD, but there are 0-nodes for each file.). But the root ^DD( followed by the file (or sub-file) number does have the form of a file itself. So use of a $ORDER For loop as an iterator could easily do most of what you want... David --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
I'm not entirely sure I understand your point here, but if you do intend to use array names as object references (which is what I generally do), and if you need a numeric object ID, then it seems reasonable to require that every object implement a getID() method. I'm not sure if non-persistent objects (any objects?) really need numeric IDs so long as the array references are well-defined and unique. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 3:26 PM, [EMAIL PROTECTED] wrote: The only problem I had with that kind of approach, when I played with it years ago, was that there isn't an easy way to know what temporary object get created by subroutine calls. ie: you can do this MERGE @(RESULT=_$$ObjectCreating^Call(possible,arguments)) with ObjectCreating^Call being code that creates a new object on the fly as the result of the call. (perhaps using ^TMP($J, or something like that as a temporary storage location.) The problem is recognizing which ones are still in use and which ones need to be garbage collected. MUMPS indirection (ie: extremely late-binding) is very useful, but using it in a disciplined way is tricky at times. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
It is unusual for applications to need to do this, just as it is somewhat unusual to need to get a list of columns in a table, only because people using the file in their code generally know its layout ahead of time. However, I definitely do consider this a gap in Fileman. === Gregory Woodhouse [EMAIL PROTECTED] And the end of all our exploring will be to arrive where we started And know the place for the first time -- T.S. Eliot On Jul 11, 2005, at 3:27 PM, Kevin Toppenberg wrote: Well, as I have learned more about M and Fileman, I have found that it is often just easier to get the information yourself rather than going through the API's. I guess everyone else must be doing the same thing, or this API would have been written already. As per the code I posted before, the function to do this is only a few lines long. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Speaking of discipline, its pretty clear that one can't tie the hands of the programmer. It's like Marty's analagy of the girlfriend and the motorcycle again. :-) But I don't see why garbage collection would be any more of an issue with variables acting as object than it would be with any other variable. A simple kill would take them all out. For those stored in ^TMP etc, if one set up an infrastructure that instantiated the objects for the programmer, then they could be put in locations that would be immediately obvious that they were no longer in use. A $J node would be a first thought. I'm sure you put quite a bit of thought into this before. I am just shooting from the hip. It was just a thought that was buzzing around my head. But to be honest, I find the benefits of an OO oriented language to be most helpful when I am either working with a graphic environment, or when using a library like Borland's VCL. I don't know if I really need OO in what I am doing now. Kevin --- [EMAIL PROTECTED] wrote: The only problem I had with that kind of approach, when I played with it years ago, was that there isn't an easy way to know what temporary object get created by subroutine calls. ie: you can do this MERGE @(RESULT=_$$ObjectCreating^Call(possible,arguments)) with ObjectCreating^Call being code that creates a new object on the fly as the result of the call. (perhaps using ^TMP($J, or something like that as a temporary storage location.) The problem is recognizing which ones are still in use and which ones need to be garbage collected. MUMPS indirection (ie: extremely late-binding) is very useful, but using it in a disciplined way is tricky at times. David Speaking of classes, have you given thought to making globals/arrays act like objects by putting code into them, and merging to instantiate a new object? Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: I know I'm being hopelessly pedantic here (but maybe there is ultimately some point to it). If you take the point of view that files are classes and file entries are objects (an excellent way to think about Fileman, IMO), the difference becomes clear: GETS^DIQ gives you fairly comprehensive information about an object (even if you only know the name of its class), but you've been asking for a way to get information about a class, not an object of that class. Introspection is involved in each case, but in one case it is explicit, but in the other it is implicit in the objects ability to describe itself. This basically comes down to the design principle (which I think is a good one) that objects are things with responsibilities and not merely behavior and data bundled up on a single package. === Gregory Woodhouse [EMAIL PROTECTED] The most profound technologies are those that disappear. --Mark Weiser On Jul 11, 2005, at 7:58 AM, Gregory Woodhouse wrote: Well, this is a little different from your stated requirement. Without knowing the fields in your file, you can use * or ** to get all the field values for a *file entry*. If you are serializing file entries using XML, that may be exactly what you want). But you asked for something else. You asked for a way to get a list of fields in a *file*. That's why it took so long. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Discover Yahoo! Have fun online with music videos, cool games, IM and more. Check it out! http://discover.yahoo.com/online.html --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!'
Re: [Hardhats-members] Data dictionary question...
Whoosh that one went way over my head! What are dynamic fields, and why would $ordering through ^DD create a problem of generating extra dynamic fields? Thanks Kevin --- [EMAIL PROTECTED] wrote: When I've needed to do it, I have just written the few lines going through the B cross reference of the ^DD(Filenumber, root. It does keep one from dynamically creating fields on the fly, and makes the list of fields in a file static, I guess. Perhaps if we had an API call, we would be able to over-ride it and make dynamic fields etc David Well, as I have learned more about M and Fileman, I have found that it is often just easier to get the information yourself rather than going through the API's. I guess everyone else must be doing the same thing, or this API would have been written already. As per the code I posted before, the function to do this is only a few lines long. Kevin --- steven mcphelan [EMAIL PROTECTED] wrote: To my knowledge there is no way to do what Kevin is asking by doing it using standard FileMan APIs only. There are standard Fileman APIs to get you: 1. All the attributes for a field if you know the field number and file number. 2. All the attributes for a file number But I could not get any of the Fileman standard APIs to give me a list of field numbers and field names when all you have is a file number. I would like to see that code posted here if it can be accomplished. I am not counting those screen scrape approach, i.e.., do a List File Attributes to a file and then read that file back in a scrape out the field numbers and names. - Original Message - From: James Gray [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 1:26 PM Subject: Re: [Hardhats-members] Data dictionary question... I think the issue is that you want to use a Fileman API on the file of files. File 1 is the file of files. I do not think that Fileman will care if the individual files have data in them. If the fields have been defined for the individual files that is what the API's can retrieve for you. When you are looking at file 1 then the individual file numbers are the IEN's of the individual records of the file of files. You can also use Fileman API's on the data dictionary which has been called File 0. However, you cannot 0 (zero) as the file number. You have to use the actual global root. I hope this makes sense. Jim Gray - Original Message - From: Kevin Toppenberg [EMAIL PROTECTED] To: hardhats-members@lists.sourceforge.net Sent: Monday, July 11, 2005 9:13 AM Subject: Re: [Hardhats-members] Data dictionary question... A list of fields from a file IS what I want. And this GETS^DIQ is a bit off target in that it gets actual values (meaning that there must be at least one record in the file file for it to work). But this would give a list of the fields in the resulting array. Actually, now that I think about it, I doubt that it will return the name of a field if there is no data in that field. So perhaps this function wouldn't work after. Perhaps there remains a need for another function in the API to list the names of fields in file. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More
Re: [Hardhats-members] Data dictionary question...
In Borland's VCL, every object that is created must supply an Owner parameter. Then, during creation, that owner is notified of the new object, and they add it to their list of objects they are responsible for. Then, whenever an object is deleted, its destructor makes sure to destroy all the objects that it is responsible for. This helps prevent lost memory allocations, though Borland also uses other methods as well to ensure appropriate garbage collection. I would think a similar system could be used for M objects. But the programmer would have to be sure to call the object's destructor rather than just killing it. Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: I'm not entirely sure I understand your point here, but if you do intend to use array names as object references (which is what I generally do), and if you need a numeric object ID, then it seems reasonable to require that every object implement a getID() method. I'm not sure if non-persistent objects (any objects?) really need numeric IDs so long as the array references are well-defined and unique. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 3:26 PM, [EMAIL PROTECTED] wrote: The only problem I had with that kind of approach, when I played with it years ago, was that there isn't an easy way to know what temporary object get created by subroutine calls. ie: you can do this MERGE @(RESULT=_$$ObjectCreating^Call(possible,arguments)) with ObjectCreating^Call being code that creates a new object on the fly as the result of the call. (perhaps using ^TMP($J, or something like that as a temporary storage location.) The problem is recognizing which ones are still in use and which ones need to be garbage collected. MUMPS indirection (ie: extremely late-binding) is very useful, but using it in a disciplined way is tricky at times. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
And of course, if Rune was already implemented, the object's destructor would already be called by the KILL command anyway, since it would be part of the contract of the object with the language layer. The problem with the owner idea is that you need to decide if you are managing content or address. If a new object is created by the MERGE command, then your Garbage collection is managing addresses (ie: names of global references etc.) If a MERGE results in just another location where the content is stored, then you need to keep track of the content changes. Anyway, the owner idea is useful enough to remember when I dabble in dynamic object manipulation again. Fascinating stuff, but mostly at right angles to typical VistA development. David In Borland's VCL, every object that is created must supply an Owner parameter. Then, during creation, that owner is notified of the new object, and they add it to their list of objects they are responsible for. Then, whenever an object is deleted, its destructor makes sure to destroy all the objects that it is responsible for. This helps prevent lost memory allocations, though Borland also uses other methods as well to ensure appropriate garbage collection. I would think a similar system could be used for M objects. But the programmer would have to be sure to call the object's destructor rather than just killing it. Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: I'm not entirely sure I understand your point here, but if you do intend to use array names as object references (which is what I generally do), and if you need a numeric object ID, then it seems reasonable to require that every object implement a getID() method. I'm not sure if non-persistent objects (any objects?) really need numeric IDs so long as the array references are well-defined and unique. === Gregory Woodhouse [EMAIL PROTECTED] Perfection is achieved, not when there is nothing more to add, but when there is nothing left to take away. -- Antoine de Saint-Exupery On Jul 11, 2005, at 3:26 PM, [EMAIL PROTECTED] wrote: The only problem I had with that kind of approach, when I played with it years ago, was that there isn't an easy way to know what temporary object get created by subroutine calls. ie: you can do this MERGE @(RESULT=_$$ObjectCreating^Call(possible,arguments)) with ObjectCreating^Call being code that creates a new object on the fly as the result of the call. (perhaps using ^TMP($J, or something like that as a temporary storage location.) The problem is recognizing which ones are still in use and which ones need to be garbage collected. MUMPS indirection (ie: extremely late-binding) is very useful, but using it in a disciplined way is tricky at times. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Now, I guess I'm confused. Are we talking about maintaining a list of references to a given object? Off-hand, I don't see that a mark and sweep garbage collection strategy (like the one used in Java) would require this. What I do see as potentially tricky is that runtime object would need to be qualified by job number, but that seems to be a technical detail. === Gregory Woodhouse [EMAIL PROTECTED] Before one gets the right answer, one must ask the right question. -- S. Barry Cooper On Jul 11, 2005, at 4:02 PM, [EMAIL PROTECTED] wrote: And of course, if Rune was already implemented, the object's destructor would already be called by the KILL command anyway, since it would be part of the contract of the object with the language layer. The problem with the owner idea is that you need to decide if you are managing content or address. If a new object is created by the MERGE command, then your Garbage collection is managing addresses (ie: names of global references etc.) If a MERGE results in just another location where the content is stored, then you need to keep track of the content changes. Anyway, the owner idea is useful enough to remember when I dabble in dynamic object manipulation again. Fascinating stuff, but mostly at right angles to typical VistA development. --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
My point of view is that OO can easily be done poorly (something that bothers me -- a lot), but it can b incredibly powerful when done right. Rather than being an interesting aside, I see object orientation, or something like it, as critical to the long range success of Vista. The tight coupling and poor cohesion we see in the Vista code base is way, way out of hand, and trying to move Vista into new environments only makes the issue more acute. No, I don't think for a moment that using an object oriented language will somehow magically solve these problems, but I find it hard to envision a solution that doesn't at least use basic ideas of object orientation in a fundamental way. In fact, I think it is part of the genius of Vista that it anticipated OO technology to a surprising extent, and I doubt it would have been as successful as it has been were that not the case. === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 11, 2005, at 3:46 PM, Kevin Toppenberg wrote: Speaking of discipline, its pretty clear that one can't tie the hands of the programmer. It's like Marty's analagy of the girlfriend and the motorcycle again. :-) But I don't see why garbage collection would be any more of an issue with variables acting as object than it would be with any other variable. A simple kill would take them all out. For those stored in ^TMP etc, if one set up an infrastructure that instantiated the objects for the programmer, then they could be put in locations that would be immediately obvious that they were no longer in use. A $J node would be a first thought. I'm sure you put quite a bit of thought into this before. I am just shooting from the hip. It was just a thought that was buzzing around my head. But to be honest, I find the benefits of an OO oriented language to be most helpful when I am either working with a graphic environment, or when using a library like Borland's VCL. I don't know if I really need OO in what I am doing now. Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
This is a good example of a design pattern, and it is perhaps understandable that a pattern like this would be built into the language given the focus on GUI applications. But one of the things I like least about Swing (the primary GUI framework for Java) is that you end up passing a reference to a JFrame to objects like dialogs. Sure, it's useful because there has to be some way of communicating what ever data you entered through the dialog back to the main application which, believe it or not, is usually an instance of JFrame (!) Ugh. Maybe I'm missing something obvious, but that seems to me like a completely unnatural way to use inheritance -- and I like Java. === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 11, 2005, at 3:55 PM, Kevin Toppenberg wrote: In Borland's VCL, every object that is created must supply an Owner parameter. Then, during creation, that owner is notified of the new object, and they add it to their list of objects they are responsible for. Then, whenever an object is deleted, its destructor makes sure to destroy all the objects that it is responsible for. This helps prevent lost memory allocations, though Borland also uses other methods as well to ensure appropriate garbage collection. I would think a similar system could be used for M objects. But the programmer would have to be sure to call the object's destructor rather than just killing it. Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Yeah, why didn't you guys get busy and get that Rune up and going already? :-) When you talk about content vs. addresses, this is the same concept in c/c++ as pointers vs. the actual memory that was allocated. Sure, anytime that memory is freed, all pointers to it (and in M this would be the name of the reference etc.) suddenly become invalid. Thus programmers have to be very careful with their pointers, or the entire program goes south in a big way. So if I was going to implement this, I would have all objects created through an instantiator, and destroyed with a destructor. Tell me what you think. (Code below). I don't think I have all the indirection syntax correct, but I maybe you can get my idea. I haven't developed how I would implement object inheritence, but it wouldn't be too much of an extension. Kevin ;-- ; new and delete functions below ;-- new(Type) new typeRef set typeRef= new defProc set defProc=$get(TblConstructor(Type)) if defProc'= set [EMAIL PROTECTED] quit typeRef delete(pRef) new Type set [EMAIL PROTECTED]@(TYPE) new killProc set killProc=$get(TblDestructor(Type)) if killProc'= do . new ID set ID=$piece(pRef,(,2) . set ID=$piece(ID,),1) . set killProc=do _killProc_(_ID_) . xecute @killProc quit ;-- ; Setup for available objects below ;-- Init() set TblConstructor(WIDGET)=defWidget set TblConstructor(GADGET)=defGadget set TblConstructor(SPROCKET)=defSproket set TblConstructor(LEVER)=defLever set TblDestructor(WIDGET)=killWidget set TblDestructor(GADGET)=killGadget set TblDestructor(SPROCKET)=killSproket set TblDestructor(LEVER)=killLever quit ;-- ;Object Widget specif code below ;-- defWidget(New) ;A constructor for object Widget set oWIDGET(LAST ID)=$get(oWIDGET(LAST ID))+1 new ID set ID=oWIDGET(LAST ID) set oWIDGET(INSTANCES,ID)= ;Here we define the default values for object vars set oWIDGET(ID,TYPE)=WIDGET set oWIDGET(ID,MyVar1)=0 set oWIDGET(ID,MyVar2)=0 set oWIDGET(ID,MyVar3)=0 set oWIDGET(ID,Multiply)=wgtMultiply set oWIDGET(ID,Divide)=wgtDivide quit $name(oWIDGET(ID)) killWidget(ID) ;A destructor for object Widget ;any needed clean up code would go here first. kill oWIDGET(ID) kill oWIDGET(INSTANCES,ID) quit wgtMultiply(x,y) ;Widget member function new result set result=x*y quit result wgtDivide(x,y);Widget member function new result set result=x/y quit result ;-- ;Main function below ;-- MyFunct() new pWidget ;will store a name of object set pWidget=$$new(WIDGET) new done set done=0 for do quit:(done) . new x,y . read input x: ,x,! . if x= set done=1 quit . read input y: ,y,! . if y= set done=1 quit . new fn set [EMAIL PROTECTED]@(Multiply) . write [EMAIL PROTECTED]@(x,y),! ;-- not sure if works(?) do $$delete(pWidget) write That all folks!,! quit --- [EMAIL PROTECTED] wrote: And of course, if Rune was already implemented, the object's destructor would already be called by the KILL command anyway, since it would be part of the contract of the object with the language layer. The problem with the owner idea is that you need to decide if you are managing content or address. If a new object is created by the MERGE command, then your Garbage collection is managing addresses (ie: names of global references etc.) If a MERGE results in just another location where the content is stored, then you need to keep track of the content changes. Anyway, the owner idea is useful enough to remember when I dabble in dynamic object manipulation again. Fascinating stuff, but mostly at right angles to typical VistA development. David In Borland's VCL, every object that is created must supply an Owner parameter. Then, during creation, that owner is notified of the new object, and they add it to their list of objects they are responsible for. Then, whenever an object is deleted, its destructor makes sure to destroy all the objects that it is responsible for. This helps prevent lost memory allocations, though Borland also uses other methods as well to ensure appropriate garbage collection. I would think a similar system could be used for M objects. But the programmer would have to be sure to call the object's destructor rather than just killing it. Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: I'm not entirely sure I understand your point here, but if you do intend to use array names as object references (which is what I generally do), and if you need a numeric object ID, then it seems reasonable to require that every
Re: [Hardhats-members] Data dictionary question...
I wonder if the reference to the JFrame is for a messaging system. In Borland/Windows, a GUI object has both an 'owner' (one responsible for utimately destroying it) as well as a 'parent' (one from whom one receives windows messages). I can't see why your objects would need to reference the JFrame (is this a graphic frame?) unless it was for messaging (i.e. time to repaint your area!) Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: This is a good example of a design pattern, and it is perhaps understandable that a pattern like this would be built into the language given the focus on GUI applications. But one of the things I like least about Swing (the primary GUI framework for Java) is that you end up passing a reference to a JFrame to objects like dialogs. Sure, it's useful because there has to be some way of communicating what ever data you entered through the dialog back to the main application which, believe it or not, is usually an instance of JFrame (!) Ugh. Maybe I'm missing something obvious, but that seems to me like a completely unnatural way to use inheritance -- and I like Java. === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 11, 2005, at 3:55 PM, Kevin Toppenberg wrote: In Borland's VCL, every object that is created must supply an Owner parameter. Then, during creation, that owner is notified of the new object, and they add it to their list of objects they are responsible for. Then, whenever an object is deleted, its destructor makes sure to destroy all the objects that it is responsible for. This helps prevent lost memory allocations, though Borland also uses other methods as well to ensure appropriate garbage collection. I would think a similar system could be used for M objects. But the programmer would have to be sure to call the object's destructor rather than just killing it. Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Well, here's some code I wrote to implement a login dialog (not that I'm all that proud of it -- I think it's ugly). You can see that this is exactly how the reference passed to the constructor is used. import java.awt.*; import java.awt.event.*; import java.util.*; import javax.swing.*; import javax.swing.event.*; import javax.swing.border.*; public class LoginDialog extends JDialog { private JButton l_loginButton; private JButton l_cancelButton; private Container l_content; private Triton l_application; public LoginDialog(Frame parent) { super(parent, Login, true); l_application = (Triton) parent; setDefaultCloseOperation(DISPOSE_ON_CLOSE); l_content = getContentPane(); l_loginButton = new JButton(Log in); l_loginButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { signIn(); setVisible(false); dispose(); } }); l_cancelButton = new JButton(Cancel); l_cancelButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ae) { l_application.setConnected(false); setVisible(false); dispose(); } }); JPanel p = new JPanel(); //p.setLayout(new GridLayout(2,1)); EmptyBorder empty = new EmptyBorder(0, 0, 0, 10); p.setLayout(new GridBagLayout()); p.setBorder(new EmptyBorder(new Insets(5, 5, 5, 5))); getContentPane().add(BorderLayout.CENTER, p); GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets (2, 2, 2, 2); c.anchor = GridBagConstraints.WEST; JLabel name_label = new JLabel(Login Name); name_label.setBorder(empty); c.gridwidth = 1; c.weightx = 0.0; p.add(name_label, c); JTextField name = new JTextField(); c.gridx = 1; //position c.weightx = 1.0; c.fill = GridBagConstraints.HORIZONTAL; p.add(name, c); JLabel password_label = new JLabel(Password); c.gridwidth = 1; c.gridx = 0; c.gridy = 1; c.weightx = 0.0; p.add(password_label, c); JPasswordField password = new JPasswordField(); c.weightx = 1.0; c.gridx = 1; p.add(password, c); setSize(300,200); c.weightx = 0.0; c.gridx = 0; c.gridy = 2; p.add(l_loginButton, c); c.gridx = 1; c.gridy = 2; c.weightx = 0.0; c.fill= GridBagConstraints.NONE; p.add(l_cancelButton, c); } protected void signIn() { l_application.setConnected(true); } protected void signOut() { l_application.setConnected(false); } } === Gregory Woodhouse [EMAIL PROTECTED] The whole of science is nothing more than a refinement of everyday thinking. -- Albert Einstein On Jul 11, 2005, at 5:15 PM, Kevin Toppenberg wrote: I wonder if the reference to the JFrame is for a messaging system. In Borland/Windows, a GUI object has both an 'owner' (one responsible for utimately destroying it) as well as a 'parent' (one from whom one receives windows messages). I can't see why your objects would need to reference the JFrame (is this a graphic frame?) unless it was for messaging (i.e. time to repaint your area!) Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Well Gregory, I don't know what a normal application is :-) However, the first application written in MUMPS using FileManager, and placed into use for paitent care in May 1979, routinely examined the Data Dictionary to discover if any fields had been added or removed. The application then adjusted the data presentation and analysis to reflect these changes. The application was a Food Nutrient Analysis package used to develop diet plans for diabetics who were being treated with a High Fiber, High Carbohydrate diet. Physicians prescribed the desired nutrient profile for the diets, and dietitians used the FNA package together with patient preferences to develop meal plans. The Dietitians were free to add nutrients, remove them and edit the properties of each nutrient. The notion of data dictionary driven application logic was there at the dawn of DHCP. The conceptual development around this principle, and the associated tools, did not take of vigorously, however. Regards, Richard. == From: Gregory Woodhouse [EMAIL PROTECTED] Reply-To: hardhats-members@lists.sourceforge.net Date: Sat, 9 Jul 2005 15:13:57 -0700 To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... No, I'm afraid not. There are calls to return information *about* fields, but I know of no way of retrieving a field list. In my own utilities, I've $ORDERed through ^DD (recursively descending into subfiles, if needed). Normal applications do not generally need to do this kind of thing, so I guess it was never a priority to create an API to do this. === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 9, 2005, at 2:26 PM, Kevin Toppenberg wrote: Is there a proper way to get a list of all fields for a file via database calls? I think I can do it at a lower level, but I thought there would probably be a call for this. But I can't find it. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Kevin, I believe you are looking for the List File Attributes option, which is under FileMan options and Data Dictionary options within that. If you instead want something across files, I believe there is something in the IHS version. Maybe someone else could speak to that. Marianne Kevin Toppenberg wrote: OK. That makes me feel better. Thanks Kevin --- Gregory Woodhouse [EMAIL PROTECTED]> wrote: > No, I'm afraid not. There are calls to return > information *about* > fields, but I know of no way of retrieving a field > list. In my own > utilities, I've $ORDERed through ^DD (recursively > descending into > subfiles, if needed). "Normal" applications do not > generally need to > do this kind of thing, so I guess it was never a > priority to create > an API to do this. > > === > Gregory Woodhouse > [EMAIL PROTECTED] > > "The policy of being too cautious is > the greatest risk of all." > --Jawaharlal Nehru > > > On Jul 9, 2005, at 2:26 PM, Kevin Toppenberg wrote: > > > Is there a "proper" way to get a list of all > fields > > for a file via database calls? > > > > I think I can do it at a lower level, but I > thought > > there would probably be a call for this. But I > can't > > find it. > > > > Thanks > > Kevin > > > > > > > > --- > This SF.Net email is sponsored by the 'Do More With > Dual!' webinar happening > July 14 at 8am PDT/11am EDT. We invite you to > explore the latest in dual > core and dual graphics technology at this free one > hour event hosted by HP, > AMD, and NVIDIA. To register visit > http://www.hp.com/go/dualwebinar > ___ > Hardhats-members mailing list > Hardhats-members@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/hardhats-members > __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
A normal application is one that does the kind of thing I thought it might need to do. You're right that it is a basic rule that no one can ever think of everything ahead of time. And -- to step on a personal soap box of mine -- maybe some day we'll stop developing software as if though we had thought of everything ahead of time. === Gregory Woodhouse [EMAIL PROTECTED] Before one gets the right answer, one must ask the right question. -- S. Barry Cooper On Jul 10, 2005, at 6:34 AM, Richard G. DAVIS wrote: Well Gregory, I don't know what a normal application is :-) --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
It would be easy enough (though maybe a bit tedious) to design an API to do the same basic thing. I think I already shared the code I wrote to visit all the fields in a file. You can then use FIELD^DID or FIELDLST^DID. === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 10, 2005, at 5:11 AM, Marianne Susaanti Follingstad wrote: Kevin, I believe you are looking for the List File Attributes option, which is under FileMan options and Data Dictionary options within that. If you instead want something across files, I believe there is something in the IHS version. Maybe someone else could speak to that. Marianne --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
There are two people in Oakland dealing with problems like this. One person likes to use standard tools like the one you mention and use a screen scraping approach to parse the output and put it into database form. I've taken the approach of writing code to extract the data directly. Since this was done (in my case) as part of an analysis effort, the code didn't need to be released, and so SAC compliance wasn't really as much of an issue. Personally, I'd like to see an API in Fileman for everything that you can do through an option, but originally, no one really thought this would be necessary. === Gregory Woodhouse [EMAIL PROTECTED] It is foolish to answer a question that you do not understand. --G. Polya (How to Solve It) On Jul 10, 2005, at 5:11 AM, Marianne Susaanti Follingstad wrote: Kevin, I believe you are looking for the List File Attributes option, which is under FileMan options and Data Dictionary options within that. If you instead want something across files, I believe there is something in the IHS version. Maybe someone else could speak to that. Marianne --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Its not too tedius. Here is the function I created to generate a list of all fields (but not subfields) for a file. GetFldList(FileNmber,pArray) new index set index=$order(^DD(FileNumber,0)) if +index0 for do quit:(+index'0) . set @pArray@(index)= . set index=$order(^DD(FileNumber,index)) Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: It would be easy enough (though maybe a bit tedious) to design an API to do the same basic thing. I think I already shared the code I wrote to visit all the fields in a file. You can then use FIELD^DID or FIELDLST^DID. === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 10, 2005, at 5:11 AM, Marianne Susaanti Follingstad wrote: Kevin, I believe you are looking for the List File Attributes option, which is under FileMan options and Data Dictionary options within that. If you instead want something across files, I believe there is something in the IHS version. Maybe someone else could speak to that. Marianne --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Are you referring to the function FILE^DID? Because I don't see an atrribute to specify for it to return field information. Thanks Kevin --- Marianne Susaanti Follingstad [EMAIL PROTECTED] wrote: Kevin, I believe you are looking for the List File Attributes option, which is under FileMan options and Data Dictionary options within that. If you instead want something across files, I believe there is something in the IHS version. Maybe someone else could speak to that. Marianne Kevin Toppenberg wrote: OK. That makes me feel better. Thanks Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: No, I'm afraid not. There are calls to return information *about* fields, but I know of no way of retrieving a field list. In my own utilities, I've $ORDERed through ^DD (recursively descending into subfiles, if needed). Normal applications do not generally need to do this kind of thing, so I guess it was never a priority to create an API to do this. === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 9, 2005, at 2:26 PM, Kevin Toppenberg wrote: Is there a proper way to get a list of all fields for a file via database calls? I think I can do it at a lower level, but I thought there would probably be a call for this. But I can't find it. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members Sell on Yahoo! Auctions no fees. Bid on great items. http://auctions.yahoo.com/ --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
No, I mean FIELD^DID. This call gives you information about fields. === Gregory Woodhouse [EMAIL PROTECTED] It is foolish to answer a question that you do not understand. --G. Polya (How to Solve It) On Jul 10, 2005, at 10:09 AM, Kevin Toppenberg wrote: Are you referring to the function FILE^DID? Because I don't see an atrribute to specify for it to return field information. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
That's not what I had in mind when I said the process was tedious: I was referring to the process of extracting all the different information you might want about each field and reformatting it. Fortunately, FIELDLST^DID allows you to retrieve multiple field attributes in one call. === Gregory Woodhouse [EMAIL PROTECTED] A practical man is a man who practices the errors of his forefathers. -- Benjamin Disraeli On Jul 10, 2005, at 10:07 AM, Kevin Toppenberg wrote: Its not too tedius. Here is the function I created to generate a list of all fields (but not subfields) for a file. GetFldList(FileNmber,pArray) new index set index=$order(^DD(FileNumber,0)) if +index0 for do quit:(+index'0) . set @pArray@(index)= . set index=$order(^DD(FileNumber,index)) Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Oh...and don't forget that some of those fields may be multiple. In those cases you need to descend into the subfile, too (but watch out for WP fields). === Gregory Woodhouse [EMAIL PROTECTED] Design quality doesn't ensure success, but design failure can ensure failure. --Kent Beck On Jul 10, 2005, at 10:07 AM, Kevin Toppenberg wrote: Its not too tedius. Here is the function I created to generate a list of all fields (but not subfields) for a file. GetFldList(FileNmber,pArray) new index set index=$order(^DD(FileNumber,0)) if +index0 for do quit:(+index'0) . set @pArray@(index)= . set index=$order(^DD(FileNumber,index)) Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
Well, I believe that one need not think of everything ahead of time. The FNA application surely didn't. The design principle is to code for the general case. Do not make constraints as a way of life. Then there is the overwhelming tendency of software engineers to be exceedingly egocentric. Later, when this tendency is recognized as restrictive, we hear the can't think of everything chorus. The enlightened path is to design for the general case, and to spend most of the effort taking care to be sure that THE PROBLEM has been identified and well characterized. It is not so much thinking of everything. Instead, it is solving the correct problem. The early DHCP Pharmacy application was a glorified label generator. The problem we needed to solve was how to create software that would facilitate the work processes of the pharmacy business. (...in an open way of course.) From: Gregory Woodhouse [EMAIL PROTECTED] Reply-To: hardhats-members@lists.sourceforge.net Date: Sun, 10 Jul 2005 09:39:34 -0700 To: hardhats-members@lists.sourceforge.net Subject: Re: [Hardhats-members] Data dictionary question... A normal application is one that does the kind of thing I thought it might need to do. You're right that it is a basic rule that no one can ever think of everything ahead of time. And -- to step on a personal soap box of mine -- maybe some day we'll stop developing software as if though we had thought of everything ahead of time. === Gregory Woodhouse [EMAIL PROTECTED] ... . --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
You would have to know which field to ask about. I am wanting a list of the fields to begin with. I don't think that function will do that. Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: No, I mean FIELD^DID. This call gives you information about fields. === Gregory Woodhouse [EMAIL PROTECTED] It is foolish to answer a question that you do not understand. --G. Polya (How to Solve It) On Jul 10, 2005, at 10:09 AM, Kevin Toppenberg wrote: Are you referring to the function FILE^DID? Because I don't see an atrribute to specify for it to return field information. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
What can I say? I completely agree with you that there is no reason to think we should either need to think of everything, or that it is even remotely possible to do so. I try to design software to be flexible and extensible in this regard, and yes, I do find that my coworkers do sometimes look askance at my code. I well remember one of my most recent code reviews in which someone told me my code was hard to read. Needless to say, that is about the last thing I wanted to hear. But trite and old-fashioned as it sounds, I like the patterns approach to system design, and have come to realize in retrospect that my code sometimes looks odd to my colleagues precisely because I have (perhaps intuitively) made use of patterns in my work. I also believe that a major problem with software development is that we tend to see coding as a more or less technical task in which we implement requirements identified at the analysis phase. In the process, design and (to a lesser extent) architecture tends to get short shrift -- very much to our detriment. === Gregory Woodhouse [EMAIL PROTECTED] A hero is no braver than an ordinary man, but he is brave five minutes longer. -- Ralph Waldo Emerson On Jul 10, 2005, at 4:18 PM, Richard G. DAVIS wrote: Well, I believe that one need not think of everything ahead of time. The FNA application surely didn't. The design principle is to code for the general case. Do not make constraints as a way of life. Then there is the overwhelming tendency of software engineers to be exceedingly egocentric. Later, when this tendency is recognized as restrictive, we hear the can't think of everything chorus. The enlightened path is to design for the general case, and to spend most of the effort taking care to be sure that THE PROBLEM has been identified and well characterized. It is not so much thinking of everything. Instead, it is solving the correct problem. The early DHCP Pharmacy application was a glorified label generator. The problem we needed to solve was how to create software that would facilitate the work processes of the pharmacy business. (...in an open way of course.) --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
There isn't. I thought you were asking whether there was a call, similar to FILE^DID, to obtain information about fields in a file. === Gregory Woodhouse [EMAIL PROTECTED] And the end of all our exploring will be to arrive where we started And know the place for the first time -- T.S. Eliot On Jul 10, 2005, at 6:48 PM, Kevin Toppenberg wrote: You would have to know which field to ask about. I am wanting a list of the fields to begin with. I don't think that function will do that. Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
No, I'm afraid not. There are calls to return information *about* fields, but I know of no way of retrieving a field list. In my own utilities, I've $ORDERed through ^DD (recursively descending into subfiles, if needed). Normal applications do not generally need to do this kind of thing, so I guess it was never a priority to create an API to do this. === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 9, 2005, at 2:26 PM, Kevin Toppenberg wrote: Is there a proper way to get a list of all fields for a file via database calls? I think I can do it at a lower level, but I thought there would probably be a call for this. But I can't find it. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members
Re: [Hardhats-members] Data dictionary question...
OK. That makes me feel better. Thanks Kevin --- Gregory Woodhouse [EMAIL PROTECTED] wrote: No, I'm afraid not. There are calls to return information *about* fields, but I know of no way of retrieving a field list. In my own utilities, I've $ORDERed through ^DD (recursively descending into subfiles, if needed). Normal applications do not generally need to do this kind of thing, so I guess it was never a priority to create an API to do this. === Gregory Woodhouse [EMAIL PROTECTED] The policy of being too cautious is the greatest risk of all. --Jawaharlal Nehru On Jul 9, 2005, at 2:26 PM, Kevin Toppenberg wrote: Is there a proper way to get a list of all fields for a file via database calls? I think I can do it at a lower level, but I thought there would probably be a call for this. But I can't find it. Thanks Kevin --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members __ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com --- This SF.Net email is sponsored by the 'Do More With Dual!' webinar happening July 14 at 8am PDT/11am EDT. We invite you to explore the latest in dual core and dual graphics technology at this free one hour event hosted by HP, AMD, and NVIDIA. To register visit http://www.hp.com/go/dualwebinar ___ Hardhats-members mailing list Hardhats-members@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/hardhats-members