PAGE is built upon the program Visual Tcl, but is different because of differing objectives of the two programs. Visual Tcl was conceived as complete build environment for Tcl. It included facilities for managing projects with multiple windows, creating of GUI’s, binding actions with callback procedures, creating menus, writing functions, and testing the application, all the while supporting many different widget sets and several geometry managers. PAGE is limited to defining a single GUI window using Tk and ttk widgets and the placer geometry manager; there are better environments for building and debugging Python programs once you have code for the GUI.
PAGE makes use of the Virtual Tcl facilities for creating a single GUI window, assigning attributes to widgets, binding events to callback procedures, and creating menus. PAGE also automatically generates skeletal callback functions and supplies much of the boilerplate code for running Tkinter.
When PAGE generates the code for a window, all of the code for causing Python to create and map that window is generated - a Python class for the toplevel window with all the code necessary to instantiate the class (i. e., display the window), import statements, Tk mainloop and initialization, a main procedure, etc. Therefore, if you have provided the skeletal callbacks the generated code is executable and you can see just how the GUI will look in a Python environment. PAGE even attempts to generate skeletal callbacks.
The generated code can be used as the skeleton for your application. However, the generated GUI may be a secondary GUI and all that you really want to do is instantiate the toplevel class, use support functions implied within the GUI and possibly to destroy that window. You can do that by importing the code as a module and invoking functions within that module including automatically generated functions for creation and destruction of the window. This will be discussed in more detail later.
I often use the generated GUI classes as starting points for customization. When you are not sure how to start or want to quickly try out some GUI ideas, PAGE is very useful because it generates all of the boilerplate necessary.
PAGE is invoked by executing the “page” script located in the page directory. I go to that directory and issue the command:
./page [filename]
I preface the command with ”./” to be sure I am executing the page script in the page directory.
PAGE can be invoked with zero or one file names. If supplied the file name should have an extension of ”.tcl”. If another extension is supplied that is interpreted as an error and PAGE terminates. If no extension is given in the file name or the file name ends in ”.” , an extension of ”.tcl” is supplied by PAGE. If the file cannot be found PAGE terminates. If a file name is specified, the file should be a tcl file saved during a previous PAGE session; it will be opened as PAGE begins executing as an alternative to File->Open for proceeding from a saved PAGE session. Near the top of a ”.tcl” design file created in PAGE there is a comment containing version information and a timestamp. If that version information is not present then PAGE will refuse to open the file.
As you use PAGE to build a GUI, you can save the current state of the GUI at any time from the File->Save of File->Save As menu. In fact, it is a good idea to save your status often in case PAGE fails or dies.
This section attempts to describe the main functionality of PAGE when building an application with a single root window. It will yield a Python module which implements the application interface.
One uses PAGE to generate a GUI as follows:
All that is necessary to add a widget to the GUI is to select it with Button-1 from the Widget Toolbar, position the cursor inside the destination container and again press the Button-1. A small version of the widget will appear with its upper left-hand corner at the point of the Button-1 click.
Often algorithmically generated names can be difficult to understand in computer generated code. To reduce the problem in PAGE, users can specify more easily understood names called aliases.
An alias is a user specified identifier of a widget in the generated code. Obviously, aliases must be unique within the class which will be generated in the python code to realize the GUI window. An easy way to specify an alias is to select the target widget with a Button-3 click and then select “Set Alias ...”. Another small window will appear and one can add the alias. Finally close that window by selecting the “check” or with the Enter key.
Another way to enter an alias is to select a widget with Button-1 and then select “Set Alias ...” from the Option menu in the main PAGE window.
Also, one may specify an alias by selecting a widget and editing the “Alias” field in the top section of the Attribute Editor.
An alias must be a legal python identifier. PAGE does allow blanks in an alias but they will be changed to “_”. Also Alias has no meaning for top level windows. For top level windows the the variable names are generated from the title attribute. There are numerous schemes for generating such names but one that has been suggested is based on CamelCase. It is:
Note that PAGE has an option so that PAGE will automatically generate an alias. This too is an algorithmically generated name but one that is easier to live with rather that the default algorithmically generated name. This is controlled by a new field in the Preference window. So you should be sure that it is correctly set and is not overridden by a value in your ”.pagerc” file. I recommend that you go into Preferences, check the value and save the preferences. Why the original Visual Tcl program had two methods of generating names, one comprehensible and one not and still chose the less readable one as the default is baffling.
For simple widgets like buttons or text boxes you can select the widget either by selecting the widget with Button-1 in the GUI or in the Widget Tree. Then it merely a matter of dragging one of the attached handles to resize the widget or dragging the mouse inside the widget to change it placement within its container or parent widget.
With more complex widgets like notebooks, paned windows, or scrolled widgets, clicking Button-1 inside the widget will select a child widget rather than the whole widget. There are several cases with the complex widgets - moving the widget or resizing the widget, or changing attributes of the widget.
When you select a widget, the Attribute Editor window will display all configuration options available for that widget and the default values of those widgets. I think it is clear how to modify most of the options. One can easily change the colors, fonts, labels, text, relief, and some that I don’t even recognize. Obviously, all of the attributes are described in the Tcl documentation.
There are different ways to change attributes. Where there is limited list of choices, the change is selected from a drop down list. For colors one can type in the X color name, RGB in hex, or hit the little button next to the field and a color selection window appears. Labels and text fields can just be typed in. Where a command is to be specified, it can just be typed in.
If you are working with standard Tcl widgets, there are many options that can be modified whereas the ttk widgets have very few options, their appearance being governed principally by the specified theme.
After much work I think that there is now a useful cut, copy, and paste feature in PAGE. The basic way it works:
Copy and Paste are important features because one cannot drag a widget from one container widget into another but one can cut or copy and paste to get that effect. For instance if one creates a button in a top level window and then decides that it should be moved to a frame or a notebook tab that cannot be accomplished that just by selecting the button and dragging it to the frame. However it can be done with cut and paste.
When debugging the this feature that I made fewer mistakes by selecting the widget to be copied by selecting it in the Widget Tree than trying to grad it in the top level window. This is most important when trying to select and copy nested widgets which one can do.
I have implemented cut and it appears to work; however, I never use it. There is a sequence of several steps between the selecting copy from the menu and selecting the location of the paste. If you get it wrong following a cut, you can’t go back and retry the operation; the source for the copying is gone. So, I stick to copy and paste and then finish with a delete.
One thing that cut, copy, and paste cannot do is copy from one module’s GUI and paste in another module’s GUI.
The point of building a GUI is to link actions (the execution of specific code) to some event within the GUI like selecting a button with a mouse key, typing a particular character into a text field, or creation of a widget. These functions are termed callbacks. While Visual Tcl and Tcl allows one to specify a block of code, one should stick with a one liner in Python. One liners can be the name of a function; just the name without a parameter list which will effect the function call with a null parameter list. The other possibility is a lambda expression to call a function and pass a parameter list.
Many widgets have a command attribute which specifies the code to executed when the widget is selected with Button-1. To specify that command, one selects the widget and then shifts attention to the widget menu or the attribute editor and specifically the entry filed labeled ‘command’. Now you can type in the command or select the button with the ellipsis. Doing the latter brings up a window where you can type in the command.
If you want to invoke a function and pass parameters to it, you use a lambda expression. Please see section 6.4 of Grayson’s book for a fine explanation of the use of lambda expressions in this context. Let say that if you want to call the function foo and pass it 3 as an argument, what you enter as command is
lambda : foo(3)
not
foo(3).
Grayson talks about invoking callbacks directly or indirectly. Specifying a command attribute is an indirect invocation while specifying a binding to an event causes a direct invocation. The difference is that the direct invocation passes an event object to the callback. The callback function must be an argument list which includes a parameter for the event. To see examples of direct and indirect invocation of call backs see the vrex example.
There are many events that can be linked to code. See the Tk man pages and Chapter 6 of Grayson. They include responding to the different mouse button pressings or releases, a window getting or loosing focus, etc. as well as virtual events. If you want to link code to one of those events, open the Bindings Window either from the popup menus in response to selecting the widget with Button-3 or selecting the widget with Button-1 and typing Alt-b.
Some virtual events are defined within the Tcl/Tk for things like cut, copy, and paste as well a special virtual events for different Tk widgets. The bindings mechanism will handle bindings for those virtual events but there is no supported mechanism for creating such events. For instance, with the Scrolledtext widget one can select the text widget, type Alt-b to enter the binding editor, choose Insert then Advanced, scroll down to show <<Cut>> and select it, then the Add button and it will appear in the right window of the binding editor where one specifies the name of a routine say xxx, then select the check to commit it. When on then run the program, selects some characters in the text box and then Ctrl-C, the built in trigger for Cut, the routine xxx in the support module will be called.
Lets look again at
On the left you will see top in blue the Tcl name of the widget and below the name a list of the event to which the widget responds. The key action is to insert an action (really it is choose one of the actions listed in the lower part). It is done by clicking Insert Menu and selecting one of the actions there. As shown the action was <Button-1>. Having done that, you are then allowed to type in the code you want executed. Once again stick with a one-line lambda expression. There is a difference here from what was discussed above in connection with the command attribute, because when the event happens an argument is passed to the callback which is the event object. This means that the command is something like:
lambda e: foo_bar(e,3,5)
The parameter e above is the event object which contains much information about the event. The object has the following attributes (from the documentation found in Tkinter.py):
serial - serial number of event
num - mouse button pressed (ButtonPress, ButtonRelease)
focus - whether the window has the focus (Enter, Leave)
height - height of the exposed window (Configure, Expose)
width - width of the exposed window (Configure, Expose)
keycode - keycode of the pressed key (KeyPress, KeyRelease)
state - state of the event as a number (ButtonPress, ButtonRelease,
Enter, KeyPress, KeyRelease,
Leave, Motion)
state - state as a string (Visibility)
time - when the event occurred
x - x-position of the mouse
y - y-position of the mouse
x_root - x-position of the mouse on the screen
(ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion)
y_root - y-position of the mouse on the screen
(ButtonPress, ButtonRelease, KeyPress, KeyRelease, Motion)
char - pressed character (KeyPress, KeyRelease)
send_event - see X/Windows documentation
keysym - keysym of the the event as a string (KeyPress, KeyRelease)
keysym_num - keysym of the event as a number (KeyPress, KeyRelease)
type - type of the event as a number
widget - widget in which the event occurred
delta - delta of wheel movement (MouseWheel)
By using the Insert->Advanced you can specify specific keys, press or release, and double or triple clicking, use of Alt or Control Keys. It is a pretty extensive list.
One can quickly go beyond the common usages of bindings and that may run into untested usage of PAGE. However, it has been possible for me to build a number of useful applications using the facilities provide by PAGE without encountering difficulties.
If you name a function in a menu, an event binding, command attribute, etc., then definition of that function is required before trying to execute the GUI in PAGE.
Executing the GUI means to execute the generated Python code within PAGE to demonstrate how the GUI will appear in the completed application by selecting the Run button on the Python Console. To satisfy requirements of the Python interpreter named variables have to be defined and if they refer to functions, those functions have to be defined and of proper syntax. Skeleton functions will be satisfactory since at that state of development you really don’t expect the application to usefully function.
One path for the user is to do nothing, letting PAGE create a skeleton for you by just noticing that the a name is specified in a binding or an attribute in the support module as described in Rework. This is the recommended approach as of version 4.2.
Previously, I did a makeover of the Visual Tcl function definition facility. While satisfyingly clever, I now have abandoned it for the simpler creation of skeletal functions. Though deprecated, it is described below.
If you wish to have a more complete function then go to the function list window which is usually open or can be made visible from the Window menu. To create a function hit add. Yet another window will appear filled with a dummy function, py:xxx. See below.
To get a skeleton function just change the ‘xxx’s to the name of your function and fill in the parameter list. If the function is to be a class method be sure to insert “self,” including the comma as the first parameter even if you have no otheThe functionality described below is now, with version 4.2, considered a deprecated function. r parameters. Obviously, you can write as much of function here as you want. For instance, I sometimes will include the statement sys.exit() in a quit function.
def quit():
sys.exit()
An aside:
Since Tcl will tolerate a procedure containing anything until it executed, PAGE will save your function as:
## Procedure: py:wet
proc ::py:wet {} {
def wet(self,) :
pass
}
That means that later you can come back to PAGE to modify the GUI and the functions that you saved will still be there! This ends the discussion of the deprecated function stuff.
I usually just let PAGE generate the skeleton functions, run the resulting code to see what my window will look like and then do the rest of my programming in emacs. When PAGE stores the python modules, several layers of backup files are retained. If I need to regress to one of them, I find that Meld is a wonderful utility for managing the differences between versions.
Previously, the automatically generated functions contained only a single “pass” statement. Unfortunately, that tells you nothing when you try executing the generated Python code in the Python Console. So I changed the “pass” statement to a print statement which prints the function name when the function is called. I have found that to be helpful.
Toplevel widgets don’t really have a title property. It was added in Visual Tcl and the Attribute Editor originally displayed it as one of the geometry attributes. That didn’t seem like a good idea so I moved it to the Attributes section. The title is displayed at top of the window and is used with “_“‘s replacing blanks, as the name of the generated Python class.
Among the attributes listed for a toplevel widget is ‘menu’ which in Visual Tcl allows one to easily create a menu in a menubar at the top of the widget. Click on the attribute and follow the procedure below.
An improvement in version 3.5 was the ability to change other properties such as the colors and the cursor of Toplevel widgets. One property of Toplevel widgets is relief. However, I was totally unable to change that property at either the Python or Tcl/Tk level. I simply don’t know how.
Following the paradigm I am familiar with from VB, PAGE uses the place window manager to fix location within the generated GUI. Thanks to George Tellalov, I decided to use relative placement for widgets within the GUI thus allowing one to build stretchable GUI’s. They allow one to grab an edge or corner of the executing Python GUI and change its size and while maintaining relative positions and sizes of the internal widgets.
Since I don’t think buttons or labels should change size in step with the change in size of the window, relative placement for buttons does not change the size of buttons but the relative placement is maintained.
With several of the widgets, it is necessary to have linkage between tkinter variables and Python variables. For instance, when one moves a slider of a scale in the GUI window, he wants the value to be reflected in a Python variable or conversely changing that variable should change the position of the slider. This is done by means of the Tkinter variable classes: BooleanVar, DoubleVar, IntVar, and StringVar.
You need an instance of one of these classes. PAGE guesses the variable type which you may need. You can then use the get method in python to determine the value of the variable in tk and use the set method to set the value of the tk variable. There are examples below. For more information see the Tkinter Variable Class on the effbot.org web page.
For instance if you are using a TScale widget to be coupled with the tk variable variable “val”:
def set_Tk_var():
# These are Tkinter variables used passed to Tkinter and must be
# defined before the widgets using them are created.
global val
val = DoubleVar()
val.set(5) # Initial value to be displayed.
then you need to set the TScale attribute to “val”. The rule is that the Tkinter variable must exist before it appears in a configuration statement like:
self.che26.configure(variable=self.var)
When val is changed
val.set(14)
the TScale will move to that value.
If the TScale is changed in the GUI, you can read it with
val.get()
PAGE tries to help out by generating an instance of the appropriate global class variables as needed. Again, this is skeletal code to help the generated Python code run from within the Python Console. It recognizes that a variable starting with “self.” is a class attribute.
If you forget to specify the variable then try to execute, the code may give an error saying that a variable with a strange name is a problem because a funny name is put into the variable attribute in the Attribute Editor. PAGE tries to detect this situation and give a cryptic error message.
For more discussion of Tkinter Variable Classes see Tkinter 8.5 reference.
There are some aspects of the Ttk widget set that have presented me with some significant difficulties mainly due to “styles”, it may be merely that I don’t understand the ttk widgets well enough or to problems with their implementation and documentations. I will try to explain my problems below. I would welcome any suggestions.
For some reason that I don’t understand, the Tk folks have never seen fit to implement scrolled widgets such as a Scrolled Text widget. I certainly don’t want to fuss around with all the separate programming tasks required for build a scrolled text widget when building a GUI.
I am especially pleased that Guilherme Polo in his Pyttk-samples package shows how to build Scrolledtext and Scrolledtreeview widgets. Borrowing that code, I was able to include such widgets as well as a Scrolledlistbox in PAGE.
One can select a scrolled widget from the Widget Toolbar and place it in the GUI and PAGE will include all of the Python support coded necessary to realize the scrolled widget. The scrolled widgets that I added are not named with an T because they are not official ttk widgets. The Scrolledtextbox has a normal text subwidget in which I have chosen to make the “wrap” default “none”.
Although Polo implemented his code with Ttk widgets, I have used his ideas to implement scrolled tk widgets as well. In fact, where possible I have used tk widgets in preference to ttk widgets. For instance, I have based only the ScrolledTreeview and Scrolledcombobox on Ttk widgets. I am indebted to Polo for his ideas but he bears no responsibility for any errors I make applying his ideas.
The scrolled widgets are compound widgets containing as-needed scrollbars and an elementary widget. As such, to set attributes or apply bindings, first select the elementary internal widget.
When the scrolled widgets are pasted into a container window, the image shown does not display the scroll bars for two reasons. The best is that the appearance is similar to that which is shown when the GUI is executed because as implemented in the Python code the scroll bars appear only when required. The other is that I had a lot of trouble with background colors in the ttk::scrollbars used in the Python GUI. One can distinguish between the text boxes and scrolled text boxes because I load the PAGE version with the word Scrolled.
These widgets are complex widgets, so to move or resize them, use control with Button-1. The scrollbars are ttk::scrollbar widgets which appear only when needed, i. e., when an item extends beyond the allotted space.
When inserting test inside a Scrolledtext widget, treat it like a text widget. For example, uses code like
obj = self.Scrolledtext1
obj.insert(END, "This is text to be inserted")
If you select, place, and resize a TNotebook in your GUI window it have display two pages and look like:
To change the attributes of the TNotebook, select the notebook editor either by invoking Control-Button-1 in the widget and then selecting edit page from the Widget menu or by selecting it in the Widget Tree with Button-3 and then the Widget entry in the popup menu.
Here you can do all sorts of interesting things like change the text in the tab and select the tab you want to activate for adding widgets or changing attributes of widgets already added to that page. If you got to the menu Item->Add, it will create a new page to the notebook, in the above example, between Page 1 and Page 2. The Move menu as well as the up and down buttons will change the order of the pages. The move operation will move the selected page one position up or down. The move is circular in the sense that moving the bottom item down will move it to the top, etc..
Another way of navigating the pages is the pages attribute in the Attribute Editor.
The TPanedwindow can be added to the GUI by selecting it from the Widget Toolbar and then Button-1 in the container. There are two entries for the TPainedwindow , one for vertical separators and another for horizontal, in the Widget Toolbar. It can be moved around by Control-Button-1 and resized by dragging one of the handles. It is sometimes a bit difficult grabbing a handle unless you select the TPanedwindow widget from the Widget Tree window. Each pane of the paned window contains a filling TLableframe. Using the label frame was the only way I could find to actually get the a TPanedwindow to appear on my screen. Again, I had few examples to work from.
The paned window is configured by invoking Widget->Edit Panes menu item bringing up the following editor.
This editor allows users to move among the panes, change the text in the label frame, and to manipulate the position of the sash between the current frame and the next one. You can set the sash position as a percentage of the total size of paned window. Again, one saves the changes by clicking on the green check.
With version 3.2, one can select the TLableframe defining the pane and drag the edge of it to change the sash position. In other words, select a pane with Button-1 and drag one of the interior handle; that will move the sash between the selected pane and the adjacent pane.
The Edit panes window allows one to add additional panes to the window via the Item menu. The implementation of paned windows sets the initial size of the paned window to 200x200 pixels and the the first pane size to 75 pixels. Adding a new pane adds one at the end (the right end of a horizontal TPanedwindow or the bottom of a vertical TPanedwindow, in either case, taking space from prior end pane. Fortunately you can resize the whole TPanedwindow which changes the size of the end pane. Then resize the others by changing the sash positions as described above.
The editor, by including the Move menu and the little up and down arrows allows one can move the a pane to a new position. Again, the move operation is circular.
I am still having a problem with resizing TPanedwindows. If you select the paned window, by say selecting it in the Widget Tree window, move the paned window, and then select and move one of the handles, the TPanedwindow will move rather than resize. However, if you again select a handle it will resize the window. Obviously, something has been set but not reset. As soon as I figure out how to correct the problem I will release a new version.
I have had real difficulty providing reasonably good support for the Treeview widget. I actually do not support the ttk treeview widget, rather I have gone directly to the Scrolled treeview.
What I have been able to do is to support the placement of the widget in a window with a default of one column in addition to the tree column. By invoking the column editor you may change many of the characteristics of the widget such as the column size and heading, as well as the number of columns. It also allows one to reorder the columns. Note that the column that contains the tree has the index of “#0” and must remain the first (left-most) column.
When the widget is created or when a column is added the configuration option “stretch” is set to 0 (not stretchable). This means that the widget will not behave as I expect when using relative placement and the window size is changed when executing the Python code. The enclosing widget with the scrollbars will either have a blank area to the right of the last column if the window is enlarged or the last column will not fully show. To get the more desirable behavior, go into the Column Editor in the Widget menu and make at least one of the columns stretchable.
While I do support the ttk entry widget, I don’t see any reason to recommend using it because I am unable to change the widgets font and I don’t like being stuck with the TkDefaultFont. Strange to say the Ttk Combobox, below, is rumored to be based on the TEntry widget and I am able to manipulate the font size using the style facility.
The combobox requires a list of selectable values. These are most easily specified from the Set Values entry of the Widget menu. When invoked from the menu a scrolled text box appears and the values are specified by entering them one per line in the text box and then selecting the check mark.
Values can also be set in the “init” function in support module using code like:
w.TCombobox1['values'] = ('USA', 'Canada', 'Australia')
My style problem with the TCombobox is that while I can use the style mechanism to change the font of the entry field in the combobox I have not found a way to change the font of the drop down area containing the values.
TRadiobuttons and Radiobuttons act pretty much the same. One specifies several of the widgets which are linked by specifying the same variable for all. It is necessary to specify a different value for each radiobutton. One can also specify an initial value for the group. For TRadiobuttons the values and variables can be specified from the Widget menu as well as in the Attribute editor.
I was surprised to discover a couple of strange things about the way text is handled with Ttk widgets. There are several Ttk widgets, among them TButton, TMenubutton, Tlabel, TCheckbuttom, and Tradiobutton, which have both properties of “-text” and “-variable”. Using the Attribute Editor you can specify the value of the Text to be displayed in PAGE when you are laying out the GUI. However, if you then specify the variable attribute, the text attribute is changed to the zero length string. I guess that that is because the variable you named is undefined. But also the width of the field containing the text may be set to zero length. So, for instance, Tlables appear to have zero width unless you have changed the width prior to specifying the variable. A Tbutton merely displays blank text and TRadiobuttons squeezes down to just the button. TCheckbuttons behaves similarly to TRadiobuttons.
When you generate the Python code the widgets will again appear to have no text and maybe have no width unless you have set a non blank value into the Tkinter variable. Tk widets including Button, Message, Label, Checkbutton, and Radiobutton behave much the same way.
The Listbox widget has the option “listvariable” which one would expect to behave exactly like one of the Tkinter variable classes. However, the Tcl documentation specifies that the listvariable must contain a list of values to be displayed in the listbox and the possible Tkinter variable classes are BooleanVar, StringVar, IntVar, and DoubleVar. By experimentation I have found that by specifying the var to be StringVar and setting its value to a tuple of strings will cause each member of the tuple to appear as an entry in the listbox. I am rather surprised at this but glad to find something that works.
The following code
def set_Tk_var():
global rrr
rrr = StringVar()
rrr.set(('a','b','c','d','e'))
results in a scrolled list box looking like:
The Spinbox widget has the option values which contains a list of values presented in the widget as the arrows manipulated. They are set using the Widget menu item “Set Values”. When invoked from the menu a scrolled text box appears and the values are specified by entering them one per line in the text box and then selecting the check mark.
Tk does strange things when one tries to modify the narrow dimension of a scale widget (the height of a horizontal scale or the width of a vertical one). So PAGE does not allow one to modify the narrow dimension during the design phase and restricts the Relative Placement in the Python code to prevent changes in the narrow dimension.
Support for the ttk::sizegrip widget was included in Version 4.0. Merely select the widget from the Widget Toolbar and drop it anywhere within the Toplevel frame but not on top of another widget; it will bounce to the lower right corner. Were you to drop it on say a notebook widget, a weird result would occur like landing in the wrong place but doing the right thing.
I had difficulties with using Sizegrip with PAGE windows. It works fine with the Python Console and the Menu Editor, but I never got a truly satisfactory result with Widget Tree or or the Widget Toolbar. I left it with the Widget Toolbar but not with the Widget tree. To be revisited.
Once the GUI has been defined, the next step is to generate the Python code which will realize the GUI. This is done from the Gen_Python submenu of the main menu. This will generate a hopefully executable Python module and display it in the Python console. Starting in version 4.0, the generated code will contain comments with PAGE and Tcl version information and a timestamp.
Beginning with version 4.2, the Gen_Python submenu is used to generate two Python modules. <name>.py and <name_support>.py, called the support module, as discussed in the section on Rework. The intention is that all or almost all hand generated code will be in the support module. What happens on execution is that the GUI class will be instantiated which means that the GUI will appear on the screen and then control will pass to the init function in the support module where the necessary code is written to support the function desired with the GUI, i.e., the application.
Running the GUI means executing the GUI inside PAGE to see what it will look like in the Python environment. Remember you have not build a complete application, just the GUI.
The generated GUI module is written in such a way that it will run stand alone as a script provided that all the necessary stuff is present. For instance, many of the widgets will have references to command functions and callbacks that need to be present at least in skeletal form for the generated Python to run stand alone. They may also reference Tkinter variable classes which must be defined for the Python to execute. That code will be included in the support module along with the code to link the GUI module and the support module.
Let me discuss the skeletal functions first. Function references may be referenced in several ways. If the function name is given the skeletal function will be created in the support module. An example would be to specify the command attribute in PAGE as “george”. In that case, the skeletal support function “george” would be created in the support module. If the specification were given as “self.george”, the skeletal module would created as a class function within the GUI class. Finally, if another module were specified as in “app.george” PAGE would not create a skeleton function at all; your on your own to create and import the “app” module. From this you can see the need to create the support module before trying to execute the GUI module.
Similarly, Tkinter variable classes are defined or the GUI class or in the support module depending on the presence or absence of “self.” at the beginning of the specification. If specified in the support module, code is included to insure that the class is created before the GUI execution references the class.
Because the use of “self.” in specifying functions and Tk variables will require use code to be added to the GUI module, I avoid them in my usage of PAGE. Such specifications work against the benefits of the rework facilities.
I frequently execute the GUI module to see how the Python version of GUI looks. To that end, the support module is generated with very minimal skeletal functions in order to check the appearance of the GUI by running from the Python console. The final lines of the GUI module are:
if __name__ == '__main__':
vp_start_gui()
which will call vp_start_gui when the GUI module is executed. The key is vp_start_gui which is generated automatically. It contains some code like:
import unknown_support
def vp_start_gui():
'''Starting point when module is the main routine.'''
global val, w, root
root = Tk()
root.title('New_Toplevel_1')
root.geometry('600x450+650+150')
unknown_support.set_Tk_var()
w = New_Toplevel_1 (root)
unknown_support.init(root, w)
root.mainloop()
The title above reflects the title attribute of the Toplevel window and, of course, the geometry will reflect the location and sizes you specify in placing the toplevel widget.
When you select the toplevel widget and Generate Import Module from the menu, the Python Console will appear, filled with the generated code for the supporting module named “<name>_support.py”. This file will contain skeleton functions and Tkinter variables needed. This file will contain the principal code for the application. This is generated automatically once per application.
When you select the toplevel widget and Generate Python from the menu, the Python Console will appear, filled with the generated code. You can push the run button and execution will be attempted. This will automatically save the generated code into a ”.py” file where the root name matches that of the tcl file which is also automatically saved. When running from the Python Window, line output from the GUI is directed to the lower window of the Python Console.
A final word about running in the Python Window is that the ”.tcl” file will be automatically saved as well as the python file. If no name has been selected for the project, then a file output window will open and you will be presented with a window with which to specify the tcl file name, the root of which will be used for the python file name; it is a project name. The tcl file can be used as an argument to PAGE allowing one to later pickup where he left off.the script
Execution of the Python GUI is caused by either selecting the “Run” button at the bottom of the Python GUI or by typing Control-R. It can also be run directly by the Python interpreter.
The function “init” is the place to initial things after the GUI is mapped.
Often the user will want to build applications which have more than one top level window. Since PAGE is built for the specification of only one such window how does the user proceed? I think that the best approach is to create separate modules for each top level window and have the main routine import them using import statements. The windows can then be created using the create function in the modules. This approach was used for the Vrex example above. Here, I used PAGE to build skeletons for two separate program modules, the main vrex program and the vrex_help module, and coupled the two by having vrex, the main module, import vrex_help and invoke the help window when the “Help” button was selected with the statement:
import vrex_help
def help():
vrex_help.create_Vrex_Help(root)
Of course, there is very little interaction between the two programs which simplifies things in this case. As in the example below, the argument “root” ties the help window to the main window.
The same technique was used in the progress_bar example which shows more interaction between the windows including the control of the progress bar window from inside the main routine. Here the two modules are main.py and progress_bar.py. In main.py we have
import progress_bar
self.bar = progress_bar.create_Progress_Bar(root)
Here pass to the create routine the parameter root which ties the two windows together and the create routine returns the Progress_Bar object which allows the main GUI to access all of the functions and attributes of the Progress_Bar object, in turn allowing the main GUI to advance the bar and to close the progress bar.
Special functions are created in the python code to facilitate the creation and destruction of the window.
w = None
def create_Progress_Bar (root):
'''Starting point when module is imported by another program.'''
global w, w_win
if w: # So we have only one instance of window.
return
w = Toplevel (root)
w.title('Progress_Bar')
w.geometry('301x129+472+154')
w_win = Progress_Bar (w)
unknown_support.init(w, w_win, param)
return w_win
def destroy_Progress_Bar ():
global w
w.destroy()
w = None
Obviously, if one wants to pass parameters to the __init__ function of the window, then one must modify the parameter list to the create function above and to the call to __init__ in the above:
def create_Progress_Bar (root, other_args, ...)
w_win = Progress_Bar (w, other_args, ...)
Also, one may pass a parameter to the init function in the support module. This parameter may be any Python data type - ,integer, float, etc., as well as lists, tuple, and dictionary. So it is really a variable length parameter list. For instance, you might have code like the following which I used in the Clone example :
p_dict_1 = {'geom': "+200+650", 'instance': 1, 'color' : 'firebrick'}
p_dict_2 = {'geom': "+1000+650", 'instance': 2, 'color' : 'plum'}
def open_two():
print "open_two starts"
firebrick = called.create_Called(root,param=p_dict_1)
plum = called.create_Called(root,param=p_dict_2)
I suggest comparing the directories, progress_bar and rework_progress_bar to see how I modified the program Progress Bar to conform with the new rework scheme.
This section describes how to change the cursor when in long running sections of an application. Changing to a busy cursor gives some feedback to the application user who otherwise may think that the application is hung, not doing anything.
One includes the following code at the module level of the support module:
# Code added to allow one to change default cursor to a busy cursor.
# Variables added manually to indicate long processes based on code by
# Greg Walters in his python programming examples. These routines
# also can be seen in the Greyson book pg. 158.
busyCursor = 'watch'
preBusyCursors = None
def busyStart(newcursor=None):
'''We first check to see if a value was passed to “newcursor”. If
not, we default to the busyCursor. Then we walk through the
busyWidgets tuple and set the cursor to whatever we want.'''
global preBusyCursors
if not newcursor:
newcursor = busyCursor
newPreBusyCursors = {}
for component in busyWidgets:
newPreBusyCursors[component] = component['cursor']
component.configure(cursor=newcursor)
component.update_idletasks()
preBusyCursors = (newPreBusyCursors, preBusyCursors)
def busyEnd():
'''In this routine, we basically reset the cursor for the widgets
in our busyWidget tuple back to our default cursor.'''
global preBusyCursors
if not preBusyCursors:
return
oldPreBusyCursors = preBusyCursors[0]
preBusyCursors = preBusyCursors[1]
for component in busyWidgets:
try:
component.configure(cursor=oldPreBusyCursors[component])
except KeyError:
pass
component.update_idletasks()
# End of busy cursor code.
and the following lines of code are inserted in init in the support module:
global busyWidgets
busyWidgets = (top, )
The first line goes in near the top of the function and the assignment to busyWidgets is inserted after the root object is created. In one of my applications the function init looks like:
def init(top, gui):
''' Function to create the thread for periodically updating the GUI.'''
global t
global w, top_level
global busyWidgets
w = gui
top_level = top
t = threading.Thread(target=fill_window,)
t.start()
busyWidgets = (top, w.Scrolledtext1)
The final line above sets the global variable busyWidgets to be a tuple of those widgets I wish to display the busy cursor. This is from the example WCPE where I want the busy cursor to appear in the top level window as well as the Scrolledtextbox.
When starting a section of code which is likely to be long running, a busy section, insert the following at the start:
busyStart()
When leaving a busy section make the following the last statement():
busyEnd()
Obviously, an application could have numerous busy sections and they might coincide with particular functions or not.
This code can be generalized for usage of any of the Tkinter cursors.
When one feels confident in using PAGE, he looks at the code patterns generated by PAGE and modifies the code for effects not anticipated in PAGE. The philosophy of PAGE is that there is a large and intimidating body of information needed to start building a GUI. PAGE encapsulates that information and produces working code. At that point the user can see the direction the flow is taking and can easily customize the code at the python level.


S1 Fig
Theoretical 2D-PAGE gel of conserved proteins match with Taenia solium secretome (squares when this protein is found in 2 cysticerci cultures, circles when this protein is found in 3, triangles when this protein is found in 4 and the star when this protein is found in all cysticerci cultures). (TIF)
Click here for additional data file.


An LDM data-product has two components: metadata and data.
The metadata component of a data-product has the following components:
The data component of a data-product is completely arbitrary: it may be text, or binary data, or a mixture. It must have a finite size, however, and that size must be representable in the data-product size component of the associated data-product's metadata.


signal-exit
When you want to fire an event no matter how a process exits:
- reaching the end of execution.
- explicitly having
process.exit(code)
called. - having
process.kill(pid, sig)
called. - receiving a fatal signal from outside the process
Use signal-exit
.
var onExit = require('signal-exit')
onExit(function (code, signal) {
console.log('process exited!')
})
API
var remove = onExit(function (code, signal) {}, options)
The return value of the function is a function that will remove the handler.
Note that the function only fires for signals if the signal would cause the proces to exit. That is, there are no other listeners, and it is a fatal signal.
Options
alwaysLast
: Run this handler after any other signal or exit handlers. This causesprocess.emit
to be monkeypatched.


Luke Evans
About
Portfolio
Contact
About Me
Welcome to my website!
My name is Luke Evans. I was born and raised in Gold Hill, North Carolina on a Tenessee walking horse farm.
After leaving college I wanted to get my feet wet in multiple industrys to figure out what I liked.
I've worked construction, the restauraunt industry, car sales, and event setup/management.

I made the leap and applied to one of my favorite video game companies (EpicGames) for an entry level QA position working on Fortnite Save the world.
Soon after I moved to the Performance/Memory team as a software tester to help develop and optomize Fortnite Battle Royale, and Creative mode.
I helped bring Fortnite to Switch, Android, and iOS.
I also helped with crossplatform efforts to bridge the gap between platforms helping connect millions of people.
For the past three years I have been working diligently to help make Fortnite one of the best video games in the world!
I no longer work on Fortnite.. but I'm on to bigger and better things. I've created my own Ad agency that helps businesses of all sizes with lead generation! Take a chance on me and my services and I promise I won't let you down.
These are some of the things I enjoy:
Memes
Dancing
Competitive Gaming
First/Third person shooters
Playing with my Doberman, Bella-Mia
Pop Culture
Rain on a tin roof
Competitive swimming


Demo version
Please feel free to testing the system. Download this page on both computer and mobile device, make sure the system usability and speed.
Record fields can be customized according to the needs of the customer project.
In the simplest case, this system can be used as a messenger.
The system operates on SSL protocol, which ensures the credibility of the source and the sender, and the message is encrypted customer's unique algorithm, which is the second level of security


The Designer Bring your design vision to life in clean, semantic HTML5, CSS, and JavaScript — with the Webflow Designer.
The Designer Bring your design vision to life in clean, semantic HTML5, CSS, and JavaScript — with the Webflow Designer.
CMS and Ecommerce Build completely custom databases for dynamic content types, including online stores.
Interactions Easily create immersive interactions and animations represent the company in an easy way.
Front-End Website
HTML and CSS
Not Responsive
Front-End Website
HTML, CSS and Javascript
Mobile Responsive
Full-Stack Website
HTML, CSS, Javascript and Node-Js
Mobile Responsive
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quisque non tellus orci ac.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quisque non tellus orci ac.
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quisque non tellus orci ac.


REPBASE UPDATE
(C) 1997-2002 Genetic Information Research Institute
All rights reserved
Reference collections represent published examples or consensus
sequences of repetitive elements from different eukaryotic
species.
All reference collections are in flat file FASTA format.
Index to reference collections:
- athrep.ref
- Reference collection of A. thaliana repetitive elements.
- (Release 6.4.0)
- celrep.ref
- Reference collection of C. elegans repetitive elements.
- (Release 4.2.9)
- drorep.ref
- Reference collection of D. melanogaster repetitive elements.
- (Release 4.4.5)
- fugrep.ref
- Reference collection of fugu repetitive elements.
- (Release 1.0.0)
- humrep.ref
- Reference collection of human repetitive elements.
- (Release 8.2.0)
- invrep.ref
- Reference collection of invertebrate repetitive elements;
not including C. elegans or D. melanogaster.
- (Release 4.0.8)
- mamrep.ref
- Reference collection of mammalian repetitive elements.
- (Release 5.3.7)
- oryrep.ref
- Reference collection of O. sativa repetitive elements.
- (Release 1.0.7)
- plnrep.ref
- Reference collection of plant repetitive elements;
not including A. thaliana or O. sativa.
- (Release 4.3.1)
- pseudo.ref
- Reference collection of pseudogene repetitive elements.
- (Release 1.1.4)
- rodrep.ref
- Reference collection of rodent repetitive elements.
- (Release 3.4.6)
- simple.ref
- Reference collection of the most abundant simple sequence
repeats in primates.
- (Release 3.2)
- vrtrep.ref
- Reference collection of vertebrate repetitive elements;
not including zebra fish.
- (Release 4.01.04)
- zebrep.ref
- Reference collection of zebra fish repetitive elements.
- (Release 4.1.5)
- humsub.ref
- Reference collection of human repetitive subfamilies.
- (Release 1.1.1)
- invsub.ref
- Reference collection of invertebrate repetitive subfamilies.
- (Release 1.0.0)
- mamsub.ref
- Reference collection of mammalian repetitive subfamilies.
- (Release 1.0.0)
- appendix/
- Appendices to the Reference collection of repetitive
elements. Contain sequences that have been part of the
Reference collection in the past but have since been
removed or are alternate submissions for existing data.
Direct comments and questions to:
Jerzy Jurka
<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>Last update, September 13, 2002.
Paul Klonowski
Webmaster
webmaster@girinst.org


{% extends "base.html" %} {% block title %}DrugShot-Help{% endblock %} {% block content %}
Below we provide a short introduction about the underlying datasets used by DrugShot. These datasets are available from the download section. Here we have a short introduction of the datasets that are being used by DrugShot. The data used by DrugShot are
AutoRIF
AutoRIF contains associations between small molecules and publications. AutoRIF is automatically generated, and it currently contains 7,992,745
associations. We constructed AutoRIF by querying the NCBI E-utilities API with drug names (each matched with a MeSH identifier) and collected the PMIDs for each query.
DrugRIF
DrugRIF is an alternative file that contains associations between small molecules and publications. DrugRIF is automatically generated, and it currently contains 1,996,791
associations. We constructed DrugRIF by querying PubMed with InChIKeys (each with an associated small molecule name) and collected the PMIDs for each query.
Drug-drug L1000 Signature Similarity Matrix from SEP-L1000
The drug-drug signature similarity matrix used by DrugShot contain pairwise correlations between drug-induced gene expression profiles.
The correlations were calculated using cosine similarity between drug-induced gene expression signatures calculated using the Characteristic Direction method.
This pairwise drug similarity matrix is used to transitively associate drug sets returned from the original DrugShot query with
their most correlated co-expressed drugs.
Drug-drug Literature Co-mentions Matrices
The AutoRIF and DrugRIF drug-drug literature co-mentions matrices contain pairwise drug-drug similarity based on the co-occurrence counts of drugs in each respective association file.
The matrices contains the counts of how often two drugs co-occur in the same query list.
The query box of DrugShot contains two free text input fields where users can enter multiple search terms in combination. The top field is for terms that will be converted to associations with drugs. The bottom free text input field is for terms that the user wishes to exclude from the search. For example, the figure above describes how to conduct a search if we want to identify drugs that are most relevant to the search term “liver fibrosis” but not "cancer".
The input field labeled "Top Associated Drugs to Make Predictions" sets the number of top drugs from the query to use for generating the predicted lists. This value can be changed later after the query completes.
The query time varies from instantly returned results to about 30 seconds. The time for the query to complete is mostly dependent on the number of associated publications found for the search terms. A very general search term such as "cancer" or “diabetes” will result in a longer wait time than a more specific search term such as "hair loss". Below the free text input fields, several sample queries are provided. Clicking on these terms triggers a query.


Bring your tabs to life with a simple plugin to toggle between content via tabs. This component required metro-tab-control.js
.
To make tabs tabbable, create a .tab-control
with unique ID for every tab and wrap them in .frame
.

Tab 1

Other Tab

...

...

...

Now you can create tab control in tab control.
The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.
Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit...
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus quis mollis arcu. Nam nibh nisi, tincidunt non tristique ut, venenatis quis sapien. Proin at sagittis magna, non pharetra nisi.
The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.
The standard chunk of Lorem Ipsum used since the 1500s is reproduced below for those interested. Sections 1.10.32 and 1.10.33 from "de Finibus Bonorum et Malorum" by Cicero are also reproduced in their exact original form, accompanied by English versions from the 1914 translation by H. Rackham.
To activate tab-control with data-api you can add attribute data-role="tab-control"
to component.

...

Call tab control manually with:
$('.tab-control').tabcontrol();
You can add tab content showing effect with effect
parameter.

...

$('.tab-control').tabcontrol({ effect: 'fade' // or 'slide' });
When tab switched, tab control triggered event change
. You can bind this event to additional manipulating with tab content.
$('.tab-control').tabcontrol().bind("tabcontrolchange", function(event, frame){...});


The examples in this section have been tested on a real PIC. The circuit for all examples is:
A 47nF to 100nF capacitor is recommended between MCLR and ground. this will avoid unwanted resets when noisy loads or power supplies are used.
No PCB layout is given, you are free to build your own PCB design.
All examples in this section have a number at the beginning of each line. The numbers are there only for reference purposes and should not be included in your actual source files.


Lumify: User Admin
Me
User ID
User name
Privileges
Read
Edit
Publish
Admin
Authorizations
Add Authorizations
Value:
Add Auth
Delete User


All Classes
Packages
com.demshape.factorization.application
com.demshape.factorization.dataset
com.demshape.factorization.datastructure
com.demshape.factorization.lossfunction
com.demshape.factorization.metric
com.demshape.factorization.model
com.demshape.factorization.tools


| About Dailyrotten |
|
Feedback
If you like this page, hate it, or would like to suggest changes,
<EMAIL_ADDRESS>is listening. This page
is experimental and somewhat different from what we usually offer, so please
do send your feedback.
Adding Stories
If you are a rotten newshound and you would like to suggest a story,
visit our submit page to
send us the URL. Stories that are accepted will have your name credited.
Posting Comments
In order to post comments to stories, you will have to
create an account.
Accounts will generally be validated within 24 hours, and of
course will be disabled if there is abuse.
Viewership
On the first full day this page went live, 100,000 people visited this Rotten
News page. Of course that was the day after the WTC attacks, so that number is
somewhat distorted. Right now this page gets between 50,000 and 75,000 people
every day.
Linking
We encourage everyone to link to this page; if you like it, others probably
will as well.
Other Rotten
Rotten
Gaping Maw
Celebrity Morgue
Mugshots
Rotten Store
Rate My Poo
Rate My Kitten
Rate My Finger
Penny Postcards
Phallic
Boners
Home
Make Dailyrotten your start page
|
|
|
January 16, 2002
Photos on rotten.com upset New Zealand
New Zealand One | Submitted by: Jenny
Photos submitted to rotten.com have sparked controversy in New Zealand.
"A slaying that shocked New Zealand over 12 years ago is back in the
spotlight on an American website [rotten.com]. The website is showing
gruesome police photos of David Fuko, a young Tongan man hacked to
death with a machete in an Auckland shopping centre."
|
|
Read article...
|
|
Doctor Dogmeat muzzled
Reuters | Submitted by: Soylent
More developments on the dogmeat front. The owner of the venue chosen
by dogmeat promotors has stopped a gathering from occurring: "Some 100
dogmeat restaurant owners were to launch their federation on Monday
with an appearance by a college professor dubbed "Doctor Dogmeat" who
boasts 350 canine recipes and a development strategy for
the Korean dogmeat industry."
|
|
Read article...
|
|
Model bites rapist
Mainichi Daily News | Submitted by: anonymous
"Kato bit down as hard as she could, grinding her molars into the
mouthful of meat she says had a texture a bit like chicken gizzards.
Blood spurted from Kato's mouth as her evil assailant reflexively
tried to push her away only to find the model refused to release her hold.
Though unable to bite through to the end, the beast was left with a
large chunk of his most precious part merely dangling like a turkey's
giblet. He ran off and the young model was saved."
|
|
Read article...
|
|
The CIA's business
Independent | Submitted by: Soylent
What does the CIA do with all that money? Some of it is strategically
invested, and one of these investments has some UK lawmakers worried:
"One Labour MP said the projects raised major questions about whether
these relationships were in Britain's interests. Alan Simpson, a senior
member of the left-wing Campaign group of backbenchers, said: "Where
does this take the CIA? If we're giving them the ability to plot
grid references to any house in Britain, it raises fundamental
questions about whether this is in the national interest."
|
|
Read article...
|
|
Worst patents of all time
Scientific American | Submitted by: Soylent
The US Patent and Trademark office has issued some rather asinine patents
in the past twenty years. So what unscrupulous companies have done is patent
things in common practice for which no prior patent abstract exists. Even
if that practice is obvious to persons "skilled in the art", they may not be
obvious to patent examiners. Hence, the infamous 3D Pie Chart patent.
|
|
Read article...
|
|
More on the Kerkorian $323K/mo child support
The Smoking Gun | Submitted by: Soylent
Itemized for your inspection!
"Lisa Kerkorian, bless her heart, helpfully filed this monthly expense
breakdown, a document that should immediately be rushed to the Library
of Congress and placed in a vitrine alongside other important American
artifacts like the Declaration of Independence."
|
|
Read article...
|
|
Toddler entombed in concrete
Associated Press | Submitted by: Ross
A woman who dismembered her three year old daughter and entombed
her in concrete has been sentenced to 25 years prison in Los Angeles.
|
|
Read article...
|
|
|
|
|


We have a global network offering exclusive apartments and luxury real estate services to our clients.
Launched in November 2007, MaxGold is a company dedicated to those who wish to rent or buy a luxury
apartment or office, along with those who are passionate about prestigious real estate and curious to
discover new trends and interior solutions.
At times real estate can be a part of our history, at times inspirations from new architectural concepts,
or at other times simply amazing examples of how you can transform a space with the right interior design
choices.
The world is huge, with many languages, and each country has their own diverse culture. Nevertheless,
scanning through our listings you will discover two corresponding elements: the importance of what we call
luxury and the idea of beauty.
Find a new luxury property for rent or purchase has never been an easy feat. But we made it simple for you.
We explore every corner in search of the best. You can rely on top quality services when you become our customers.
We have created a unique combination of luxurious, spacious, fully
furnished apartments with 24-hour service and a range of facilities such as spa, breakfast delivered
to the apartment, luxury transport services.
Bright, stylish and modern apartments are ideal for traveling couples, families with children, groups
of friends and members of the business world.
We offer a high standard apartments in the most desirable and beautiful places of your city.
MaxGold understands that the attitude of luxury is all about finding the best things for you.
And for us, it starts with a focus on making your time feel unforgettable.
MaxGold is pleased to present a luxurious offices.
These unique offices has been decorated to a very high standard in order to meet the requirements of
the most demanding tenants. The property is located in the building's office area with a separate,
representative reception and a designated place for the company's logo.
The MaxGold offices are one of the most luxurious and prestigious choice in the world. It also
include underground area with a fitness club, pool, squash court, and a parking level. Finally, allow
access to a spa and a wine cellar.
The locations are the heart of cities in the most popular areas.


BEFORE this session, for each of the following videos or reading:
This video [9:36 minutes] extends the accumulator pattern from the summing pattern that you have seen previously to include the counting and in-graphics accumulator patterns.
What is Unit Testing?shown to the right, taken from Unit Testing chapter of Software Testing Fundamentals.
Why Do Unit Testing?shown on the right, taken from this question on Stack Overflow.
After doing the above, but before doing the in-class project (in PyCharm):
When you are ready to begin the in-class project (in PyCharm):
Follow the instructions for doing the Start-the-Session videos.
Do NOT begin the exercises in PyCharm until you have followed the instructions on the above page!


Apple TV+ Launches With New $49.99 Annual Subscription Option, Save $10 Per Year
by Joe RossignolApple has quietly introduced an annual subscription option for Apple TV+, priced at $49.99 in the United States, $59.99 in Canada, £49.99 in the United Kingdom, and €49.99 in many other European countries.
In the United States, the $49.99 annual subscription provides a savings of $9.89 per year compared to a $4.99 per month subscription, which totals $59.88 in a year. In other words, the annual subscription effectively provides 12 months of Apple TV+ access for the price of 10 months for paying upfront.
To switch to the annual subscription plan on an iOS device, open the TV app, tap on your profile in the top-right corner, tap on Manage Subscriptions, tap on Apple TV+, and select the one-year option. Those with a free one-year trial will not be billed until expiration of that trial on October 31, 2020 or later.
Apple TV+ launched today and here is everything to know.


This book was created to:
- Give back to a growing community
- Teach a subject, to master a subject
- Provide maximum understanding, with minimal effort
Cryptocurrencies can be complex, but understanding them does not need to be difficult or painful. By the end of this book you will have a deep enough understanding to have meaningful conversations with anyone about cryptocurrencies.
Learn About Cryptocurrencies
This book is intended for anyone looking to learn about cryptocurrencies. This book is not intended to provide any investment advice or as a recommendation regarding a course of action. It is not a "how to" or instruction manual. It is intended to provide information and illustrations for educational and entertainment purposes.
A Living Book
This book will continually be edited, updated, and refined as needed and with feedback from readers. It will remain free and open to the community under the creative commons attribution license which you can read about in a human readable version.
This book is divided into categories:
- Chapters - single pages that can be read like a lesson
- Posts - news, updates, and information that doesn't fit in a trimmed lesson plan but readers may find interesting


FROM: BALOY SITHOLE. TELL: 27-835-184-080 ATTN:DIRECTOR/C E O, I know you will be surprised to read from me, but please consider this as a request from a family i dire need of assistance.First, I must introduc myself. I a MR. BALOY SITHOLE. from Angola. I am the first and only son of BRIGADIER SITHOLE JONES. I am presently resident in South Africa. I got your contact address from a business directory in Johannesburg Chamber of commerce and Industry. On behalf of my widowed mother MRS. ELIZABETH SITHOLE, I desided to solicit for your assistance to transfer the sum of US$21.5 MILLION( TWENTY ONE MILLION FIVE HUNDRED THOUSAND UNITED STATES DOLLARS)inherited from my late father, into your personal/ company's account. Before my fathers' death, he was a Brigadier in charge of Arms and Ammunation procurement for the Angola Army. In his WILL, he specifically drew my attention to the said sum of money which he deposited in a safe box of a private Security Company in Johannesburg- South Africa in a treasure box, fully documented in my name.  I DEPOSITED THE BOX CONTAINING THIS MONEY IN A SECURITY COMPANY IN JOHANNESBURG, SOUTH AFRICA. DURING THE WAR, I WAS VERY DEDICATED AND OFFICERS AND GOVERNMENT FUNCTIONARIES WERE BUSSY HELPING THEMSELVES WITH GOVERNMENT FUNDS AND PROPERTIES AND SENDING THEM TO FOREIGN COUNTRIES. DUE TO THIS, WHEN I AND MY FORMER SPECIAL ADVISOR TO THE PRESIDENT WERE ASSIGNED BY THE PRESIDENT (EDUARDO SANTOS) TO PURCHASE ARMS IN SOUTH AFRICA, WE SAW THIS AS A GOLDEN OPPORTUNITY AND DIVERTED THE MONEY AND DIVIDED IT. i GOT A TOTAL SUM OF US$21.5 MILLION. IN CASE OF MY ABSENCE ON EARTH, AS A RESULT OF DEATH ONLY, YOU SHOULD SOLICIT FOR THE FUND FOR INVESTMENT PURPOSES.' >From the above, you will understand that the lives and future of my family depens on this money, as such I will be grateful if you can assist us. We are now living in South Africa as political Asylum seekers and financial laws and regulation of the Republic of South Africa do not permit us financial rights to such huge sum of money. In view of this, I cannot invest this fund in South africa, hence i am prepared to offer you 20% of the total fund, while 10% will be set aside for local and international expenses and 70% will be for my family and me. Finally, modalities on howthe transfer will be bone will be conveyed to you once we have established trust and confidence between ourselves. Please treat this matter as very urgent. Best regards, BALOY SITHOLE.


General support queries. User Guides: https://support.komodoplatform.com/ Support staff: Angelina#6231 gcharang#6833. If you want to ask JL777 a question, use the #ask-jl777 channel.
100 messages
Before 05-Dec-19 12:00 AM
glx18-Aug-18 08:54 AM
@Nabob so I should transfer my full balance to another wallet?
Nabob18-Aug-18 08:55 AM
send your whole amount to your same address (RAuoxUJLrH3TmS3JpxPxbdpkT8hNncPPNN)
demols18-Aug-18 12:12 PM
Are the kmd spv servers down to use agama in lite mode ?
Nabob18-Aug-18 12:35 PM
spv servers are working fine, just now tested
jspook1619-Aug-18 04:06 AM
@CHMEX thank you
AkiraX19-Aug-18 05:42 AM
hi
how do i clean install barterdex in linux?
Nabob19-Aug-18 06:59 AM
move folder ~/. BarterDEX to backup and launch bdex again
How to add new coins to 'startup' in BarterDEX. The saved coins will load automatically each time you login to BarterDEX. BarterDEX is an atomic swap based d...
try that
on the latest barterDex, the Coin Management changed
Studio 3.1419-Aug-18 04:03 PM
Big thanks @jspook16
jspook1619-Aug-18 04:04 PM
yeah no problem.
hope that fixes your issue
Sabretooth19-Aug-18 06:08 PM
Could I get help in collecting interest, I am using lite mode and collection fails on 2 separate windows computers.
ok Ill try that then I just downloaded the last version from their website so somebody needs to update the link then
thanks
1
maki19-Aug-18 06:29 PM
Hi How to claim kmd stake reward in windows command line wallet?
Is there any special command?
Sabretooth19-Aug-18 06:31 PM
I still can't get it to collect.
shepherdElectrumSendPromise error
Hermes19-Aug-18 06:33 PM
@maki The GUI basically sends the balance to your own public address , so if you send your balance to your same public address in the CLI it will have the same effect.
maki19-Aug-18 06:34 PM
thx so I have to send to the same address ? or Can it be new created empty address
??
Hermes19-Aug-18 06:35 PM
You can send it to your same public address.
@Sabretooth We haven't experienced this with the new versions of the wallet. Please send us a support ticket with your OS specifications at<EMAIL_ADDRESS>, also make sure your PC clock is set correctly
maki19-Aug-18 06:36 PM
what about if it send to different new empty addresss???
Will it claim the reward or not ?
you wrote I can send but the question is I can or I have to send to the same address to claim reward?
Hermes19-Aug-18 06:42 PM
you need to send it to the same address to claim the reward this is a network rule
jl777c19-Aug-18 06:42 PM
not true
it can be sent to any address
just spending the utxo automatically creates the reward, which goes into change
plz update knowledge base or whereever that has the wrong info about having to send to the same address
maki19-Aug-18 06:46 PM
so where the reward is sent to the old or new address?
Hermes19-Aug-18 06:47 PM
if it's on your same wallet as JL mentions this won't have any effect you could do it in either
maki19-Aug-18 06:47 PM
asking becouse I have just one chance
Hermes19-Aug-18 06:49 PM
the reward claiming feature will work in any wallet where you have your private keys ...so in this case for the CLI you are good to go and use a new address or the old address as you refer.
maki19-Aug-18 06:51 PM
ok thanks for your help
jl777c19-Aug-18 06:52 PM
the reward ends up as change
the reward ends up as change
maki19-Aug-18 06:53 PM
So it wil stay in address "A" as I good understand(edited)
jl777c19-Aug-18 06:54 PM
depends on how you are setup with SPV or native or native with -pubkey, regardless it will be in your wallet
maki19-Aug-18 06:55 PM
ok thans again
Hermes19-Aug-18 06:59 PM
We recommend using the SPV version of the GUI wallet to claim rewards is user friendlier and it will send the reward to your same public address.
but if you are in native mode you just have to verify the change addresses that are created.
maki19-Aug-18 07:05 PM
have a problem with agama in native mode . All blocks are dowloaded but it still report "please wait activating best chain" it take hours(edited)
Hermes19-Aug-18 07:06 PM
All blocks are downloaded ? but still shows activating best chain?
please send us a screenshot
maki19-Aug-18 07:08 PM
blocks are dowloaded through command line windows wallet so maybe that's the issue
Hermes19-Aug-18 07:09 PM
you are in the CLI right?
well that shouldn't happen try the command getinfo to see if you are on the latest block
./komodo-cli getinfo
maki19-Aug-18 07:16 PM
woring with windows agama 0241 what the right command format
k
got message 9 agama) unable to establish rpc connection
Hermes19-Aug-18 07:19 PM
the right command ? and you have komodod still running in the background check task manager
you are having komodod running in the CLI and in Agama at the same time?
if that's the case that could be the issue.
maki19-Aug-18 07:20 PM
komodod.exe is runing
Hermes19-Aug-18 07:20 PM
I will suggest to shut down Agama and make sure the CLI is not running by doing ./komodo-cli stop
and restart Agama again
maki19-Aug-18 07:26 PM
I did it. The same problem. During agama starts up komodo in native mode komodod.exe also starts but it is as it should be I think


Country Profile
Sample Documents
Foreign Relations Policy Statement Sample Security Council Other (Non ICJ) ICJ
Sheet
/ Position Paper
Resolution
Resolution
Country Profile Foreign Relations Policy Statement Sample Security Council Other (Non ICJ) ICJ
Sheet
/ Position Paper
Resolution
Resolution


(v0.0.0)
No files. Add *.SVG to ./resources/svgs
?
Loaded via jQuery...
Remote Paint Mode
Details / Controls:
Pause
Exit Remote Paint Mode
Starting up...
What do you want to do?
Continue in Simulation mode
Try to Reconnect
Create
Print
Manual


public member function
<queue>
Test whether container is empty
Returns whether the priority_queue is empty: i.e. whether its size is zero.
This member function effectively calls member empty of the underlying container object.
Return Value
true
if the underlying container's size is 0
, false
otherwise.
Example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
// priority_queue::empty
#include <iostream> // std::cout
#include <queue> // std::priority_queue
int main ()
{
std::priority_queue<int> mypq;
int sum (0);
for (int i=1;i<=10;i++) mypq.push(i);
while (!mypq.empty())
{
sum += mypq.top();
mypq.pop();
}
std::cout << "total: " << sum << '\n';
return 0;
}
| |
The example initializes the content of the priority queue to a sequence of numbers (form 1 to 10). It then pops the elements one by one until it is empty and calculates their sum.
Output:
Complexity
Constant (calling empty on the underlying container).
Data races
The container is accessed.
Exception safety
Provides the same level of guarantees as the operation performed on the container (no-throw guarantee for standard container types).


Hi all,
I've been working on packaging emonHub for Ubuntu Snappy, which I think would be a great base for emon on the Pi.
The packaging is going well, but I've been unable to boot the Pi with emonBase attached - I get a boot prompt for a split second and then a lot of garbage on screen. It's as if the emonBase triggered something in the bootloader. Having removed emonBase it boots fine.
Has anyone seen such behaviour? Any ideas how to proceed?
Thanks,
Re: emonHub + emonBase on Ubuntu Snappy
Just a follow-up, I learned that this is likely due to wrong dtb/kernel setup in the default Snappy for Pi image. We're working on enabling overlay dtbs and other bits so this could get hopefully resolved soon.
Re: emonHub + emonBase on Ubuntu Snappy
is the serial port free for the rfm2pi or is it being used for serial console?
I can see ubuntu for arm7 was changed in feb to not enable the serial console at boot,
Re: emonHub + emonBase on Ubuntu Snappy
Found this in uEnv.txt:
This looks like the culprit, I'll try it out without the console= entries.
Re: emonHub + emonBase on Ubuntu Snappy
Changing that didn't help. It seems it never gets past u-boot. It seems u-boot itself is accepting input on ttyAMA0.
Is it written anywhere what kind of setup does the Pi require to work with the RFM96Pi?
Re: emonHub + emonBase on Ubuntu Snappy
It's very difficult to see any detail on your video, but I'm still inclined to think it is a serial console clash, I don't know anything about "snappy" so I'm far from sure, but the screen just filling up that fast (only when RFM69Pi is connected) with garbage is probably caused by the RFM69Pi not understanding the console output at 115200 baud (or any baud) and responding with help text at 38400 which is garbage to the Pi.
The RFM69Pi doesn't really need anything from the Pi other than power, when powered up the firmware runs and outputs to the serial port @ 38400 baud in ascii. The Pi just has to offer exclusive access to the serial port and read what arrives.
Paul
Re: emonHub + emonBase on Ubuntu Snappy
Yeah it just says:
And then garbage. It must be that u-boot is interfacing with the tty, as you say, at a different baud. I need to find out how to stop it doing that.
Snappy, FWIW, is just a new way of distributing Ubuntu and apps for it. But the base system is built from Ubuntu archives wherever possible.
Re: emonHub + emonBase on Ubuntu Snappy
The changelog on the "Ubuntu for ARM7" page I linked to previously says
Removed console=ttyAMA0,115200 from default cmdline.txt (interferes with non-console use of the serial port)
Have you tried removing "console=ttyAMA0,115200" from cmdline.txt? this is a standard procedure to free up the serial port on Raspbian too.
Paul
Re: emonHub + emonBase on Ubuntu Snappy
Removing the console=ttyAMA0 bit from uEnv.txt made it possible for me to connect the RFM96Pi after the OS booted and stuff's working, emonhub's getting messages and all.
I will try and find where to disable ttyAMA0 in u-boot tomorrow. But there's progress, thanks!
Re: emonHub + emonBase on Ubuntu Snappy
Success!
Not a long-term solution, but I managed to get things working. One big difference between the snappy setup is that it uses U-Boot to be able to toggle between two rootfs installs for update and rollback support.
U-Boot has serial support enabled by default, because it is, after all, quite a common way to interface with an embedded board like the Pi. The only way I found to disable it was to set bootdelay to 0, meaning u-boot does not wait for any input but just boots straight away. It's not great, because that means you can't interrupt the boot process using a keyboard (or serial, when you connect it instead of the RFM69Pi, but that's expected with that board, isn't it?).
Anyway, for anyone that wants to try, emonhub is packaged1 for Ubuntu Snappy, and I've built an image2 that you can put in your Pi. I also packaged minicom3 for debugging. User/password is ubuntu/ubuntu, you can go to http://emonpi:4200 to see a minimal web management system. In theory http://webdm.local:4200 should work, too, if avahi does all it's supposed to. You can manage software on the device through it. http://webdm.local:8080 is mosquitto's website that can show you your MQTT traffic.
You can find out more about snappy on the Ubuntu website4, I will try to answer any questions if you have them, too.
Unfortunately the base system itself can't be updated right now because of the proprietary bits on the Pi - so we can't host it on Ubuntu servers. We're working to resolve that.
I'm off to package the bigger bits - emoncms here I come ;)
1 https://uappexplorer.com/app/emonhub.saviq
2 https://owncloud.sawicz.net/index.php/s/ZBjrRlngP0kzQ8a?path=%2FemonPi
3 https://uappexplorer.com/app/minicom.saviq
4 http://www.ubuntu.com/cloud/tools/snappy


For this assignment you will write a paper, prepare a presentation, and deliver that presentation the last week of class.
You will investigate a topic and submit it for approval. The topic is fairly open but naturally should be related to web development and/or web design. You could present a detailed study of a new technolgy or aspect of the web, you could compare and contrast two or three technology choices, you could investigate a topic on web security or e-commerce, or how big data is being used today and the potentials for the future. Or you could present a study of user experience in different website designs, or a comparison of how certain design details impact the usability of a website. Or you could research ARIA and tell us all about why we should or should not include ARIA tags. Or you could provide a retrospective on a past leading technology, what it promised, what it delivered, but then how it fell short to technologies that superceded it (e.g., Java Applets, Flash, or Ruby on Rails).
What is important is that your topic is meaningful and allows you to demonstrate your ability to critically think about some topic related to web development or design and convey an analysis of said topic.
For example, you might research about upcoming new technologies such as ReactJS and present a comparison of it with AngularJS. But it needs to be more than a laundry list. You need to demonstrate an understanding of the two technologies, how they are similar, how they are different, and make a case for why we should use one over the other. It's no good just to compare and constrast without some critical understanding and critique.
Do some hunting around and come up with an idea. Present it to me in an email for approval. There will be no duplicate topics, so the sooner you pin yours down the better.
Once you have been approved, write a 1000 to 2000 word paper on your topic. Pay special attention that the contents of your paper focus on critical analysis and not just describing the topic (we can all read wikipedia). Be sure to proof read your paper. You are invited to have your peers read your papers and give you suggestions and comments, but of course you are doing all of the writing yourself.
https://cwovc.rice.eduI strongly encourage you to check out the Center for Written, Oral, and Visual Communication where you can get free one-on-one advice on your paper and presentation.
During the last week of the course you will deliver a 6 minute presentation on your topic. Presumably you will require some presentation materials to facillitate. These may be slides (you might checkout react.js for this), selected web sites, what ever you would like. Whatever presentation materials you develop, submit these along with your paper. If it's just a list of websites, then submit a text file that has these website urls and a short description (1-3 sentences) of what content you will highlight on the sites (i.e., what will you be doing with these sites, what will you say).
Turnin both your paper and your presentation materials.


| 003:179 Khan | : |
Allah will not leave the believers in the state in which you are now, until He distinguishes the wicked from the good. Nor will Allah disclose to you the secrets of the Ghaib (unseen), but Allah chooses of His Messengers whom He pleases. So believe in Allah and His Messengers. And if you believe and fear Allah, then for you there is a great reward. |
| 003:179 Maulana | : |
Allah will not leave the believers in the condition in which you are until he separates the evil from the good.  So believe in Allah and His Messengers. And if you believe and keep your duty, you will have a great reward. |
| 003:179 Pickthal | : |
It is not (the purpose) of Allah to leave you in your present state till He shall separate the wicked from the good. And it is not (the purpose of) Allah to let you know the Unseen. But Allah chooseth of His messengers whom He will, (to receive knowledge thereof). So believe in Allah and His messengers. If ye believe and ward off (evil), yours will be a vast reward. |
| 003:179 Rashad | : |
GOD is not to leave the believers as you are, without distinguishing the bad from the good. Nor does GOD inform you of the future, but GOD bestows such knowledge upon whomever He chooses from among His messengers. Therefore, you shall believe in GOD and His messengers. If you believe and lead a righteous life, you receive a great recompense. |
| 003:179 Sarwar | : |
God left the believers in their existing state for no other reason than to distinguish the evil-doers from the virtuous ones. God does not inform you of the unseen. He chooses for such information anyone of His Messengers that He wants. Have faith in God and in His Messengers. If you have faith and are pious, there will be a great reward for you. |
| 003:179 Shakir | : |
On no account will Allah leave the believers in the condition which you are in until He separates the evil from the good; nor is Allah going to make you acquainted with the unseen, but Allah chooses of His messengers whom He pleases; therefore believe in Allah and His messengers; and if you believe and guard (against evil), then you shall have a great reward. |
| 003:179 Sherali | : |
ALLAH would not leave the believers in the state in which you are, until HE separated the wicked from the good. Nor would ALLAH reveal to you the unseen. But ALLAH chooses of HIS Messengers whom HE pleases. Believe therefore in ALLAH and HIS Messengers. If you believe and be righteous, you shall have a great reward. |
| 003:179 Yusufali | : |
Allah will not leave the believers in the state in which ye are now, until He separates what is evil from what is good nor will He disclose to you the secrets of the Unseen. But He chooses of His Messengers (For the purpose) whom He pleases. So believe in Allah. And His messengers: And if ye believe and do right, ye have a reward without measure. |
Concepts/Themes Covered: أركان الإسلام > التوحيد > توحيد الله تعالي > مشيئته Pillars of Islam> Islamic> Oneness of Allah> His Will الإيمان > الأنبياء والرسل > الإيمان بهم Faith> The Prophets and the Messengers of Allah> The Belief in Allah الإيمان > الإيمان بالله > الابتلاء والفتن اختبار لإيمان المؤمن Faith> Belief In Allah> The Affliction and the Ordeals are test for the Believer's Faith الإيمان > الإيمان بالله > الدعوة إلى الإيمان Faith> Belief In Allah> The Call for Faith الإيمان > الغيب > الإيمان بالغيب Faith> The Unseen World> The Belief in the Unseen World الإيمان > المؤمنون > ابتلاؤهم Faith> The Believers> Their Affliction الإيمان > المؤمنون > ما أعده الله لهم Faith> The Believers> What has Allah Prepared for them الإيمان > المؤمنون > وعده إياهم Faith> The Believers> His Promise to them العمل > العمل الصالح > التقوى Action(Work)> The Good Deeds>The Piety العمل > العمل الصالح > العمل المفضي إلى النجاح Action(Work)> The Good Deeds>Achtion which Leads to Success
This tool uses eight English parallel translations for the Holy Quran imported from Mr. Clay Smith. You can also visit Qurany Concepts for browsing the Quran themes or topics. If you want to search the Holy Quran for keywords, please visit Qurany Keywords.