| I l@ve RuBoard |
8.2 MenusMenus are the pull-down lists you're accustomed to seeing at the top of a window (or the entire display, if you're accustomed to seeing them on a Macintosh). Move the mouse cursor to the menu bar at the top, click on a name (e.g., File), and a list of selectable options pops up under the name you clicked (e.g., Open, Save). The options within a menu might trigger actions, much like clicking on a button; they may also open other "cascading" submenus that list more options, pop-up dialog windows, and so on. In Tkinter, there are two kinds of menus you can add to your scripts: top-level window menus and frame-based menus. The former option is better suited to whole windows, but the latter also works as a nested component. 8.2.1 Top-Level Window MenusIn more recent Python releases (using Tk 8.0 and beyond), you can associate a horizontal menu bar with a top-level window object (e.g., a Tk or Toplevel). On Windows and Unix (X Windows), this menu bar is displayed along the top of the window; on Macintosh, this menu replaces the one shown at the top of the screen when the window is selected. In other words, window menus look like you would expect on whatever underlying platform your script runs upon. This scheme is based on building trees of Menu widget objects. Simply associate one top-level Menu with the window, add other pull-down Menu objects as cascades of the top-level Menu, and add entries to each of the pull-downs. Menus are cross-linked with the next higher level, by using parent widget arguments and the Menu widget's add_cascade method. It works like this:
The end result is a tree of Menu widgets with associated command callback handlers. This is all probably simpler in code than in words, though. Example 8-1 makes a main menu with two pull-downs, File and Edit; the Edit pull-down in turn has a nested submenu of its own. Example 8-1. PP2E\Gui\Tour\menu_win.py# Tk8.0 style top-level window menus from Tkinter import * # get widget classes from tkMessageBox import * # get standard dialogs def notdone(): showerror('Not implemented', 'Not yet available') def makemenu(win): top = Menu(win) # win=top-level window win.config(menu=top) # set its menu option file = Menu(top) file.add_command(label='New...', command=notdone, underline=0) file.add_command(label='Open...', command=notdone, underline=0) file.add_command(label='Quit', command=win.quit, underline=0) top.add_cascade(label='File', menu=file, underline=0) edit = Menu(top, tearoff=0) edit.add_command(label='Cut', command=notdone, underline=0) edit.add_command(label='Paste', command=notdone, underline=0) edit.add_separator() top.add_cascade(label='Edit', menu=edit, underline=0) submenu = Menu(edit, tearoff=0) submenu.add_command(label='Spam', command=win.quit, underline=0) submenu.add_command(label='Eggs', command=notdone, underline=0) edit.add_cascade(label='Stuff', menu=submenu, underline=0) if __name__ == '__main__': root = Tk() # or Toplevel() root.title('menu_win') # set window-mgr info makemenu(root) # associate a menu bar msg = Label(root, text='Window menu basics') # add something below msg.pack(expand=YES, fill=BOTH) msg.config(relief=SUNKEN, width=40, height=7, bg='beige') root.mainloop() There is a lot of code in this file devoted to setting callbacks and such, so it might help to isolate the bits involved with the menu tree building process. For the File menu, it's done like this: top = Menu(win) # attach Menu to window win.config(menu=top) # cross-link window to menu file = Menu(top) # attach a Menu to top Menu top.add_cascade(label='File', menu=file) # cross-link parent to child Apart from building up the menu object tree, this script also demonstrates some of the most common menu configuration options:
Let's see what all this translates to in the realm of the pixel. Figure 8-1 shows the window that first appears when this script is run live on Windows; it looks different, but similar, on Unix and Macintosh. Figure 8-1. menu_win: a top-level window menu barFigure 8-2 shows the scene when the File pull-down is selected. Notice that Menu widgets are linked, not packed (or gridded) -- the geometry manager doesn't really come into play here. If you run this script, you'll also notice that all of its menu entries either quit the program immediately or pop up a "Not Implemented" standard error dialog. This example is about menus, after all, but menu selection callback handlers generally do more useful work in practice. Figure 8-2. The File menu pull-downAnd finally, Figure 8-3 shows what happens after clicking the File menu's tear-off line and selecting the cascading submenu in the Edit pull-down. Cascades can be nested as deep as you like, but your users probably won't be happy if this gets silly. Figure 8-3. A File tear-off and Edit cascadeIn Tkinter, every top-level window can have a menu bar, including pop-ups that you create with the Toplevel widget. Example 8-2 makes three pop-up windows with the same menu bar as the one we just met; when run, it constructs the scene captured in Figure 8-4. Example 8-2. PP2E\Gui\Tour\menu_win-multi.pyfrom menu_win import makemenu from Tkinter import * root = Tk() for i in range(3): # 3 popup windows with menus win = Toplevel(root) makemenu(win) Label(win, bg='black', height=5, width=15).pack(expand=YES, fill=BOTH) Button(root, text="Bye", command=root.quit).pack() root.mainloop() Figure 8-4. Multiple Toplevels with menus8.2.2 Frame- and Menubutton-Based MenusAlthough less commonly used for top-level windows, it's also possible to create a menu bar as a horizontal Frame. Before I show you how, though, let me explain why you should care. Because this frame-based scheme doesn't depend on top-level window protocols, it can also be used to add menus as nested components of larger displays. In other words, it's not just for top-level windows. For example, Chapter 9's PyEdit text editor can be used both as a program and an attachable component. We'll use window menus to implement PyEdit selections when it is run as a standalone program, but use frame-based menus when PyEdit is embedded in the PyMail and PyView displays. Both schemes are worth knowing. Frame-based menus require a few more lines of code, but aren't much more complex than window menus. To make one, simply pack Menubutton widgets within a Frame container, associate Menu widgets with the Menubuttons, and associate the Frame with the top of a container window. Example 8-3 creates the same menu as Example 8-2, but using the frame-based approach. Example 8-3. PP2E\Gui\Tour\menu_frm.py# Frame-based menus: for top-levels and components from Tkinter import * # get widget classes from tkMessageBox import * # get standard dialogs def notdone(): showerror('Not implemented', 'Not yet available') def makemenu(parent): menubar = Frame(parent) # relief=RAISED, bd=2... menubar.pack(side=TOP, fill=X) fbutton = Menubutton(menubar, text='File', underline=0) fbutton.pack(side=LEFT) file = Menu(fbutton) file.add_command(label='New...', command=notdone, underline=0) file.add_command(label='Open...', command=notdone, underline=0) file.add_command(label='Quit', command=parent.quit, underline=0) fbutton.config(menu=file) ebutton = Menubutton(menubar, text='Edit', underline=0) ebutton.pack(side=LEFT) edit = Menu(ebutton, tearoff=0) edit.add_command(label='Cut', command=notdone, underline=0) edit.add_command(label='Paste', command=notdone, underline=0) edit.add_separator() ebutton.config(menu=edit) submenu = Menu(edit, tearoff=0) submenu.add_command(label='Spam', command=parent.quit, underline=0) submenu.add_command(label='Eggs', command=notdone, underline=0) edit.add_cascade(label='Stuff', menu=submenu, underline=0) return menubar if __name__ == '__main__': root = Tk() # or TopLevel or Frame root.title('menu_frm') # set window-mgr info makemenu(root) # associate a menu bar msg = Label(root, text='Frame menu basics') # add something below msg.pack(expand=YES, fill=BOTH) msg.config(relief=SUNKEN, width=40, height=7, bg='beige') root.mainloop() Again, let's isolate the linkage logic here to avoid getting distracted by other details. For the File menu case, here is what this boils down to: menubar = Frame(parent) # make a Frame for the menubar fbutton = Menubutton(menubar, text='File') # attach a MenuButton to Frame file = Menu(fbutton) # attach a Menu to MenuButton fbutton.config(menu=file) # crosslink button to menu There is an extra Menubutton widget in this scheme, but it's not much more complex than making top-level window menus. Figures Figure 8-5 and Figure 8-6 show this script in action on Windows. Figure 8-5. menu_frm: Frame and Menubutton menu barFigure 8-6. With the Edit menu selectedThe menu widgets in this script provide a default set of event bindings that automatically pop up menus when selected with a mouse. This doesn't look or behave exactly like the top-level window menu scheme shown earlier, but it is close, can be configured in any way that frames can (i.e., with colors and borders), and will look similar on every platform (though this is probably not a feature). The biggest advantage of frame-based menu bars, though, is that they can also be attached as nested components in larger displays. Example 8-4 and its resulting interface (Figure 8-7) show how. Example 8-4. PP2E\Gui\Tour\menu_frm-multi.pyfrom menu_frm import makemenu # can't use menu_win here--one window from Tkinter import * # but can attach from menus to windows root = Tk() for i in range(2): # 2 menus nested in one window mnu = makemenu(root) mnu.config(bd=2, relief=RAISED) Label(root, bg='black', height=5, width=15).pack(expand=YES, fill=BOTH) Button(root, text="Bye", command=root.quit).pack() root.mainloop() Figure 8-7. Multiple Frame menus on one windowBecause they are not tied to the enclosing window, frame-based menus can also be used as part of another attachable component's widget package. For example, the menu embedding behavior in Example 8-5 even works if the menu's parent is another Frame container, not the top-level window. Example 8-5. PP2E\Gui\Tour\menu_frm-multi2.pyfrom menu_frm import makemenu # can't use menu_win here--root=Frame from Tkinter import * root = Tk() for i in range(3): # 3 menus nested in the containers frm = Frame() mnu = makemenu(frm) mnu.config(bd=2, relief=RAISED) frm.pack(expand=YES, fill=BOTH) Label(frm, bg='black', height=5, width=15).pack(expand=YES, fill=BOTH) Button(root, text="Bye", command=root.quit).pack() root.mainloop() <IP_ADDRESS> Using Menubuttons and OptionmenusIn fact, menus based on Menubutton are even more general than Example 8-3 implies -- they can actually show up anywhere on a display that normal buttons can, not just within a menubar Frame. Example 8-6 makes a Menubutton pull-down list that simply shows up by itself, attached to the root window; Figure 8-8 shows the GUI it produces. Example 8-6. PP2E\Gui\Tour\mbutton.pyfrom Tkinter import * root = Tk() mbutton = Menubutton(root, text='Food') # the pull-down stands alone picks = Menu(mbutton) mbutton.config(menu=picks) picks.add_command(label='spam', command=root.quit) picks.add_command(label='eggs', command=root.quit) picks.add_command(label='bacon', command=root.quit) mbutton.pack() mbutton.config(bg='white', bd=4, relief=RAISED) root.mainloop() Figure 8-8. A Menubutton all by itselfThe related Tkinter Optionmenu widget displays an item selected from a pull-down menu. It's roughly like a Menubutton plus a display label, and displays a menu of choices when clicked; but you must link Tkinter variables (described in Chapter 7) to fetch the choice after the fact instead of registering callbacks, and menu entries are passed as arguments in the widget constructor call after the variable. Example 8-7 illustrates typical Optionmenu usage, and builds the interface captured in Figure 8-9. Clicking on either of the first two buttons opens a pull-down menu of options; clicking on the third "state" button fetches and prints the current values displayed in the first two. Example 8-7. PP2E\Gui\Tour\optionmenu.pyfrom Tkinter import * root = Tk() var1 = StringVar() var2 = StringVar() opt1 = OptionMenu(root, var1, 'spam', 'eggs', 'toast') # like Menubutton opt2 = OptionMenu(root, var2, 'ham', 'bacon', 'sausage') # but shows choice opt1.pack(fill=X) opt2.pack(fill=X) var1.set('spam') var2.set('ham') def state(): print var1.get(), var2.get() # linked variables Button(root, command=state, text='state').pack() root.mainloop() Figure 8-9. An Optionmenu at workThere are other menu-related topics that we'll skip here in the interest of space. For instance, scripts can add entries to system menus, and generate pop-up menus (posted in response to events, without an associated button). Refer to Tk and Tkinter resources for more details on this front. In addition to simple selections and cascades, menus can also contain disabled entries, checkbutton and radiobutton selections, and bitmap and photo images. The next section demonstrates how some of these special menu entries are programmed. 8.2.3 Windows with Both Menus and ToolbarsBesides showing a menu at the top, it is common for windows to display a row of buttons at the bottom. This bottom button row is usually called a toolbar, and often contains shortcuts to items also available in the menus at the top. It's easy to add a toolbar to windows in Tkinter -- simply pack buttons (and other kinds of widgets) into a frame, pack the frame on the bottom of the window, and set it to expand horizontally only. This is really just hierarchical GUI layout at work again, but make sure to pack toolbars (and frame-based menu bars) early, so that other widgets in the middle of the display are clipped first when the window shrinks. Example 8-8 shows one way to go about adding a toolbar to a window. It also demonstrates how to add photo images in menu entries (set the image attribute to PhotoImage object), and how to disable entries and give them a grayed-out appearance (call the menu entryconfig method with the index of the item to disable, starting from 1). Notice that PhotoImage objects are saved as a list; remember, unlike other widgets, these go away if you don't hold onto them. Example 8-8. PP2E\Gui\Tour\menuDemo.py#!/usr/local/bin/python ######################################################################### # Tk8.0 style main window menus # menu/tool bars packed before middle, fill=X (pack first=clip last); # adds photos menu entries; see also: add_checkbutton, add_radiobutton ######################################################################### from Tkinter import * # get widget classes from tkMessageBox import * # get standard dialogs class NewMenuDemo(Frame): # an extended frame def __init__(self, parent=None): # attach to top-level? Frame.__init__(self, parent) # do superclass init self.pack(expand=YES, fill=BOTH) self.createWidgets() # attach frames/widgets self.master.title("Toolbars and Menus") # set window-manager info self.master.iconname("tkpython") # label when iconified def createWidgets(self): self.makeMenuBar() self.makeToolBar() L = Label(self, text='Menu and Toolbar Demo') L.config(relief=SUNKEN, width=40, height=10, bg='white') L.pack(expand=YES, fill=BOTH) def makeToolBar(self): toolbar = Frame(self, cursor='hand2', relief=SUNKEN, bd=2) toolbar.pack(side=BOTTOM, fill=X) Button(toolbar, text='Quit', command=self.quit ).pack(side=RIGHT) Button(toolbar, text='Hello', command=self.greeting).pack(side=LEFT) def makeMenuBar(self): self.menubar = Menu(self.master) self.master.config(menu=self.menubar) # master=top-level window self.fileMenu() self.editMenu() self.imageMenu() def fileMenu(self): pulldown = Menu(self.menubar) pulldown.add_command(label='Open...', command=self.notdone) pulldown.add_command(label='Quit', command=self.quit) self.menubar.add_cascade(label='File', underline=0, menu=pulldown) def editMenu(self): pulldown = Menu(self.menubar) pulldown.add_command(label='Paste', command=self.notdone) pulldown.add_command(label='Spam', command=self.greeting) pulldown.add_separator() pulldown.add_command(label='Delete', command=self.greeting) pulldown.entryconfig(4, state=DISABLED) self.menubar.add_cascade(label='Edit', underline=0, menu=pulldown) def imageMenu(self): photoFiles = ('guido.gif', 'pythonPowered.gif', 'ppython_sm_ad.gif') pulldown = Menu(self.menubar) self.photoObjs = [] for file in photoFiles: img = PhotoImage(file='../gifs/' + file) pulldown.add_command(image=img, command=self.notdone) self.photoObjs.append(img) # keep a reference self.menubar.add_cascade(label='Image', underline=0, menu=pulldown) def greeting(self): showinfo('greeting', 'Greetings') def notdone(self): showerror('Not implemented', 'Not yet available') def quit(self): if askyesno('Verify quit', 'Are you sure you want to quit?'): Frame.quit(self) if __name__ == '__main__': NewMenuDemo().mainloop() # if I'm run as a script Figure 8-10. menuDemo: menus and toolbarsWhen run, this script generates the scene in Figure 8-10 at first. Figure 8-11 shows this window after being stretched a bit, with its File and Edit menus torn off, and its Image menu selected. That's Python creator Guido van Rossum in this script's third menu (wearing his now-deprecated eyeglasses). Run this on your own computer to get a better feel for its behavior.[1]
Figure 8-11. Images and tear-offs on the job<IP_ADDRESS> Automating menu constructionMenus are a powerful Tkinter interface device. If you're like me, though, the examples in this section probably seem like a lot of work. Menu construction can be both code-intensive and error-prone if done by calling Tkinter methods directly. A better approach might automatically build and link up menus from a higher-level description of their contents. In fact, we will -- in Chapter 9, we'll meet a tool called GuiMixin that automates the menu construction process, given a data structure that contains all menus desired. As an added bonus, it supports both window and frame-style menus, so it can be used by both standalone programs and nested components. Although it's important to know the underlying calls used to make menus, you don't necessarily have to remember them for long. |
| I l@ve RuBoard |


SEOBNRv4PHM
SEOBNRv4PHM
SEOBNRv4PHM
The figures below show the plots for SEOBNRv4PHM
luminosity_distance
The figures below show the summary plots for the run
geocent_time
The figures below show the summary plots for the run
recalib_H1_frequency_0
The figures below show the summary plots for the run
recalib_H1_frequency_1
The figures below show the summary plots for the run
recalib_H1_frequency_2
The figures below show the summary plots for the run
recalib_H1_frequency_3
The figures below show the summary plots for the run
recalib_H1_frequency_4
The figures below show the summary plots for the run
recalib_H1_frequency_5
The figures below show the summary plots for the run
recalib_H1_frequency_6
The figures below show the summary plots for the run
recalib_H1_frequency_7
The figures below show the summary plots for the run
recalib_H1_frequency_8
The figures below show the summary plots for the run
recalib_H1_frequency_9
The figures below show the summary plots for the run
recalib_L1_frequency_0
The figures below show the summary plots for the run
recalib_L1_frequency_1
The figures below show the summary plots for the run
recalib_L1_frequency_2
The figures below show the summary plots for the run
recalib_L1_frequency_3
The figures below show the summary plots for the run
recalib_L1_frequency_4
The figures below show the summary plots for the run
recalib_L1_frequency_5
The figures below show the summary plots for the run
recalib_L1_frequency_6
The figures below show the summary plots for the run
recalib_L1_frequency_7
The figures below show the summary plots for the run
recalib_L1_frequency_8
The figures below show the summary plots for the run
recalib_L1_frequency_9
The figures below show the summary plots for the run
recalib_V1_frequency_0
The figures below show the summary plots for the run
recalib_V1_frequency_1
The figures below show the summary plots for the run
recalib_V1_frequency_2
The figures below show the summary plots for the run
recalib_V1_frequency_3
The figures below show the summary plots for the run
recalib_V1_frequency_4
The figures below show the summary plots for the run
recalib_V1_frequency_5
The figures below show the summary plots for the run
recalib_V1_frequency_6
The figures below show the summary plots for the run
recalib_V1_frequency_7
The figures below show the summary plots for the run
recalib_V1_frequency_8
The figures below show the summary plots for the run
recalib_V1_frequency_9
The figures below show the summary plots for the run
mass_ratio
The figures below show the summary plots for the run
chirp_mass
The figures below show the summary plots for the run
dec
The figures below show the summary plots for the run
ra
The figures below show the summary plots for the run
cos_theta_jn
The figures below show the summary plots for the run
psi
The figures below show the summary plots for the run
phase
The figures below show the summary plots for the run
a_1
The figures below show the summary plots for the run
a_2
The figures below show the summary plots for the run
tilt_1
The figures below show the summary plots for the run
tilt_2
The figures below show the summary plots for the run
phi_12
The figures below show the summary plots for the run
phi_jl
The figures below show the summary plots for the run
recalib_H1_amplitude_0
The figures below show the summary plots for the run
recalib_H1_amplitude_1
The figures below show the summary plots for the run
recalib_H1_amplitude_2
The figures below show the summary plots for the run
recalib_H1_amplitude_3
The figures below show the summary plots for the run
recalib_H1_amplitude_4
The figures below show the summary plots for the run
recalib_H1_amplitude_5
The figures below show the summary plots for the run
recalib_H1_amplitude_6
The figures below show the summary plots for the run
recalib_H1_amplitude_7
The figures below show the summary plots for the run
recalib_H1_amplitude_8
The figures below show the summary plots for the run
recalib_H1_amplitude_9
The figures below show the summary plots for the run
recalib_H1_phase_0
The figures below show the summary plots for the run
recalib_H1_phase_1
The figures below show the summary plots for the run
recalib_H1_phase_2
The figures below show the summary plots for the run
recalib_H1_phase_3
The figures below show the summary plots for the run
recalib_H1_phase_4
The figures below show the summary plots for the run
recalib_H1_phase_5
The figures below show the summary plots for the run
recalib_H1_phase_6
The figures below show the summary plots for the run
recalib_H1_phase_7
The figures below show the summary plots for the run
recalib_H1_phase_8
The figures below show the summary plots for the run
recalib_H1_phase_9
The figures below show the summary plots for the run
recalib_L1_amplitude_0
The figures below show the summary plots for the run
recalib_L1_amplitude_1
The figures below show the summary plots for the run
recalib_L1_amplitude_2
The figures below show the summary plots for the run
recalib_L1_amplitude_3
The figures below show the summary plots for the run
recalib_L1_amplitude_4
The figures below show the summary plots for the run
recalib_L1_amplitude_5
The figures below show the summary plots for the run
recalib_L1_amplitude_6
The figures below show the summary plots for the run
recalib_L1_amplitude_7
The figures below show the summary plots for the run
recalib_L1_amplitude_8
The figures below show the summary plots for the run
recalib_L1_amplitude_9
The figures below show the summary plots for the run
recalib_L1_phase_0
The figures below show the summary plots for the run
recalib_L1_phase_1
The figures below show the summary plots for the run
recalib_L1_phase_2
The figures below show the summary plots for the run
recalib_L1_phase_3
The figures below show the summary plots for the run
recalib_L1_phase_4
The figures below show the summary plots for the run
recalib_L1_phase_5
The figures below show the summary plots for the run
recalib_L1_phase_6
The figures below show the summary plots for the run
recalib_L1_phase_7
The figures below show the summary plots for the run
recalib_L1_phase_8
The figures below show the summary plots for the run
recalib_L1_phase_9
The figures below show the summary plots for the run
recalib_V1_amplitude_0
The figures below show the summary plots for the run
recalib_V1_amplitude_1
The figures below show the summary plots for the run
recalib_V1_amplitude_2
The figures below show the summary plots for the run
recalib_V1_amplitude_3
The figures below show the summary plots for the run
recalib_V1_amplitude_4
The figures below show the summary plots for the run
recalib_V1_amplitude_5
The figures below show the summary plots for the run
recalib_V1_amplitude_6
The figures below show the summary plots for the run
recalib_V1_amplitude_7
The figures below show the summary plots for the run
recalib_V1_amplitude_8
The figures below show the summary plots for the run
recalib_V1_amplitude_9
The figures below show the summary plots for the run
recalib_V1_phase_0
The figures below show the summary plots for the run
recalib_V1_phase_1
The figures below show the summary plots for the run
recalib_V1_phase_2
The figures below show the summary plots for the run
recalib_V1_phase_3
The figures below show the summary plots for the run
recalib_V1_phase_4
The figures below show the summary plots for the run
recalib_V1_phase_5
The figures below show the summary plots for the run
recalib_V1_phase_6
The figures below show the summary plots for the run
recalib_V1_phase_7
The figures below show the summary plots for the run
recalib_V1_phase_8
The figures below show the summary plots for the run
recalib_V1_phase_9
The figures below show the summary plots for the run
time_jitter
The figures below show the summary plots for the run
log_likelihood
The figures below show the summary plots for the run
H1_matched_filter_snr
The figures below show the summary plots for the run
H1_optimal_snr
The figures below show the summary plots for the run
L1_matched_filter_snr
The figures below show the summary plots for the run
L1_optimal_snr
The figures below show the summary plots for the run
V1_matched_filter_snr
The figures below show the summary plots for the run
V1_optimal_snr
The figures below show the summary plots for the run
total_mass
The figures below show the summary plots for the run
mass_1
The figures below show the summary plots for the run
mass_2
The figures below show the summary plots for the run
theta_jn
The figures below show the summary plots for the run
symmetric_mass_ratio
The figures below show the summary plots for the run
cos_tilt_1
The figures below show the summary plots for the run
cos_tilt_2
The figures below show the summary plots for the run
comoving_distance
The figures below show the summary plots for the run
mass_1_source
The figures below show the summary plots for the run
mass_2_source
The figures below show the summary plots for the run
chirp_mass_source
The figures below show the summary plots for the run
total_mass_source
The figures below show the summary plots for the run
iota
The figures below show the summary plots for the run
spin_1x
The figures below show the summary plots for the run
spin_1y
The figures below show the summary plots for the run
spin_1z
The figures below show the summary plots for the run
spin_2x
The figures below show the summary plots for the run
spin_2y
The figures below show the summary plots for the run
spin_2z
The figures below show the summary plots for the run
phi_1
The figures below show the summary plots for the run
phi_2
The figures below show the summary plots for the run
chi_eff
The figures below show the summary plots for the run
chi_1_in_plane
The figures below show the summary plots for the run
chi_2_in_plane
The figures below show the summary plots for the run
chi_p
The figures below show the summary plots for the run
H1_matched_filter_abs_snr
The figures below show the summary plots for the run
H1_matched_filter_snr_angle
The figures below show the summary plots for the run
L1_matched_filter_abs_snr
The figures below show the summary plots for the run
L1_matched_filter_snr_angle
The figures below show the summary plots for the run
V1_matched_filter_abs_snr
The figures below show the summary plots for the run
V1_matched_filter_snr_angle
The figures below show the summary plots for the run
inverted_mass_ratio
The figures below show the summary plots for the run
final_spin
The figures below show the summary plots for the run
peak_luminosity
The figures below show the summary plots for the run
final_mass
The figures below show the summary plots for the run
redshift
The figures below show the summary plots for the run
final_mass_source
The figures below show the summary plots for the run
radiated_energy
The figures below show the summary plots for the run
H1_time
The figures below show the summary plots for the run
L1_time
The figures below show the summary plots for the run
V1_time
The figures below show the summary plots for the run
network_optimal_snr
The figures below show the summary plots for the run
network_matched_filter_snr
The figures below show the summary plots for the run
cos_iota
The figures below show the summary plots for the run
final_spin_non_evolved
The figures below show the summary plots for the run
peak_luminosity_non_evolved
The figures below show the summary plots for the run
final_mass_non_evolved
The figures below show the summary plots for the run
final_mass_source_non_evolved
The figures below show the summary plots for the run
radiated_energy_non_evolved
The figures below show the summary plots for the run


Videos for Std 8
22 . Factors of Polynomials
Factorization using the expansion formulae
Factors of polynomials in the form of the sum of two cubes
Video 1
Factors of polynomials in the form of the difference of two cubes
Video 1
21 . Division of Polynomials
Division of polynomials
Video 1
Dividing one monomial by another
Video 1
Dividing a binomial by monomial
Video 1
Dividing a polynomial by a monomial
Video 1
Video 2
Video 3
Dividing a polynomial by a binomial
Video 1
20 . Volume and surface Area
Cylinder
Video 1
Cone
Video 1
Sphere
Video 1
19 . Discount and commission
Discount
Video 1
Video 2
Commission
18 . Polynomials
Polynomials
Classification of polynomials
Video 1
Monomial
Binomial
Trinomial
The degree of a polynomial
Video 1
The co-efficient of a monomial
Video 1
17 . Compound interest
Compound Interest
Video 1
Video 2
Compound rates of rises and falls
16 . Joint bar graphs
Drawing a joint bar graph
Video 1
Video 2
15. The arc of a circle
The intercepted arc
Video 1
Minor arc and major arc
The central angle
Video 1
The measure of an arc
Video 1
The measure of a major arc
The inscribed angle
Video 1
The relation between inscribed angle and intercepted arc
Video 1
The cyclic quadrilateral
The property of the opposite angles of a cyclic quadrilateral
Video 1
14 . Construction of quadrilateral
To construct a quadrilateral given four sides and a diagonal
Video 1
To construct a quadrilateral given three sides and two diagonals
Video 1
To construct a quadrilateral given two adjacent sides and three angles
Video 1
To construct a quadrilateral given three sides and the two included angles
Video 1
13 . Indices
Fractional Index
Video 1
Video 2
Video 3
Rules of indices
Video 1
Video 2
Video 3
Video 4
Video 5
12 . Cubes and cube roots
Cube
The cube of an integer
Video 1
Perfect cubes
Cube roots
Video 1
Finding the cube root of a perfect cube
Video 1


{% extends 'base.html' %} {% load endless %} {% block article %}
| Task | Status | Type | Creator | Project | Due |
|---|---|---|---|---|---|
| {{ task.name }} | {{ task.get_status_display }} | {{ task.get_task_type_display }} | {{ task.created_by }} | {{ task.project.name }} | {{ task.due }} |
|
There doesn't seem to be anything here!
{% endif %} {% endblock %} {% block aside %}There doesn't seem to be any tasks assigned to you!
{% endif %}


| Melissa Wimberly | Home | About | Projects | Blog | Contact |
Life is what you make it...
After studying Economics at UC Davis, I became a project manager for tech startup. I spent my days working with and managing engineers, but I had no idea what they were talking about. After a week of confusion, I decided to spend a Saturday learning some "programming buzzwords". After realizing how interesting and fun programming can be, I decided to spend every Saturday (and Sunday, and after work, and before work) trying to teach myself as much as I can. Now I am in Dev Bootcamp, and my learning is accelerating. I can't wait to see how much I have learned by the end of the program!
I would love to hear from you!
Feel free to contact me
<EMAIL_ADDRESS>(510) 599-7128
Made by Missy!


The next MechaGodzilla invasion is on its way to Earth. And once again, Earth will be the battleground for an epic war.
MechaGodzilla's army consists of many nasty alien monsters, such as Space Godzilla, King Gidorah, and MechaGodzilla herself.
To stop them and defend Earth, Godzilla and her friends are preparing for the battle.
Each army consists of many different monsters. Each monster has a strength that can be described by a positive integer. (The larger the value, the stronger the monster.)
The war will consist of a series of battles. In each battle, the weakest of all the monsters that are still alive is killed.
If there are several weakest monsters, but all of them in the same army, one of them is killed at random. If both armies have at least one of the weakest monsters, a random weakest monster of MechaGodzilla's army is killed.
The war is over if in one of the armies all monsters are dead. The dead army lost, the other one won.
You are given the strengths of all the monsters. Find out who wins the war.
The first line of the input file contains an integer T specifying the number of test cases. Each test case is preceded by a blank line.
Each test case starts with line containing two positive integers NG and NM – the number of monsters in Godzilla's and in MechaGodzilla's army. Two lines follow. The first one contains NG positive integers – the strengths of the monsters in Godzilla's army. Similarly, the second one contains NM positive integers – the strengths of the monsters in MechaGodzilla's army.
For each test case, output a single line with a string that describes the outcome of the battle.
If it is sure that Godzilla's army wins, output the string "Godzilla".
If it is sure that MechaGodzilla's army wins, output the string "MechaGodzilla".
Otherwise, output the string "uncertain".
input: 2 1 1 1 1 3 2 1 3 2 5 5 output: Godzilla MechaGodzilla
In the first test case, there are only two monsters, and they are equally strong. In this situation, MechaGodzilla's monster is killed and the war ends.
In the second test case, the war will consist of three battles, and in each of them one of Godzilla's monsters dies.
For all the test cases, int in C/C++/Java or longint in Pascal is enough.


Click Me!
Subscribe to be superhuman
Each week we will be sending you tips to live your best life
No BS. Only quality goodies!
Your email:


RaphGL
Projects
What I Use
About Me
Rafael Lopes
bad programmer, avid linux user and waste of oxygen
Follow @RaphGL
Projects
Projects that I created or contributed to
My dotfiles
Dracula/firefox
Dracula/rofi
stowit
What I Use
Languages
Python
Javascript
Shell scripting
C Language
Tools that Make My Life Easier
Empty
Libraries and Frameworks
Empty
Software
Linux
NeoVim
VSCode
GIMP
Figma
Github:
@RaphGL
Email:
raphgl@protonmail.com


This beautiful young lady has excellent advice for players from beginner to intermediate level.
She explains how to hold the paddle, how to stand, how to move
and then covers all the strokes.
She has advice for footwork drills and even
offers tips on cooking Chinese food.
Yangyang's Youtube Channel
Nobody knows who he is but we know he is from Viet Nam and
currently living in France.
He shares many Chinese Table Tennis secrets. In addition to his excellent coaching,
he also provides behind-the-scenes info such as "The Truth Behind The Forfeit of
Ma Long, Fan Zhendong and Xu Xin in China Open 2017"
Coach EmRatThich's Youtube Channel
This website is possibly the easiest way
to look up ratings for any table tennis player.
PongMobile.com


We envision a world where meetings aren’t just a part of a process, but also inform the project lifecycle. Meetings should have focus and be productive.
meet makes meetings purposeful again by transforming the way people schedule and perceive meetings.
Never again leave a meeting feeling like nothing transpired. With meet, understand which parts of a meeting you're relevant to, create talking points, and track your meeting data.
Theodora C.
Liza G.
Tommy F.
Derin D.
After creating our medium-fidelity prototype, we had 4-5 people go through our prototype and do a heuristic evaluation to help us pinpoint what the biggest user painpoints currently were. We also were beginning our hi-fi prototype and had a milestone check-in at this point.
Milestone
(pdf) (pptx)


Service added successfuly
Holiday deleted successfuly
Save
Update
| Service Title (English) | StartService Title (Arabic)Date | Duration (min) | Service Description (English) | Service Description (Arabic) | ||
|---|---|---|---|---|---|---|
| {{x.Title_Eng}} | {{x.Title_Ar}} | {{x.DurationInMin}} | {{x.Description_Eng}} | {{x.Description_Ar}} | Update |
Delete
|


We have selected a starting image for you. At any point during the exercises, you may press the space bar to activate the panic button feature, which will replace the spider imagery with your choice of pleasing image.
When you're ready to view the first image, click Continue.
3
level
3
image


--- layout: post title: Setting up WriteFreely multi-user instance in production! date: 2019-07-29 14:40:21.000000000 +05:30 type: post parent_id: '0' published: true password: '' status: publish tags: [Daily Logs, Projects, Writefreely, GCP, DevOps] meta: timeline_notification: '1564391425' _publicize_job_id: '33392392031' author: login: priyankasaggu119 email<EMAIL_ADDRESS>display_name: priyankasaggu119 first_name: '' last_name: '' permalink: "/2019/07/29/setting-up-writefreely-multi-user-instance-in-production/" ---
July 29, 2019
The last time when I had set up a WordPress on GCP, I was actually supposed to do all that by scratch. But my foolness made me do things quickly and I went for the ready-made Bitnami image and was done.
So, now to compensate (and actually for setting up another Production server), here I am writing again on "how to set up a WriteFreely multi-user instance behind reverse-proxy" all by scratch.
I will be covering most part of the configuration mentioned above in the steps below.
$ sudo apt update && sudo apt dist-upgrade
$ sudo apt install apache2
$ sudo systemctl start apache2
$ sudo apt install mysql-server
$ sudo mysql_secure_installation
$ sudo a2enmod proxy
$ sudo a2enmod proxy_http
$ sudo systemctl restart apache2
// Leave the password blank when prompted
$ sudo mysql -u root -p
//At "mysql>" prompt
CREATE USER 'writefreely'@'localhost' IDENTIFIED BY 'YouPasswordHere';
CREATE DATABASE IF NOT EXISTS writefreely CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on writefreely.* to 'writefreely'@'localhost';
FLUSH PRIVILEGES;
exit
$ sudo mkdir /var/www/ps119.tk
$ sudo mkdir /var/www/ps119.tk/writefreely
$ cd /var/www/ps119.tk/writefreely
//use the latest link.
$ sudo wget "https://github.com/writeas/writefreely/releases/download/v0.10.0/writefreely_0.10.0_linux_amd64.tar.gz"
$ sudo tar -xvzf writefreely_0.10.0_linux_amd64.tar.gz
$ sudo rm writefreely_0.10.0_linux_amd64.tar.gz
$sudo ./writefreely --config
Loaded configuration config.ini.
✍ WriteFreely Configuration ✍
This quick configuration process will update the application's config file, config.ini.
It validates your input along the way, so you can be sure any future errors aren't caused by a bad configuration. If you'd rather configure your server manually, instead run: writefreely --create-config and edit that file.
Server setup
Production, behind reverse proxy
Local port: 8080
Database setup
MySQL
Username: writefreely
Password: ******************************
Database name: writefreely
Host: localhost
Port: 3306
App setup
Multi-user instance
Instance name: blogs.demo
Public URL: https://ps119.tk
Closed
Max blogs per user: 1
Enabled
Public
Public
2019/07/29 05:31:24 Connecting to mysql database...
2019/07/29 05:31:24 Database already initialized.
$ sudo ./writefreely --init-db
// change [username] and [password] with the suitable values.
$sudo ./writefreely --create-admin [username]:[password]
$ sudo ./writefreely --gen-keys
$ sudo nano /etc/apache2/sites-available/writefreely.conf
//PASTE THE FOLLOWING CONTENT (change ps119.tk to your domain name)
<VirtualHost *:80>
ServerName ps119.tk
ProxyPreserveHost On
ProxyPass / http://<IP_ADDRESS>:8080/
ProxyPassReverse / http://<IP_ADDRESS>:8080/
</VirtualHost>
$ sudo a2ensite writefreely.conf
$ sudo a2dissite 000-default.conf
$ sudo systemctl reload apache2
$ sudo nano /etc/systemd/system/writefreely.service
//PASTE THE FOLLOWING CONTENT (change ps119.tk to your domain name)
[Unit]
Description=Write Freely Instance
After=syslog.target network.target
[Service]
Type=simple
StandardOutput=syslog
StandardError=syslog
WorkingDirectory=/var/www/ps119.tk/writefreely
ExecStart=/var/www/ps119.tk/writefreely/writefreely
Restart=always
[Install]
WantedBy=multi-user.target
$ sudo systemctl enable writefreely.service
$ sudo systemctl start writefreely.service
$ sudo apt-get update
$ sudo apt-get install software-properties-common
$ sudo add-apt-repository universe
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
$ sudo apt-get install certbot python-certbot-apache
// Select the URL to set the SSL certificates for and choose the appropriate options after.
$ sudo certbot --apache
Voila, we are done with the setup of our multi-user WriteFreely instance. 🎉 🎉
Now, the only thing left for us is to actually acces it. So, go to https://<your_domain_name> (like https://ps119.tk in my case) and below is how it will look.
Login into the instance with the [username] and [password] of the Admin-user (we created above) and customize it as per your requirements.
And there you go, you have your own blog production server. :D
I wanted to actually redirect "ps119.tk" to "https://ps119.tk/read", so that whenever somebody visits the URL https://ps119.tk/, they directly land onto the Readers page.
So, with a lot of tinkering on web, I managed to do it with a small modifications in writefreely.conf file.
(I still doubt whether this is the right way of doing it. But this is how, I have done it and it so so works for me as well.)
$ cd /etc/apache2/sites-enabled/
$ sudo vim writefreely.conf
// Modifications in the redirecting rule.
<VirtualHost *:80>
ServerName ps119.tk
ProxyPreserveHost On
ProxyPass / http://<IP_ADDRESS>:8080/
ProxyPassReverse / http://<IP_ADDRESS>:8080/
RewriteEngine on
RewriteCond %{SERVER_NAME} =ps119.tk
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI}read [END,NE,R=permanent]
</VirtualHost>
Read here to learn more about .htaccess file, redirecting and remapping.


@* * Copyright 2023 HM Revenue & Customs * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. *@ @import controllers.auth.requests.UserRequest @import scala.concurrent.ExecutionContext @import components.{H1, P, Link} @import config.ConfigDecorator @this( main: MainView, h1: H1, p: P, configDecorator: ConfigDecorator ) @()(implicit request: UserRequest[_], messages: play.api.i18n.Messages) @paragraphText = @{ if(messages.lang.code == "cy"){ configDecorator.shutterPageParagraphCy}else {configDecorator.shutterPageParagraphEn} } @main( pageTitle = messages("npsshuttering.title"), showBackLink = true ) { @h1("npsshuttering.title", classes = Some("govuk-heading-xl")) @p(Text(paragraphText))


In Ghana, children are given their first name as a 'day name' which corresponds to the day in the week they were born. This is known as the Akan naming system. There are different names for each gender.This magical place determines your Akan name by asking a few simple questions. Wanna try it out ?
First, tell us abit about yourself!
what are the first two digits of your birth year?
what are the last two digits of your birth year?
On which month were you born?
Date of birth?
what is your prefered gender?
now press this button.


New funds needed to cover open-access costs
by Christian Sonne, Rune Dietz & Aage K. O. AlstrupThe international Plan S research-funder consortium cOAlition S proposes that institutional libraries should transition from subscription to ‘pure publish’ deals with open-access journals by 2024 (see Nature 572, 586; 2019). However, the coalition represents just 16 European funding agencies and 3 international charity foundations. Many other European funders are not in a position to pay open-access publication fees on behalf of their researchers.
For example, Denmark’s 14,000 private foundations that currently support half of the country’s research are stretched to the limit. Their researchers will therefore have no choice but to pay the bill out of their own research grants, which are already under intense pressure from spiralling costs.
Remedial action is urgently needed if publication and knowledge flow are not to be skewed towards the wealthiest countries and universities. For example, national or European Union funds could be established to help cash-strapped researchers cover their publishing costs.
Nature 575, 51 (2019)
doi: 10.1038/d41586-019-03389-4


Article: Read Length: Go
NASA
Rover Camera:  Rover Photos Domain: -->
Person: Action: Perform Action
Objects:


More Examples of Scripts Created with CGI.pm
Basic Non Sequitur Questionnaire
Advanced Non Sequitur Questionnaire
Save and restore the state of a form to a file
Server Push
Read the coordinates from a clickable image map
Multiple independent forms on the same page
How to maintain state on a page with internal links
Echo fatal script errors to the browser
This script deliberately generates a compile-time error.
The Following Scripts Work with Netscape Navigator 2.0 and higher,
or Internet Explorer 3.0 and higher
Prompt for a file to upload and process it
A Continuously-Updated Page using Server Push
Compute the "diff" between two uploaded files
Maintain state over a long period with a cookie
Permanently customize the appearance of a page with a cookie
Popup the response in a new window
Side-by-side form and response using frames
Verify the Contents of a fill-out form with JavaScript
Lincoln D. Stein<EMAIL_ADDRESS>Whitehead Institute/MIT Center for Genome Research
Last modified: Wed Jun 23 15:31:47 EDT 1999


| html_code_block {fansi} | R Documentation |
This simulates what rmarkdown
/ knitr
do to the output of an R markdown
chunk, at least as of rmarkdown
1.10. It is useful when we override the
knitr
output hooks so that we can have a result that still looks as if it
was run by knitr
.
html_code_block(x, class = "fansi-output")
x |
character vector |
class |
character vectors of classes to apply to the PRE HTML tags. It is the users responsibility to ensure the classes are valid CSS class names. |
character(1L) x
, with <PRE> and <CODE> HTML tags
applied and collapsed into one line with newlines as the line separator.
html_code_block(c("hello world")) html_code_block(c("hello world"), class="pretty")


Is Economics a Science? | How & How NOT to Do Economics with Robert Skidelsky Most economists think of economics as a science. But are they right? If so, what kind of science is it? You can put on the uniform of a policeman, but does that make you a policeman? These, and more questions, are answered in this fourth lecture in INET...
BlazorHelp Website > Blog - Client Side Blazor Authentication Using Azure AD and a Custom AuthenticationStateProvider Microsoft Visual Studio Blazor
Blog — Softwarepark We have been working on a project for the last year and a half. As usual at Softwarepark, regular retrospectives have also been important in that project as they help us to reflect on how we are doing as a team, what works well and what can be improved. I...


Simon Sounds
Let's see how obedient you are...repeat the pattern.
Replace this text with message
Start
Stop


Blood Donate
To Save a Life
Connecting volunteer blood donors with patients with minutes at zero cost.
Find Blood NowConnecting volunteer blood donors with patients with minutes at zero cost.
Find Blood NowBloodDonate Connect is an innovative approach to health treatment in Egypt. We provide immediate access to blood donors across Egypt, 24 hours a day, 7 days a week. BloodDonate Connect is one of many community organizations that work together as one network.
Learn More About usYou can usually donate blood two to three times during the year, every 16 weeks so that there is enough time period for your blood to build up its iron stock between each donation. Choose Your Blood Type
The bearer of this superfamily is characterized by the body the process of metabolism is very rapid sensitivity of the gastrointestinal tract but has a very weak immune system has the capacity to cope with environmental changes and food there are some foods that fit his body like seafood, vegetables, legumes and prefers not to eat red meat and dairy derivatives, wheat . Blood Type A is more likely to accumulate and accumulate mucosa in the digestive tract than other species.
The bearer of this superfamily is characterized by the body the process of metabolism is very rapid sensitivity of the gastrointestinal tract but has a very weak immune system has the capacity to cope with environmental changes and food there are some foods that fit his body like seafood, vegetables, legumes and prefers not to eat red meat and dairy derivatives, wheat . Blood Type A is more likely to accumulate and accumulate mucosa in the digestive tract than other species.
It's called the stingy species because it doesn't accept blood from any other species, but it only gives blood to its species. The bearer of this superfamily is characterized by device regions of weak and foods that fit the nature of his body is a combination of special food with A blood type B in addition to that, his body more susceptible to certain diseases such as diabetes, anemia, and cancer .
It's called the stingy species because it doesn't accept blood from any other species, but it only gives blood to its species. The bearer of this superfamily is characterized by device regions of weak and foods that fit the nature of his body is a combination of special food with A blood type B in addition to that, his body more susceptible to certain diseases such as diabetes, anemia, and cancer.
Allow a platoon of blood-precious because it does not contain antibodies to the head of this platoon does not take blood only from the species itself, but it gives the blood of the factions other, heat blood type O is characterized by the fact that her digestive system strong and suitable for an active also there is a range of foods to fit his body too such as vegetables, fruits, red meat, legumes, and wheat .
Allow a platoon of blood-precious because it does not contain antibodies to the head of this platoon does not take blood only from the species itself, but it gives the blood of the factions other, heat blood type O is characterized by the fact that her digestive system strong and suitable for an active also there is a range of foods to fit his body too such as vegetables, fruits, red meat, legumes, and wheat.
The bearer of this superfamily is characterized by the ability to cope with changes in food and Environmental has a strong immune system and a nervous system balanced .There are a range of foods suitable to the nature of his body but would prefer not to excessive in some foods such as legumes, vegetables, milk and dairy products and fruits . The risks of this species are their vulnerability to diseases such as osteoporosis, diabetes and chronic fatigue.
The bearer of this superfamily is characterized by the ability to cope with changes in food and Environmental has a strong immune system and a nervous system balanced .There are a range of foods suitable to the nature of his body but would prefer not to excessive in some foods such as legumes, vegetables, milk and dairy products and fruits. The risks of this species are their vulnerability to diseases such as osteoporosis, diabetes and chronic fatigue.
Get enough sleep on the night of the donation.
Eat a balanced meal two hours before donating.
You should not drink liquids with caffeine.
You should drink more fluids than usual.
The donor starts their journey by contacting the registry.
Take a blood sample and test to determine whether or not to donate.
The doctor makes a decision about accepting a blood donation.
Before donating it is necessary to eat a meal, do not donate blood on an empty stomach.
The donation is made in the donation room.
After donating, the donor's certificate will be issued.
You should drink more fluids than usual.
After donating, take a break and snack.
After 10-15 minutes you can leave the place.
Avoid heavy physical activity for 5 hours.


{% extends 'homepage/base.html'%} {%load static%} {% block content%}
Do you keep forgetting about your health related stuff?
Don't panic! we got your back....
Just update it for once in your profile and forget about it for forever.
Commitment
We are committed to delivering quality-driven pharmacovigilance services
and working flexibly with our customers. We work towards continuous
improvement in our understanding of benefit-risk profile of our
customers’ products and thereby safeguard patients.
OUR GOAL
To help you track the records of all your medicines in one place so that
you don't have to remember every single one of those and can easily view
them in a single place with a single tap.
Developers
Ayush
Sahil
Mayank
Ravi


How to Use the mruby Debugger
copyright (c) 2014 Specified Non-Profit Corporation mruby Forum
1. Summary
This file documents the mruby debugger (‘mrdb’) methods.
2 Debugging with mrdb
2.1 Building mrdb
The trunk of the mruby source tree, with the most recent mrdb, can be checked out with the following command:
bash
$ git clone https://github.com/mruby/mruby.git
To run the make
command:
bash
$ cd mruby
$ make
By default, the make
command will install the debugger files into mruby/bin.
You can add the path for mrdb on your host environment with the following command:
bash
$ echo "export PATH=\$PATH:MRUBY_ROOT/bin" >> ~/.bashrc
$ source ~/.bashrc
*MRUBY_ROOT
is the directory in which mruby source code will be installed.
To confirm mrdb was installed properly, run mrdb with the --version
option:
bash
$ mrdb --version
mruby 2.1.0 (2019-11-19)
2.2 Basic Operation
2.2.1 Debugging mruby Script Files (rb file) with mrdb
To invoke the mruby debugger, just type mrdb
.
To specify the script file:
bash
$ mrdb [option] file name
For example: Debugging sample.rb
bash
$ mrdb sample.rb
You can execute the shell commands listed below:
| command | description |
|---|---|
| run | execute programs |
| step | execute stepping |
| continue | execute continuing program |
| break | configure the breaking point |
| delete | deleting the breaking points |
| disable | disabling the breaking points |
| enable | enabling the breaking points |
| info breakpoints | showing list of the breaking points |
| evaluating and printing the values of the mruby expressions in the script | |
| list | displaying the source cords |
| help | showing help |
| quit | terminating the mruby debugger |
2.2.2 Debugging mruby Binary Files (mrb file) with mrdb
You can debug the mruby binary files.
<IP_ADDRESS> Debugging the binary files
- notice
To debug mruby binary files, you need to compile mruby files with option
-g
.
bash
$ mrbc -g sample.rb
You can debug the mruby binary files with following command and the option -b
.
bash
$ mrdb -b sample.mrb
Then you can execute all debugger shell commands.
Break Command
You can use any breakpoint to stop the program by specifying the line number and method name. The breakpoint list will be displayed after you have set the breakpoint successfully.
Usage:
break [file:]linenum
b [file:]linenum
break [class:]method
b [class:]method
The breakpoint will be ordered in serial from 1. The number, which was given to the deleted breakpoint, will never be given to another breakpoint again.
You can give multiple breakpoints to specified the line number and method. Be ware that breakpoint command will not check the validity of the class name and method name.
You can get the current breakpoint information by the following options.
breakpoint breakpoint number : file name. line number
breakpoint breakpoint number : [class name,] method name
Continue Command
Usage:
continue [N]
c [N]
N: the next breakpoint number
When resuming the program, it will stop at breakpoint N (N-1 breakpoint will be ignored).
When you run the continue
command without specifying N, the program will be stopped at the next breakpoint.
Example:
(foo.rb:1) continue 3
This will resume the program and stop it at the third breakpoint.
Delete Command
This will delete the specified breakpoint.

Disable Command
This will disable the specified breakpoint.
Usage:
disable [breakpoint-no]
dis [breakpoint-no]
reappointing: breakpoint number
Example:
(foo.rb:1) disable
Use disable
if you would like to disable all of the breakpoints.
(foo.rb:1) disable 1 3
This will disable the breakpoints at 1 and 3.
Enable Command
This will enable the specified breakpoints.
Usage:
enable [breakpoint-no]
e [breakpoint-no]
breakpoint-no: breakpoint number
Example:
(foo.rb:1) enable
Enabling all breakpoints
(foo.rb:1) enable 1 3
Enabling the breakpoint 1 and 3
eval command
Evaluating the string as source code and printing the value.
Same as print command, please see print command.
help command
Displaying the help message.
Usage:
help [command]
h [command]
Typing help
without any options will display the command list.
Info Breakpoints Command
Displaying the specified breakpoint information.
Usage:
info breakpoints [breakpoint-no]
i b [breakpoint-no]
breakpoint-no: breakpoint number
Typing “info breakpoints” without ant option will display all breakpoint information. Example:
(sample.rb:1) info breakpoints
Num Type Enb What
1 breakpoint y at sample.rb:3 -> file name,line number
2 breakpoint n in Sample_class:sample_class_method -> [class:]method name
3 breakpoint y in sample_global_method
Displaying the specified breakpoint number:
(foo.rb:1) info breakpoints 1 3
Num Type Enb What
1 breakpoint y at sample.rb:3
3 breakpoint y in sample_global_method
List Command
To display the code of the source file.
Usage:
list [filename:]first[,last]
l [filename]:first[,last]
first: the opening row number last : the closing row number
When you specify the first
, but not the last
option, you will receive 10 rows.
When you do not specify both the first
and last
options, you will receive the next 10 rows.
Example:
Specifying file name and first row number
sample.rb:1) list sample2.rb:5
Specifying the file name and the first and last row number:
(sample.rb:1) list sample2.rb:6,7
Print Command
Evaluating the string as source code and printing the value.
Usage:
print [expr]
p [expr]
expr: expression
The expression is mandatory. The displayed expressions will be serially ordered from 1. If an exception occurs, the exception information will be displayed and the debugging will be continued.
Example:
(sample.rb:1) print 1+2
$1 = 3
(sample.rb:1) print self
$2 = main
Below is the case of the exception:
(sample.rb:1) print (1+2
$1 = SyntaxError: line 1: syntax error, unexpected $end, expecting ')'
Quit Command
Quitting the debugger.
Usage:
quit
q
Run Command
Running the program and stopping at the first breakpoint.
Usage:
run
r
Step Command
This will run the program step by step. When the method and the block are invoked, the program will be stop at the first row. The program, which is developed in C, will be ignored.


Select a Domain
Continue browsing or select a different trail.
Please select a trail before you continue.
Your new trail is being created, please wait.
Ensure you have selected a domain and that your trail name contains alpha-numberic characters only.
|
Name
Description
|
Some of your preferences are invalid or incomplete. Go to the add-on page to set the required preferences, so you can start using the Datawake.


Project Description
razorC.net CMS - it is fast and easy way to start and maintain professional web site. Developed with ASP.net web pages (razor syntax) it is great for WebMatrix developers. Very easy to setup and modify. You can change any existing page layout to work with razorC.net
in few minutes !!!
Visit www.razorC.net for more videos, templates, etc.
Developed by Chicago Web Design - 123PROSite.com
Get Started
- Download latest version from CodePlex
- UnZip the package
- Open it in WebMatrix
- Run site and it should work :)
- Go to your_domain.com/rcAdmin to access control panel (default user: "admin", pwd: "razorc")
Features:
- Bootstrap 3 responsive theme. You can create new theme in minutes. Additional FREE templates for razorC are available here :
FREE razorC templates
- Control panel to manage pages and widgets
- Automatic backups of widgets and pages
- CSS & Layout Editor
- SQL Server compact edition
- TinyMCE editor to write / edit content
- Ajax file browser
- Simple Menu helper
Working on:
- FAQ add-on
- Free new layouts/templates
To give you an idea of what you can do with razorC.net, check the sites below:
-
Master Cleaning Services
-
Auto Insurance
- Handzel Open
- Granite New Jersey
- US Granite Countertops
- Attract.CLICK
- Aspire Construction - Stucco
Friends:


Toggle navigation
Eventer
About
My Account
About
Support Portal
Contact
Error: The Full Name field should contain a valid full name, such as John Smith.
Error: The Subject field be at least 8 charcters long, but less than 45 charcters.
Error: The Email Address given is badly formatted.
Error: The Message given must be at least 15 charcters, and at most 1000 charcters.
Success! Your message was sent. We will try to reply(if warranted) as soon as possible.
Contact Techedit
Full Name:
Subject(Max 45 charcters, including spaces):
Email Address(Use the one associated with your account, if you have one):
Message(Max 1000 charcters, including spaces):
Submit Message


16 references to OperationState
System.Management.Automation (16)
engine\hostifaces\LocalConnection.cs (2)
1388
operationStateArgs.OperationState =
OperationState
.StartComplete;
1492
OperationState
.StartComplete;
engine\remoting\client\Job.cs (3)
2092
operationStateEventArgs.OperationState =
OperationState
.StopComplete;
2112
operationStateEventArgs.OperationState =
OperationState
.StartComplete;
2736
operationStateEventArgs.OperationState =
OperationState
.StopComplete;
engine\remoting\commands\ConnectPSSession.cs (2)
669
operationStateEventArgs.OperationState =
OperationState
.StartComplete;
676
operationStateEventArgs.OperationState =
OperationState
.StopComplete;
engine\remoting\commands\DisconnectPSSession.cs (2)
469
operationStateEventArgs.OperationState =
OperationState
.StartComplete;
476
operationStateEventArgs.OperationState =
OperationState
.StopComplete;
engine\remoting\commands\newrunspacecommand.cs (3)
1338
operationStateEventArgs.OperationState =
OperationState
.StopComplete;
1427
operationStateEventArgs.OperationState =
OperationState
.StopComplete;
1434
operationStateEventArgs.OperationState =
OperationState
.StartComplete;
engine\remoting\commands\PSRemotingCmdlet.cs (2)
3467
OperationState
.StopComplete;
3711
OperationState
.StopComplete;
engine\remoting\common\throttlemanager.cs (2)
38
internal
OperationState
OperationState { get; set; }
473
if (stateEventArgs.OperationState ==
OperationState
.StartComplete)


This is a bar chart visualization. Bar chart provides us very efficient way visualizing data. It is simple to visualize bi-variate data. These bars are generated with random values. On mouse over gives the exact y value of a particular bar. On clicking update button new dataset is generated randomly and plotted, previous data is represented as grey thick bars whereas new bars are red is value is decreased from previous value and green if value has increased.


← Back to dashboard Edit Post ({{post.post_url|format_url}}) {{post.vote_count}} {{post.vote_count|format_plural('point')}} by you on {{post.created_at|format_date}} | {{post.comments|length}} {{post.comments|length|format_plural('comment')}} Save post Delete post


This Folder is Closed By Default
Ooops! A Nested Folder
Look Ma - No Hands!
First Nested Item
Second Nested Item
Third Nested Item
Fourth Nested Item
Item 1
Item 2
Item 3
item
item
item
item


The Nighttime Light Dataset Webviewer
Web GIS
Data
Research
Learning
News
Projects & Operations
Publications
Countries
Topics
Toggle Layers
RadCal 1996 Layer
RadCal 2010 Layer
Querying RadCal 2010 Layer
NTL Change
<
>
=
Area (km)
<
>
=
Status
Found
Appear
Disappear
Missed
Saved Queries
Results
Name your query:


About Med Cabinet:
Med Cabinet is an app for new cannabis consumers (especially those trying to get off of pharmaceuticals) who want to use cannabis as a means to battle medical conditions and ailments. Help patients find the right strains, dosing, intake method and intake
schedule!
Our team created an app that efficiently assists the user in finding the best strain for them.


{% include "maced/modal.html" with action_type="merge" item_html_code=merge_html_code %}
{% include "maced/modal.html" with action_type="add" item_html_code=add_html_code %}
{# {% include "maced/modal.html" with action_type="merge" item_html_code=merge_html_code %} Will be changed to clone #}
{% include "maced/modal.html" with action_type="edit" item_html_code=edit_html_code %}
{% include "maced/modal.html" with action_type="delete" item_html_code=delete_html_code %}
{# {% include "maced/modal.html" with action_type="merge" item_html_code=merge_html_code %} Will be changed to info #}


Issue: ADJUST-ARRAY-FILL-POINTERReferences: ADJUST-ARRAY (p297)
Category: CLARIFICATION
Edit history: 15-Mar-88, Version 1 by Pitman
Problem Description:
CLtL does not specify clearly the effect of ADJUST-ARRAY on the fill
pointer.
Proposal (ADJUST-ARRAY-FILL-POINTER:MINIMAL):
Clarify that the :FILL-POINTER keyword argument to ADJUST-ARRAY is treated
as follows...
If :FILL-POINTER argument is not given, then the fill-pointer of the array
to be adjusted (if any) is left alone. It is an error to adjust an array
to a size smaller than its fill pointer without specifying the :FILL-POINTER
option so that its fill-pointer is properly adjusted in the process.
If supplied, the :FILL-POINTER argument must be either an integer between 0
and the new size of the array, the symbol T (indicating that the new size
of the array should be used), or the symbol NIL (indicating that the fill
pointer should left as it is -- as if the :FILL-POINTER option had not been
specified).
An error is signalled if a non-NIL value for :FILL-POINTER is supplied and
the array to be adjusted does not already have a fill pointer.
Test Case:
(SETQ A1 (MAKE-ARRAY 5 :FILL-POINTER 3 :ADJUSTABLE T))
(SETQ A2 (ADJUST-ARRAY A1 4))
(FILL-POINTER A1) => 3
(FILL-POINTER A2) => 3
(SETQ B1 (MAKE-ARRAY 5 :FILL-POINTER 3 :ADJUSTABLE T))
(SETQ B2 (ADJUST-ARRAY B1 2 :FILL-POINTER 1))
(FILL-POINTER B1) => 1
(FILL-POINTER B2) => 1
(SETQ C1 (MAKE-ARRAY 5 :FILL-POINTER 3 :ADJUSTABLE T))
(SETQ C2 (ADJUST-ARRAY C1 2 :FILL-POINTER T))
(FILL-POINTER C1) => 2
(FILL-POINTER C2) => 2
(SETQ D1 (MAKE-ARRAY 5 :ADJUSTABLE T))
(SETQ D2 (ADJUST-ARRAY D1 2 :FILL-POINTER 2)) signals an error.
(SETQ E1 (MAKE-ARRAY 5 :FILL-POINTER T :ADJUSTABLE T))
(SETQ E2 (ADJUST-ARRAY E1 4)) is an error.
Rationale:
This behavior must be more clearly defined if portable programs are going
to be able to depend on it.
Current Practice:
Symbolics Lisp implements the proposal. In case "E", it does not signal an
error. It simply leaves the illegal fill-pointer in place so that the
programmer can correct it using (SETF (FILL-POINTER E2) ...)
Cost to Implementors:
Probably most implementations do not deviate significantly from the proposed
behavior. The cost to implementors is probably very slight.
Cost to Users:
None. This clarifies a fuzzy area in the manual which users cannot currently
depend upon.
Cost of Non-Adoption:
The interaction between ADJUST-ARRAY and fill-pointers would continue to be
hazy, and portable programs would not be able to rely upon that behavior
being consistent across implementations.
Benefits:
The cost of non-adoption would be avoided.
Aesthetics:
There is little if any aesthetic impact of this change.
Discussion:
Pitman volunteered to write this issue up for the Cleanup committee. He's
not very passionate about the details one way or another, but figures it's
a good idea that they be clarified.
The cleanup committee didn't object.


Lobbyist Lookup
Data from House.gov
– Scraped and indexed by
ansonl, ltejedor, sherry97
Lobbyist Surname
Filing Organization
Organization Client
If you see this, something went wrong. :(


EAC-CPF on github and Web Interface
April 2013
Prototype Access System
August 2014
- XTF
CPF:
XTF branch for the SNAC prototype access system (deprecated)
April 2012
-
XTF
CPF: XTF branch for the SNAC prototype access system (deprecated)
-
EAC Graph
Load: script to process EAC-CPF records into a graph
database / graphML file (deprecated)
-
SNAC Related Collections
Widget: widget for Google Chrome and Mozilla Firefox
browsers; users viewing finding aids in NWDA, Library of Congress, and OAC websites will see a pop-up
window to see related EAC-CPF records in the SNAC prototype access system (deprecated)


|
Contiki 2.5
|
00001 /* 00002 * Copyright (c) 2005, Swedish Institute of Computer Science 00003 * All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions 00007 * are met: 00008 * 1. Redistributions of source code must retain the above copyright 00009 * notice, this list of conditions and the following disclaimer. 00010 * 2. Redistributions in binary form must reproduce the above copyright 00011 * notice, this list of conditions and the following disclaimer in the 00012 * documentation and/or other materials provided with the distribution. 00013 * 3. Neither the name of the Institute nor the names of its contributors 00014 * may be used to endorse or promote products derived from this software 00015 * without specific prior written permission. 00016 * 00017 * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 00018 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00019 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00020 * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 00021 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 00022 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 00023 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 00024 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 00025 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 00026 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 00027 * SUCH DAMAGE. 00028 * 00029 * This file is part of the Contiki operating system. 00030 * 00031 * @(#)$Id: process.h,v 1.17 2010/09/14 18:55:04 dak664 Exp $ 00032 */ 00033 00034 /** 00035 * \addtogroup sys 00036 * @{ 00037 */ 00038 00039 /** 00040 * \defgroup process Contiki processes 00041 * 00042 * A process in Contiki consists of a single \ref pt "protothread". 00043 * 00044 * @{ 00045 */ 00046 00047 /** 00048 * \file 00049 * Header file for the Contiki process interface. 00050 * \author 00051 * Adam Dunkels<EMAIL_ADDRESS>00052 * 00053 */ 00054 #ifndef __PROCESS_H__ 00055 #define __PROCESS_H__ 00056 00057 #include "sys/pt.h" 00058 #include "sys/cc.h" 00059 00060 typedef unsigned char process_event_t; 00061 typedef void * process_data_t; 00062 typedef unsigned char process_num_events_t; 00063 00064 /** 00065 * \name Return values 00066 * @{ 00067 */ 00068 00069 /** 00070 * \brief Return value indicating that an operation was successful. 00071 * 00072 * This value is returned to indicate that an operation 00073 * was successful. 00074 */ 00075 #define PROCESS_ERR_OK 0 00076 /** 00077 * \brief Return value indicating that the event queue was full. 00078 * 00079 * This value is returned from process_post() to indicate 00080 * that the event queue was full and that an event could 00081 * not be posted. 00082 */ 00083 #define PROCESS_ERR_FULL 1 00084 /* @} */ 00085 00086 #define PROCESS_NONE NULL 00087 00088 #ifndef PROCESS_CONF_NUMEVENTS 00089 #define PROCESS_CONF_NUMEVENTS 32 00090 #endif /* PROCESS_CONF_NUMEVENTS */ 00091 00092 #define PROCESS_EVENT_NONE 0x80 00093 #define PROCESS_EVENT_INIT 0x81 00094 #define PROCESS_EVENT_POLL 0x82 00095 #define PROCESS_EVENT_EXIT 0x83 00096 #define PROCESS_EVENT_SERVICE_REMOVED 0x84 00097 #define PROCESS_EVENT_CONTINUE 0x85 00098 #define PROCESS_EVENT_MSG 0x86 00099 #define PROCESS_EVENT_EXITED 0x87 00100 #define PROCESS_EVENT_TIMER 0x88 00101 #define PROCESS_EVENT_COM 0x89 00102 #define PROCESS_EVENT_MAX 0x8a 00103 00104 #define PROCESS_BROADCAST NULL 00105 #define PROCESS_ZOMBIE ((struct process *)0x1) 00106 00107 /** 00108 * \name Process protothread functions 00109 * @{ 00110 */ 00111 00112 /** 00113 * Define the beginning of a process. 00114 * 00115 * This macro defines the beginning of a process, and must always 00116 * appear in a PROCESS_THREAD() definition. The PROCESS_END() macro 00117 * must come at the end of the process. 00118 * 00119 * \hideinitializer 00120 */ 00121 #define PROCESS_BEGIN() PT_BEGIN(process_pt) 00122 00123 /** 00124 * Define the end of a process. 00125 * 00126 * This macro defines the end of a process. It must appear in a 00127 * PROCESS_THREAD() definition and must always be included. The 00128 * process exits when the PROCESS_END() macro is reached. 00129 * 00130 * \hideinitializer 00131 */ 00132 #define PROCESS_END() PT_END(process_pt) 00133 00134 /** 00135 * Wait for an event to be posted to the process. 00136 * 00137 * This macro blocks the currently running process until the process 00138 * receives an event. 00139 * 00140 * \hideinitializer 00141 */ 00142 #define PROCESS_WAIT_EVENT() PROCESS_YIELD() 00143 00144 /** 00145 * Wait for an event to be posted to the process, with an extra 00146 * condition. 00147 * 00148 * This macro is similar to PROCESS_WAIT_EVENT() in that it blocks the 00149 * currently running process until the process receives an event. But 00150 * PROCESS_WAIT_EVENT_UNTIL() takes an extra condition which must be 00151 * true for the process to continue. 00152 * 00153 * \param c The condition that must be true for the process to continue. 00154 * \sa PT_WAIT_UNTIL() 00155 * 00156 * \hideinitializer 00157 */ 00158 #define PROCESS_WAIT_EVENT_UNTIL(c) PROCESS_YIELD_UNTIL(c) 00159 00160 /** 00161 * Yield the currently running process. 00162 * 00163 * \hideinitializer 00164 */ 00165 #define PROCESS_YIELD() PT_YIELD(process_pt) 00166 00167 /** 00168 * Yield the currently running process until a condition occurs. 00169 * 00170 * This macro is different from PROCESS_WAIT_UNTIL() in that 00171 * PROCESS_YIELD_UNTIL() is guaranteed to always yield at least 00172 * once. This ensures that the process does not end up in an infinite 00173 * loop and monopolizing the CPU. 00174 * 00175 * \param c The condition to wait for. 00176 * 00177 * \hideinitializer 00178 */ 00179 #define PROCESS_YIELD_UNTIL(c) PT_YIELD_UNTIL(process_pt, c) 00180 00181 /** 00182 * Wait for a condition to occur. 00183 * 00184 * This macro does not guarantee that the process yields, and should 00185 * therefore be used with care. In most cases, PROCESS_WAIT_EVENT(), 00186 * PROCESS_WAIT_EVENT_UNTIL(), PROCESS_YIELD() or 00187 * PROCESS_YIELD_UNTIL() should be used instead. 00188 * 00189 * \param c The condition to wait for. 00190 * 00191 * \hideinitializer 00192 */ 00193 #define PROCESS_WAIT_UNTIL(c) PT_WAIT_UNTIL(process_pt, c) 00194 #define PROCESS_WAIT_WHILE(c) PT_WAIT_WHILE(process_pt, c) 00195 00196 /** 00197 * Exit the currently running process. 00198 * 00199 * \hideinitializer 00200 */ 00201 #define PROCESS_EXIT() PT_EXIT(process_pt) 00202 00203 /** 00204 * Spawn a protothread from the process. 00205 * 00206 * \param pt The protothread state (struct pt) for the new protothread 00207 * \param thread The call to the protothread function. 00208 * \sa PT_SPAWN() 00209 * 00210 * \hideinitializer 00211 */ 00212 #define PROCESS_PT_SPAWN(pt, thread) PT_SPAWN(process_pt, pt, thread) 00213 00214 /** 00215 * Yield the process for a short while. 00216 * 00217 * This macro yields the currently running process for a short while, 00218 * thus letting other processes run before the process continues. 00219 * 00220 * \hideinitializer 00221 */ 00222 #define PROCESS_PAUSE() do { \ 00223 process_post(PROCESS_CURRENT(), PROCESS_EVENT_CONTINUE, NULL); \ 00224 PROCESS_WAIT_EVENT(); \ 00225 } while(0) 00226 00227 /** @} end of protothread functions */ 00228 00229 /** 00230 * \name Poll and exit handlers 00231 * @{ 00232 */ 00233 /** 00234 * Specify an action when a process is polled. 00235 * 00236 * \note This declaration must come immediately before the 00237 * PROCESS_BEGIN() macro. 00238 * 00239 * \param handler The action to be performed. 00240 * 00241 * \hideinitializer 00242 */ 00243 #define PROCESS_POLLHANDLER(handler) if(ev == PROCESS_EVENT_POLL) { handler; } 00244 00245 /** 00246 * Specify an action when a process exits. 00247 * 00248 * \note This declaration must come immediately before the 00249 * PROCESS_BEGIN() macro. 00250 * 00251 * \param handler The action to be performed. 00252 * 00253 * \hideinitializer 00254 */ 00255 #define PROCESS_EXITHANDLER(handler) if(ev == PROCESS_EVENT_EXIT) { handler; } 00256 00257 /** @} */ 00258 00259 /** 00260 * \name Process declaration and definition 00261 * @{ 00262 */ 00263 00264 /** 00265 * Define the body of a process. 00266 * 00267 * This macro is used to define the body (protothread) of a 00268 * process. The process is called whenever an event occurs in the 00269 * system, A process always start with the PROCESS_BEGIN() macro and 00270 * end with the PROCESS_END() macro. 00271 * 00272 * \hideinitializer 00273 */ 00274 #define PROCESS_THREAD(name, ev, data) \ 00275 static PT_THREAD(process_thread_##name(struct pt *process_pt, \ 00276 process_event_t ev, \ 00277 process_data_t data)) 00278 00279 /** 00280 * Declare the name of a process. 00281 * 00282 * This macro is typically used in header files to declare the name of 00283 * a process that is implemented in the C file. 00284 * 00285 * \hideinitializer 00286 */ 00287 #define PROCESS_NAME(name) extern struct process name 00288 00289 /** 00290 * Declare a process. 00291 * 00292 * This macro declares a process. The process has two names: the 00293 * variable of the process structure, which is used by the C program, 00294 * and a human readable string name, which is used when debugging. 00295 * A configuration option allows removal of the readable name to save RAM. 00296 * 00297 * \param name The variable name of the process structure. 00298 * \param strname The string representation of the process' name. 00299 * 00300 * \hideinitializer 00301 */ 00302 #if PROCESS_CONF_NO_PROCESS_NAMES 00303 #define PROCESS(name, strname) \ 00304 PROCESS_THREAD(name, ev, data); \ 00305 struct process name = { NULL, \ 00306 process_thread_##name } 00307 #else 00308 #define PROCESS(name, strname) \ 00309 PROCESS_THREAD(name, ev, data); \ 00310 struct process name = { NULL, strname, \ 00311 process_thread_##name } 00312 #endif 00313 00314 /** @} */ 00315 00316 struct process { 00317 struct process *next; 00318 #if PROCESS_CONF_NO_PROCESS_NAMES 00319 #define PROCESS_NAME_STRING(process) "" 00320 #else 00321 const char *name; 00322 #define PROCESS_NAME_STRING(process) (process)->name 00323 #endif 00324 PT_THREAD((* thread)(struct pt *, process_event_t, process_data_t)); 00325 struct pt pt; 00326 unsigned char state, needspoll; 00327 }; 00328 00329 /** 00330 * \name Functions called from application programs 00331 * @{ 00332 */ 00333 00334 /** 00335 * Start a process. 00336 * 00337 * \param p A pointer to a process structure. 00338 * 00339 * \param arg An argument pointer that can be passed to the new 00340 * process 00341 * 00342 */ 00343 CCIF void process_start(struct process *p, const char *arg); 00344 00345 /** 00346 * Post an asynchronous event. 00347 * 00348 * This function posts an asynchronous event to one or more 00349 * processes. The handing of the event is deferred until the target 00350 * process is scheduled by the kernel. An event can be broadcast to 00351 * all processes, in which case all processes in the system will be 00352 * scheduled to handle the event. 00353 * 00354 * \param ev The event to be posted. 00355 * 00356 * \param data The auxiliary data to be sent with the event 00357 * 00358 * \param p The process to which the event should be posted, or 00359 * PROCESS_BROADCAST if the event should be posted to all processes. 00360 * 00361 * \retval PROCESS_ERR_OK The event could be posted. 00362 * 00363 * \retval PROCESS_ERR_FULL The event queue was full and the event could 00364 * not be posted. 00365 */ 00366 CCIF int process_post(struct process *p, process_event_t ev, void* data); 00367 00368 /** 00369 * Post a synchronous event to a process. 00370 * 00371 * \param p A pointer to the process' process structure. 00372 * 00373 * \param ev The event to be posted. 00374 * 00375 * \param data A pointer to additional data that is posted together 00376 * with the event. 00377 */ 00378 CCIF void process_post_synch(struct process *p, 00379 process_event_t ev, void* data); 00380 00381 /** 00382 * \brief Cause a process to exit 00383 * \param p The process that is to be exited 00384 * 00385 * This function causes a process to exit. The process can 00386 * either be the currently executing process, or another 00387 * process that is currently running. 00388 * 00389 * \sa PROCESS_CURRENT() 00390 */ 00391 CCIF void process_exit(struct process *p); 00392 00393 00394 /** 00395 * Get a pointer to the currently running process. 00396 * 00397 * This macro get a pointer to the currently running 00398 * process. Typically, this macro is used to post an event to the 00399 * current process with process_post(). 00400 * 00401 * \hideinitializer 00402 */ 00403 #define PROCESS_CURRENT() process_current 00404 CCIF extern struct process *process_current; 00405 00406 /** 00407 * Switch context to another process 00408 * 00409 * This function switch context to the specified process and executes 00410 * the code as if run by that process. Typical use of this function is 00411 * to switch context in services, called by other processes. Each 00412 * PROCESS_CONTEXT_BEGIN() must be followed by the 00413 * PROCESS_CONTEXT_END() macro to end the context switch. 00414 * 00415 * Example: 00416 \code 00417 PROCESS_CONTEXT_BEGIN(&test_process); 00418 etimer_set(&timer, CLOCK_SECOND); 00419 PROCESS_CONTEXT_END(&test_process); 00420 \endcode 00421 * 00422 * \param p The process to use as context 00423 * 00424 * \sa PROCESS_CONTEXT_END() 00425 * \sa PROCESS_CURRENT() 00426 */ 00427 #define PROCESS_CONTEXT_BEGIN(p) {\ 00428 struct process *tmp_current = PROCESS_CURRENT();\ 00429 process_current = p 00430 00431 /** 00432 * End a context switch 00433 * 00434 * This function ends a context switch and changes back to the 00435 * previous process. 00436 * 00437 * \param p The process used in the context switch 00438 * 00439 * \sa PROCESS_CONTEXT_START() 00440 */ 00441 #define PROCESS_CONTEXT_END(p) process_current = tmp_current; } 00442 00443 /** 00444 * \brief Allocate a global event number. 00445 * \return The allocated event number 00446 * 00447 * In Contiki, event numbers above 128 are global and may 00448 * be posted from one process to another. This function 00449 * allocates one such event number. 00450 * 00451 * \note There currently is no way to deallocate an allocated event 00452 * number. 00453 */ 00454 CCIF process_event_t process_alloc_event(void); 00455 00456 /** @} */ 00457 00458 /** 00459 * \name Functions called from device drivers 00460 * @{ 00461 */ 00462 00463 /** 00464 * Request a process to be polled. 00465 * 00466 * This function typically is called from an interrupt handler to 00467 * cause a process to be polled. 00468 * 00469 * \param p A pointer to the process' process structure. 00470 */ 00471 CCIF void process_poll(struct process *p); 00472 00473 /** @} */ 00474 00475 /** 00476 * \name Functions called by the system and boot-up code 00477 * @{ 00478 */ 00479 00480 /** 00481 * \brief Initialize the process module. 00482 * 00483 * This function initializes the process module and should 00484 * be called by the system boot-up code. 00485 */ 00486 void process_init(void); 00487 00488 /** 00489 * Run the system once - call poll handlers and process one event. 00490 * 00491 * This function should be called repeatedly from the main() program 00492 * to actually run the Contiki system. It calls the necessary poll 00493 * handlers, and processes one event. The function returns the number 00494 * of events that are waiting in the event queue so that the caller 00495 * may choose to put the CPU to sleep when there are no pending 00496 * events. 00497 * 00498 * \return The number of events that are currently waiting in the 00499 * event queue. 00500 */ 00501 int process_run(void); 00502 00503 00504 /** 00505 * Check if a process is running. 00506 * 00507 * This function checks if a specific process is running. 00508 * 00509 * \param p The process. 00510 * \retval Non-zero if the process is running. 00511 * \retval Zero if the process is not running. 00512 */ 00513 CCIF int process_is_running(struct process *p); 00514 00515 /** 00516 * Number of events waiting to be processed. 00517 * 00518 * \return The number of events that are currently waiting to be 00519 * processed. 00520 */ 00521 int process_nevents(void); 00522 00523 /** @} */ 00524 00525 CCIF extern struct process *process_list; 00526 00527 #define PROCESS_LIST() process_list 00528 00529 #endif /* __PROCESS_H__ */ 00530 00531 /** @} */ 00532 /** @} */


The instrument that sounds like a monkey!
This instrument is commonly used by samba schools , during brazilian carnival. It makes a high-pitch squeaky sound.
This instrument is commonly used by samba schools , during brazilian carnival. It makes a high-pitch squeaky sound.


{%extends 'base.html'%} {% block content %} {{ block.super}} {% load bootstrap4 %} {% load staticfiles%}
{{business.email }}
Location: {{business.business_strip.name}}


24/11 - 30/11
MYSTERY
GIFTS
BONANZA
CRAZY BLACK FRIDAY & CYBER MONDAY
24/11 - 30/11
MYSTERY
GIFTS
BONANZA
CRAZY BLACK FRIDAY & CYBER MONDAY
OPEN IT NOW
Sorry,
you have participated in this activity today,
Please come back tomorrow and
win ANOTHER Surprise Gift!


Amazon S3 Bucket AbortIncompleteMultipartUpload
The
AbortIncompleteMultipartUpload
property type creates a lifecycle rule that aborts
incomplete multipart uploads to an Amazon S3 bucket. When Amazon S3 aborts a multipart
upload, it deletes
all parts associated with the multipart upload.
For more information, see
Aborting Incomplete Multipart Uploads Using a Bucket Lifecycle Policy
in the Amazon Simple Storage Service Developer Guide.
AbortIncompleteMultipartUpload
is a property of the Rule property type.
Syntax
To declare this entity in your AWS CloudFormation template, use the following syntax:
JSON
{ "DaysAfterInitiation" :
Integer
}
YAML
DaysAfterInitiation:
Integer
Properties
DaysAfterInitiation
-
The number of days after the upload is initiated before aborting the upload.
Required: Yes
Type: Integer
Update requires: No interruption