Structural Geology @ Hamilton College
Center photo by C. Bate. Middle photo on the right by L. Crossey. Bottom photo on the right by E. Houlihan.
Welcome!
I am an Assistant Professor of Geosciences at Hamilton College. I am a field-based structural geologist with a broad set of research interests that center around how the continental crust accomodates deformation. From flow in the lower crust to crustal scale fault/shear zone systems, I combine statistical analysis of field structural data with quantitative microstructures and interdisciplinary lab techniques to characterize strain, kinematics, and deformation processes. A natural extension (no structure-pun intended) of this research is the study of crystal-scale strain accomodation and rheology. Please head over to my research page to find out more!
Increasing the diversity of the geosciences and tackling barriers to equity and inlcusion for all people is a major priorety in my professional life.
At Hamilton, I teach an introductory Geosciences course and Structural Geology and Tectonics. I care deeply about teaching. Geologic processes exert an enormous control on many of today's pressing issues, from climate change to water resources to energy. Whether or not students persue a career in the geosciences, we need to increase our society's geologic literacy. Take a look at my teaching page to hear more about my teaching philosophy.
Contact info
email:
<EMAIL_ADDRESS>Recent Activity
- July 2022: I started as an Assistant Professor at Hamilton College.
- May 2022: Our paper, Greenstone‐Up Shear Sense at the Margin of the Mt Edgar Dome, East Pilbara Terrane: Implications for Dome and Keel Formation in the Early Earth came out in Tectonics!
- February 2021: Our paper, Internal structure of the Paleoarchean Mt Edgar dome, Pilbara Craton, Western Australia was accepted at Precambrian Research!
- June 2020: I successfully defended my PhD entitled, Internal fabrics and marginal deformation of the Paleoarchean Mt Edgar dome, East Pilbara Terrane, Western Australia: Structural constraints on crustal flow in the early Earth.
- Sept 2019: Two of us from the East Pilbara project presented at the GSA 2019 Fall Meeting. It was a particularly great meeting with lots of good sessions about deformation and tectonics.
- March-April 2019: Had a fantastic time as a visiting instructor for Structural Geology at Colorado College, Block 7.
- Dec 2018: Attended the AGU Fall Meeting.
- Oct 2018: Looking forward to attending the AGU Fall Meeting in Washington, D.C., where I will present work from the East Pilbara craton (see abstract).
- June 2018: Our paper on statistics in structural geology, Roberts et al., 2018, was accepted to the Journal of Structural Geology 40th anniversary special volume.
- May 1 to August 10, 2018: Everone in the field team has made it back safetly after a superb three month field season in the East Pilbara.
- April 2018: Successfully passed my preliminary exam into dissertator status.
- December 2017: Presented a poster at the AGU Fall meeting about keeping track of orientation data in the StraboSpot data system.
- November 2017: Gave a talk at the Specialist Group in Tectonics and Structural Geology (SGTSG) meeting in Denmark, Western Australia.
- November 2017: Attended the 7-day SGTSG preconference field trip led by the Geological Survey of Western Australia.


From:Frank Jewell Smith & Williamson Private Banking Services Riding House Extension, London, Uk Dear Friend, I am Mr. Frank Jewell, the accounting officer-in charge of the Private investment section of the above named Finance house. I have decided to contact you on a business Transfer that requires confidentiality, trust and transparency,where both of us have a lot to Benefit, during my investigation and auditing in the Accounts section, my department came across a huge sum of money belonging to a deceased person, a foreigner who died On January 7, 2005 in a auto crash. This Fund has been dormant in his account in the private investment dept without any claim to this fund in our custody, either From his family or relation. The said amount is (7.5 million pounds)which is about ($15million US Dollars) As it might interest you to know, I got your contact through international business enquiry and my search for a trust worthy business partner that can handle a business of this magnitude. Meanwhile all arrangement to put claim to this fund in Your name as the bonafide next of kin to the deceased,And get the required approval to transfer this money to a foreign account, have been put in place. While The next line of action to conclude this transaction In the next 10 working days, will be relayed to you as soon as you indicate your interest in this Transaction.I must also inform you that upon the completion of this Transaction, you will be entitled to 40% of the total Sum as gratification, for your role and assistance, While the balance will be for me as the owner of the funds. Please, you have been advised to keep this to your self since I am still in service and intend to Retire after I conclude this project. I will be monitoring the whole situation here until you confirm the money in your account. Then, immediately, I shall come down to the country of your nominated account for subsequent sharing of the Funds according to percentages previously indicated and further investment. Please use this email address for security reasons<EMAIL_ADDRESS>Yours faithfully, Mr. Frank Jewell _________________________________________________________________ Get a FREE Web site, company branded e-mail and more from Microsoft Office Live! http://clk.atdmt.com/MRT/go/mcrssaub0050001411mrt/direct/01/


Understanding Pyclaw Classes¶
Contents
Flow of a Pyclaw Simulation¶
The basic idea of a pyclaw simulation is to construct a Solution object, hand it to a Solver object, and request a solution at a new time. The solver will take whatever steps are necessary to evolve the solution to the requested time.
The bulk of the work in order to run a simulation then is the creation and setup of the appropriate Domain, State, Solution, and Solver objects needed to evolve the solution to the requested time.
Creation of a Pyclaw Solution¶
A Pyclaw Solution is a container for a collection of Domain and State designed with a view to future support of adaptive mesh refinement and multi-block simulations. The Solution object keeps track of a list of State objects and controls the overall input and output of the entire collection of State objects. Each State object inhabits a Grid, composed of Dimension objects that define the extents of the Domain. Multiple states can inhabit the same grid, but each State inhabits a single grid.
The process needed to create a Solution object then follows from the bottom up.
>>> from clawpack import pyclaw
>>> x = pyclaw.Dimension('x', -1.0, 1.0, 200)
>>> y = pyclaw.Dimension('y', 0.0, 1.0, 100)
This code creates two dimensions, a dimension x on the interval [-1.0, 1.0] with \(200\) grid points and a dimension y on the interval [0.0, 1.0] with \(100\) grid points.
Note
Many of the attributes of a Dimension object are set automatically so make sure that the values you want are set by default. Please refer to the Dimension classes definition for what the default values are.
Next we have to create a Domain object that will contain our dimensions objects.
>>> domain = pyclaw.Domain([x,y])
>>> num_eqn = 2
>>> state = pyclaw.State(domain,num_eqn)
Here we create a domain with the dimensions we created earlier to make a single 2D Domain object. Then we set the number of equations the State will represent to 2. Finally, we create a State that inhabits this domain. As before, many of the attributes of the Domain and State objects are set automatically.
We now need to set the initial condition q and possibly aux to the correct values.
>>> import numpy as np
>>> sigma = 0.2
>>> omega = np.pi
>>> Y,X = np.meshgrid(state.grid.y.centers,state.grid.x.centers)
>>> r = np.sqrt(X**2 + Y**2)
>>> state.q[0,:] = np.cos(omega * r)
>>> state.q[1,:] = np.exp(-r**2 / sigma**2)
We now have initialized the first entry of q to a cosine function evaluated at the cell centers and the second entry of q to a gaussian, again evaluated at the grid cell centers.
Many Riemann solvers also require information about the problem we are going to run which happen to be grid properties such as the impedence \(Z\) and speed of sound \(c\) for linear acoustics. We can set these values in the problem_data dictionary in one of two ways. The first way is to set them directly as in:
>>> state.problem_data['c'] = 1.0
>>> state.problem_data['Z'] = 0.25
If you’re using a Fortran Riemann solver, these values will automatically get copied to the corresponding variables in the cparam common block of the Riemann solver. This is done in solver.setup(), which calls state.set_cparam().
Last we have to put our State object into a Solution object to complete the process. In this case, since we are not using adaptive mesh refinement or a multi-block algorithm, we do not have multiple grids.
>>> sol = pyclaw.Solution(state,domain)
We now have a solution ready to be evolved in a Solver object.
Creation of a Pyclaw Solver¶
A Pyclaw Solver can represent many different types of solvers; here we will use a 1D, classic Clawpack type of solver. This solver is defined in the solver module.
First we import the particular solver we want and create it with the default configuration.
>>> solver = pyclaw.ClawSolver1D()
>>> solver.bc_lower[0] = pyclaw.BC.periodic
>>> solver.bc_upper[0] = pyclaw.BC.periodic
Next we need to tell the solver which Riemann solver to use from the Riemann Solver Package. We can always check what Riemann solvers are available to use via the riemann module. Once we have picked one out, we pass it to the solver via:
>>> from clawpack import riemann
>>> solver.rp = riemann.acoustics_1D
In this case we have decided to use the 1D linear acoustics Riemann solver. You can also set your own solver by importing the module that contains it and setting it directly to the rp attribute of the particular object in the class ClawSolver1D.
>>> import my_rp_module
>>> solver.rp = my_rp_module.my_acoustics_rp
Last we finish up by specifying solver options, if we want to override the defaults. For instance, we might want to specify a particular limiter
>>> solver.limiters = pyclaw.limiters.tvd.vanleer
If we wanted to control the simulation we could at this point by issuing the following commands:
>>> solver.evolve_to_time(sol,1.0)
This would evolve our solution sol to t = 1.0 but we are then responsible for all output and other setup considerations.
Creating and Running a Simulation with Controller¶
The Controller coordinates the output and setup of a run with the same parameters as the classic Clawpack. In order to have it control a run, we need only to create the controller, assign it a solver and initial condition, and call the run() method.
>>> from pyclaw.controller import Controller
>>> claw = Controller()
>>> claw.solver = solver
>>> claw.solutions = sol
Here we have imported and created the Controller class, assigned the Solver and Solution.
These next commands setup the type of output the controller will output. The parameters are similar to the ones found in the classic clawpack claw.data format.
>>> claw.output_style = 1
>>> claw.num_output_times = 10
>>> claw.tfinal = 1.0
When we are ready to run the simulation, we can call the run() method. It will then run the simulation and output the appropriate time points. If the keep_copy is set to True the controller will keep a copy of each solution output in memory in the frames array. For instance, you can then immediately plot the solutions output into the frames array.
Restarting a simulation¶
To restart a simulation, simply initialize a Solution object using an output frame from a previous run; for example, to restart from frame 3
>>> claw.solution = pyclaw.Solution(3)
By default, the Controller will number your output frames starting from the frame number used for initializing the Solution object. If you want to change the default behaviour and start counting frames from zero, you will need to pass the keyword argument count_from_zero=True to the solution initializer.
Note
It is necessary to specify the output format (‘petsc’ or ‘ascii’).
If your simulation includes aux variables, you will need to either recompute them or output the aux values at every step, following the instructions below.
Outputting aux values¶
To write aux values to disk at the initial time:
>>> claw.write_aux_init = True
To write aux values at every step:
>>> claw.write_aux_always = True
Outputting derived quantities¶
It is sometimes desirable to output quantities other than those in the vector q. To do so, just add a function compute_p to the controller that accepts the state and sets the derived quantities in state.p
>>> def stress(state):
... state.p[0,:,:] = np.exp(state.q[0,:,:]*state.aux[1,:,:]) - 1.
>>> state.mp = 1
>>> claw.compute_p = stress


Log Number of Watchers
Set Full Name
Full name is :{{::fullName}}
Log First Name
Log Full Name
Input th first name:


SIX DAYS SEVEN NIGHTS 1998 A film review by Timothy Voon Copyright 1998 Timothy Voon 1 :-) for his girl Friday
Cast: Harrison Ford, Anne Heche, David Schwimmer, Jacqueline Obradors, Temuera Morrison Directors: Ivan Reitman Producers: Ivan Reitman, Roger Birnbaum, Wallis Nicita Screenplay: Michael Browning
Harrison Ford is getting to the age where playing a male lead, requires more than just a set of good looks. The perpetually likeable Ford, has charisma, charm and likeability that will tie him over into the next century. Playing something reminiscent of the late Cary Grant in FATHER GOOSE, Ford is a bit of a scruffy, drinking pilot that crashes his plane on a deserted island, with a perky Anne Heche, fashion magazine editor on board.
So this story has a Robinson Crusoe feel about it and the first half the movie is about survival and mostly comic, because of a good series of one liners between the Heche and Ford. Unfortunately, the final half falls into a rather round-the-mill, ‘die hard' action flick once the pirates arrive on the scene. The idea of Anne Heche, being Ford's girl Friday is quite entertaining, but is she really the right choice for a good romantic lead? There is some chemistry between Heche and Ford, but it really should have stayed more on an intellectual level, than a physical one. The passion aspect of their relationship is as solid as a half-boiled egg.
David Schwimmer doing his usual ‘rah, rah', ‘I'm such a jerk' persona, is perfect for his role as the weak-spirited fiancée of the Heche character. So tt's not surprising that she chooses Ford over him. Although, no aspect of this movie is exceptional, overall it is well written and directed and more enjoyable than one would expect. After all, it is a product of Ivan Reitman and any admirers of his work should expect a comic side to this movie.
Timothy Voon e-mail<EMAIL_ADDRESS>Movie Archives http://us.imdb.com/M/reviews_by?Tim+Voon Hugues Bouclier's Movies in Melbourne http://www.labyrinth.net.au/~bouclier/week/movies.html
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Data from: Response of bluebunch wheatgrass to invasion differences in competitive ability among invader-experienced and naïve populations
Sources Summary Caveats Setup Import Reproducibility Table 1 Methods Check on balance The model is unclear Table 1–published Table 1 - repro Figure 1 Fig 1 – published Fig 1 – repro 3.1.1 Seedling 3.1.2 Juvenile 3.2 Relative Interaction Index Supression Fig 2 Fig 2 – published Fig 2 repro Statistical red flags Sources Gibson A, Nelson CR, Atwater DZ (2018) Response of bluebunch wheatgrass to invasion: Differences in competitive ability among invader-experienced and invader-naïve populations.
Data from: Herbivory and eutrophication mediate grassland plant nutrient responses across a global climatic gradient
Sources Summary Caveats Setup Import Reproducibility Statistical red flags Sources Anderson TM, Griffith DM, Grace JB, Lind EM, Adler PB, Biederman LA, Blumenthal DM, Daleo P, Firn J, Hagenah N, Harpole WS, MacDougall AS, McCulley RL, Prober SM, Risch AC, Sankaran M, Schütz M, Seabloom EW, Stevens CJ, Sullivan LL, Wragg PD, Borer ET (2018) Herbivory and eutrophication mediate grassland plant nutrient responses across a global climatic gradient.
Data from: Perceived threats of infanticide reduce maternal allocation during lactation and lead to elevated oxidative damage in offspring
Sources Summary Caveats Setup Import Reproducibility Offspring weight Maternal behaviour Glucocorticoid metabolites in mothers Fig. 3 Oxidative stress in offspring Statistical Red Flags 1. Computation of ANOVA table using Afex package How balanced is the design ANOVA using Afex (computation above) 3 ANOVA table using lme/lmer Compare LMM to ANOVA table using lm() and AOV (ignoring clustering due to repeated measures) Plot it to visualize the effects Sources Gale T, Garratt M, Brooks RC (2018) Perceived threats of infanticide reduce maternal allocation during lactation and lead to elevated oxidative damage in offspring.
Data from: Habitat management alters thermal opportunity
Sources Summary Caveats Setup Import Cleaning Reproducibility Selected temperatures and thermal quality of habitat Thermal preference (Tset) Thermal quality of habitat (de) Table 1 Encounter rates Fig 2 Lizard body temperatures and extent of thermoregulation Thermal performance curves and critical thermal limits Statistical Red Flags Best practice recommendations Sources Neel LK, McBrayer LD (2018) Habitat management alters thermal opportunity. Functional Ecology 32(8): 2029-2039. https://doi.org/10.1111/1365-2435.13123
Data from: The significance of prey avoidance behaviour for the maintenance of a predator colour polymorphism
Sources Summary Caveats Setup Import Reproducibility Experiment 1 Statistical methods cleaning and recoding Table 1 reported table 1 Effect of spider treatments Figure 1 Experiment 2 Statistical Methods Offer 1 – nonparametric 2-way ANOVA Figure 2 Offer 2 Statistical Red Flags Sources Ajuria Ibarra H, Kinahan M, Marcetteau J, Mehigan AJR, Ziegelmeier RO, Reader T (2018) The significance of prey avoidance behaviour for the maintenance of a predator colour polymorphism.
Data from Organic matter and nutrient inputs from large wildlife influence ecosystem function in the Mara River, Africa
Sources Summary Caveats Set up Import Reproducibility Nutrient dissolution rates Statistical methods ANOVA results Posthoc pairwise comparisons Decomposition rates Statistical methods ANOVA results Nutrient limitation Statistical method Respiration Results Chlorophyll a results Ecosystem Function Experimental Streams River Biofilms Statistical red-flags Sources Subalusky AL, Dutton CL, Njoroge L, Rosi EJ, Post DM (2018) Organic matter and nutrient inputs from large wildlife influence ecosystem function in the Mara River, Africa.
Data from: Density-dependent positive feedbacks buffer aquatic plants from interactive effects of eutrophication and predator loss
Sources Summary Caveats Set up Import data cleaning Reproducibility Appendix S5 Table S1 reproducing epiphytic algae biomass columns in-text Appendix S5 Table S2 Figure 2 Statistical Red-flags Figure red-flags Simulate this Sources Source: Donadi S, Austin ÅN, Svartgren E, Eriksson BK, Hansen JP, Eklöf JS (2018) Density-dependent positive feedbacks buffer aquatic plants from interactive effects of eutrophication and predator loss. Ecology 99(11): 2515-2524.
Data from: Litter removal in a tropical rain forest reduces fine root biomass and production but litter addition has few effects
Sources Summary Caveats Set up Functions import Note in file Data inconsistencies Data pre-processing Reproducibility Section: Fine root mass and production My ANOVA results reported ANOVA results Did the authors use a one way ANOVA with no random effects? Figure 1 post-hoc tests for fig 1 Fine root mass production effects of treatment on FRB and FRB production figure 2 Section: Fine root length: standing crop, production and survivorship table 1 Figure 3 post hoc tests for fig.
Data from: Interactions among predators and plant specificity protects herbivores from top predators
Summary Caveats Set up Import Reproducibility Effect on total predators my results reported results Effect on total herbaceous my results reported results ANOVA table in Appendix 3, Table S1 Fig 1 Subsetting the response spiders predatory insects Hemiptera Coleoptera Lepidoptera Orthoptera Fig S6 Statistical red-flags Source: Bosc C, Roets F, Hui C, Pauw A (2018) Interactions among predators and plant specificity protect herbivores from top predators.
Data from: Frequency of virus-resistant hosts determines experimental community dynamics
Summary Caveats Set up Reproducibility missing data Table 1 what model? AOV vs. lmer AOV computation Table 1 – my results Table 1 – reported results Did the authors throw out A3 for Chlorella and Rotifer? Table 2 AOV v lmer Table 2 – my results Table 2 – reported Did the authors throw out A3 for Chlorella and Rotifer? Figure 2 Statistical presentation Source: Coloma S, Gaedke U, Sivonen K, Hiltunen T (2018) Frequency of virus-resistant hosts determines experimental community dynamics.


Basics of Image Processing
We recommend that you go through this tutorial before navigating this website! You'll thank us later.
Pixel Array
There are a few programming languages that provide us with a list containing all the pixels displayed on the screen. In p5.js, this list is a flat array with the RGBA values of every pixel on the canvas. Since each pixel is described with four pieces of information, it takes up four slots on the Pixel Array.
pixels = [p1, p1, p1, p1, p2, p2, p2, p2, p3, p3, p3, p3, ...]
Those pieces of information correspond to the pixel's rgba values (red, green, blue & alpha), which range from 0 to 255.
That means if the first pixel on the screen (upper left) is black and the second pixel (its right neighbor) is white, this is how they would be displayed on the Pixel Array:
pixels = [0, 0, 0, 255, 255, 255, 255, 255, ...]
Pixel Density
If your computer is relatively new, chances are it has a screen that compacts a punch of pixels into one, generating higher definition. In order for our code to work, we need a more rudimentary setup. In order to do that, in your function setup(), insert:
pixelDensity(1);
function setup(){
createCanvas(320,240);
pixelDensity(1);
}
This will make sure your canvas will only display one pixel per pixel. Back to the old roots.
Loading Pixels
The first step to acess the Pixel Array on your p5.js sketch, is to upload it. To get a Pixel Array for your entire canvas, in the beginning of your function draw(), insert:
If you don't want to mess with your whole canvas, just an image, insert:
img.loadPixels();
(img == variable name of your image)
[ATTENTION:] pixels (or img.pixels) is the name p5.js gave to our Pixel Array! You'll need to remember this later.
Double For Loop
If you are looking to manipulate your whole canvas, you are going to need a double for loop going through every column and every row of your screen. Our goal is to go thourgh the first row (x by x), move one y down, go through every x again, and move one y down again, and... you get the idea.
function setup(){
createCanvas(320,240);
pixelDensity(1);
}
function draw(){
background(255);
loadPixels();
for(var y = 0; y < height; y++) {
for(var x = 0; x < width; x++){
}
}
}
We are increasing x, but at a particular y level. That means our y's will be our outer for loop, and our x's are our inner loop.
Indexing
Navigating through every pixel on the screen is hard enough, but navigating though every RGBA value of every pixel is even harder. To make your life easier, navigate through your Pixel Array 4 by 4 (since each pixel takes up 4 slots).
To do that, inside your for loop initiate an index varible which will be the r value (first value) of each pixel. How do we get the index of the red value of a pixel form it's X/Y coordinates?
The index positon of the red value is 4 times the number of pixels that are in front of it.
var index = (x + y * width)*4;
Since our index varible corresponds to r(ed) and it moves 4 by 4, index+1 is g(reen), index+2 is b(lue), and index+3 is a(lpha).
red = pixels[index+0];
green = pixels[index+1];
blue = pixels[index+2];
alpha = pixels[index+3];
Your for loop should look like this so far:
function draw() {
background(51);
loadPixels();
for (var y = 0; y < height; y++) {
for (var x = 0; x < width; x++) {
var index = (x + y * width)*4;
pixels[index+0] = ?;
pixels[index+1] = ?;
pixels[index+2] = ?;
pixels[index+3] = ?;
}
}
}
Use img.pixels[ ] if you used an image instead of your canvas
Cool, awesome, great!  Now all you have to do is write your recipe and let the program follow it!
The recipe we'll be sharing with you today is how to make a noisy rainbow gradient out of your canvas.
- Set every red value to it's x position.
- Set every green value to a random number between 0 and 255.
- Set every blue value to it's y position.
- Set every alpha to 255
Your code should look like this:
function draw() {
background(51);
loadPixels();
for (var y = 0; y < height; y++) {
for (var x = 0; x < width; x++) {
var index = (x + y * width)*4;
pixels[index+0] = x;
pixels[index+1] = random(255);
pixels[index+2] = y;
pixels[index+3] = 255;
}
}
}
Use img.pixels instead if you used an image instead of your canvas
Update Pixels
Almost done! Since you manipulated your Pixel Array, you need to update it so that your canvas can display it to you. Right before the end of the scope of your function draw(), insert this:
updatePixels();
function draw() {
background(51);
loadPixels();
for (var y = 0; y < height; y++) {
for (var x = 0; x < width; x++) {
var index = (x + y * width)*4;
pixels[index+0] = x;
pixels[index+1] = random(255);
pixels[index+2] = y;
pixels[index+3] = 255;
}
}
updatePixels();
}
or img.updatePixels(); in case you used an image instead of your canvas


WITNESS LIST Corrections Committee March 17, 2005-10:30A HB 291 For: Kahan, Andy (Mayor's Crime Victims Office) Smith, Amy (Harris County D.A.'s Office) Stephens, Stephanis (Self) Against: Brady, Denise (Mental Health Association in Texas) Gill, Raman (Texas Appleseed) Mitchell, Beth (Advocacy, Inc.) On: Edmonds, Shannon (Texas District and County Attorneys Association) HB 448 On: Livingston, Brad (Texas Department of Criminal Justice) HB 550 On: Edmonds, Shannon (Texas District and County Attorneys Association) HB 575 For: del Llano, Ann (A.C.L.U. of Texas) Place, Allen (Texas Criminal Defense Lawyers Association) Rayfield, Penny (Austin-Travis County Reentry Roundtable) Slaughter, Leon (Self) Against: Bradley, John (Self) Breen, Terry (D.A. 24th Judicial District and D.A. Fort Bend County) HB 845 For: Bradley, John (Self) Lee, Donald (Texas Conference of Urban Counties) McDaniel, Tom (Williamson County Commisoner's Court) Starnes, Jane (Self and Williamson County District Attorney's Office) Wilson, James (Williamson Co. Sheriff's Office) Against: Kirk, Chris (Self and Sheriff's Association of Texas) White, Mike (Self and Orange County Sheriff's Office) On: Julian, Terry (Texas Commision on Jail Standards) Wood, Brandon (Texas Commision on Jail Standards)


As the magnitude of some radiative feedbacks is modulated by processes that may appear hidden in their overall evaluation, focused analyses have been proposed to reveal elements specifically related to sea ice and ocean. For instance, the surface albedo feedback is more efficient for thin than for thick sea ice as a similar change in thickness induced by a given perturbation will lead to a larger increase in the open water area and thus a larger change in albedo. This has led to the definition of the open water formation efficiency as the percent open water formation per cm of ice melt over the melt season 47.
Some other feedbacks are not directly related to radiative processes. For example, basal sea ice growth rate is largely driven by heat conduction, which varies as the inverse of sea ice thickness: thin ice grows much faster than thick ice 48. At the same time, sea ice melt rate is nearly independent of ice thickness. This leads to the negative ice growth-thickness feedback. When a positive radiative perturbation is applied to the sea ice surface energy balance leading to an initial ice thinning, ice formation in winter is enhanced so that the ice adjusts its thickness to match the new growth rates to the new melting rates 49, resulting in a new equilibrium for the sea ice thickness. As the thermal insulation power of snow is even more efficient than that of sea ice, its influence on the ice growth-thickness feedback is important, but not fully quantified due to the complex relationship between snow depth and sea-ice thickness 30.
Because of the large heat fluxes at the ocean–ice interface in the Southern Ocean, feedback analyses there have often focused on the interactions between ocean and sea ice. In the ice-covered parts of the Southern Ocean, the stability of the upper water column is controlled by salinity, with the ocean temperature and salinity increasing with depth below the surface mixed layer (the ocean layer that has a nearly homogeneous density). In winter, when brine is released by sea ice formation, surface mixed layer density increases, inducing a mixed layer deepening and the entrainment of relatively warm water into the surface oceanic layer. This warm water reduces ice formation and can even melt ice, which partly compensates for the initial ice formation, leading to a negative ice production–entrainment feedback 50, 51
The ice production–entrainment feedback is acting at the seasonal scale but the magnitude of the ice–ocean flux can also be modulated at inter-annual to decadal timescales, leading to the positive ice production heat-storage feedback 52, 53. If ice production is very large during a particular year, the mixed layer will be deeper and the salt released by ice formation will be distributed over a larger depth range. In summer, the mixing is weaker and the freshwater input due to ice melting will be spread over a shallower layer, leading to a net downward vertical salt transport. This can restrain the vertical exchanges in the water column the subsequent winter, leading to less heat transfer to the surface and more heat storage at depth. Finally, the weaker heat flux at the ice–ocean interface would favor additional ice formation, leading to a positive feedback amplifying the initial perturbation. The heat storage at depth can also be reinforced by a net freshwater input at the surface (due for instance to a net transport of sea ice to the region) that further stabilizes the water column.


--- date: 2011-03-14T00:00:00Z published: true title: Twitter angers third-party developers with 'no more timelines' urging | Doesn't look great. url: /2011/03/14/twitter-angers-third-party-developers-with-no-more-timelines-urging-doesn-t-look-great-/ ---
Twitter quickly updated the app, and while it didn't make the bar removable, it did make it less intrusive so that it did not overlap tweets.
But for many users, the "Dickbar" became a sign of what a world in which only Twitter writes the Twitter apps could be like: one without choice, unlike the situation that has prevailed so far, in which anyone could write an app via the API. That doesn't fill them, or developers, with delight. Duane Roslands, in another response to Sarver on the mailing list, put it more pithily.
"Wow," he wrote. "'Thanks for getting so many people interested in Twitter. Now get lost.' This is appalling."


Ben Davies faces fitness race ahead of Preston North End’s trip to Hull City
by Dave SeddonPreston will test the fitness of Ben Davies ahead of the trip to Hull City on Wednesday after the defender limped out of the defeat at Derby.
Davies was forced off in the 72nd minute with an ankle injury, having had treatment on it a short while earlier.
He missed last month’s win over Blackburn with an ankle complaint and it could well be the same injury has flared up.
Jordan Storey replaced him in the back four, this only his second time on the pitch in Championship action this season.
The former Exeter man will be on alert to start at Hull if Davies does not make it.
North End manager Alex Neil said: “It’s his ankle and I’m not sure the extent of it yet.
“We will have to assess it and take things from there.”
The enforced substitution prevented Neil making a last throw of the dice in an attacking sense at Pride Park.
Neil had David Nugent ready to come on for Daniel Johnson but the striker did not get the chance to face his former club.
His two other subs had been made at half-time, with Paul Gallagher and Billy Bodin replacing Darnell Fisher and Jayden Stockley.
Said Neil: “We had 20 minutes left, I was going to take DJ off, move Sean Maguire behind Nuge and try to force the issue.
“Unfortunately Ben pulled up right before that and we had to change the plans.”
Neil offered no excuses for the 1-0 defeat to the Rams, Martyn Waghorn’s 33rd-minute goal settling it.
Derby had plenty of chances to put the game to bed by half-time but only had the slender lead to fall back on.
North End were better in the second half, helped by the double substitution and the reshuffle that caused.
Neil will now look for a good response at the KCOM Stadium on Wednesday,
Said Neil: “At half-time it would have been easy to start shouting and bawling, saying how poor they had been.
“What we needed to do at half-time was fix it and I thought we did that.
“But we didn’t get the goal we needed, which obviously was frustrating.
“Nothing is won at the moment, we are going to lose games on the way.
“What we have to do is take the disappointment from the game and try to make amends for the next one.
“The players know and understand they didn’t play well, they are frustrated themselves.
“We win and we lose as a team, sometimes I will get it wrong and sometimes they won’t perform well. That is part and parcel of it.
“For all the chances Derby created, it took a corner for them to score. That is disappointing because we normally defend them well.”


You see this screen because your Umbraco installation did not complete correctly.
Simply click continue below to be guided through the rest of the installation process.
Continue


Forms4
First Name*
Last Name*
E-Mail *
Phone Number
Address
Password *
Please enter at least 5 characters.
Confirm Password *
Please enter the same value again.
Submit
send
Reset
autorenew


Florida mother, father and teenage son all battling cancer at the same time
by CNN(CNN) — It’s difficult enough to have one loved one experience cancer, but three at one time? Unimaginable.
But that’s reality for the Desclefs family.
Benoit Desclefs, his wife, Kathy Desclefs, and their 17-year-old son Luke are each battling a different form of cancer.
“Oh, it’s hard to process,” Kathy Desclefs told CNN affiliate WJXT.
It all started five years ago when Kathy was diagnosed with non-Hodgkin’s lymphoma.
Then, in August, Benoit was diagnosed with an inoperable brain tumor, then Luke was diagnosed that October with Hodgkin’s lymphoma.
Benoit, a French chef, moved to Jacksonville, Florida, to start a restaurant and experience the American dream. He called it The Magnificat Cafe. Now, the family has to put the business on the market due to their failing health.
“With Benoit, they’ve said roughly 12 years. With Luke, he has a very good prognosis if he responds to treatment and we’ll know how well he responds next week when they do a PET scan (positron emission tomography),” Kathy said. “For me, it’s hard to say because the variant I have is so rare they don’t have a lot of data on that.”
All the family is asking for is for people to come to the restaurant and help them stay in business through this hard time.
They have had to hire extra help in order to keep it going.
Kathy explained that all they can do it rely on their faith. “We are set up for God to show up because it’s so over the top,” she said.
The-CNN-Wire™ & © 2019 Cable News Network, Inc., a Time Warner Company. All rights reserved.


$ python
Python 2.7.2 (default, Oct 11 2012, 20:14:37)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print 'Hello, Python!'
Hello, Python!
hello_python.py
:
#!/usr/bin/env python
print 'Hello, Python!' # Say hello to my friend!
Run this script as
$ python hello_python.py
Hello, Python!
Python is a dynamic language and any variable can be created and assigned without declaration.
a = 2 # define a
b = a
a *= b # a==???
b = 'now for something completely different.'
a *= b # a==???
del(a, b)
a, b = 1, 2
print a, b, a/b
print a/float(b)
Code blocks are defined by the fixed indents followed by :. For example, indent the codes in conditionals,
if True:
print "True"
print "To be precise, that was True"
else:
print "False"
in loops,
for x in range(6):
print x
or when you define functions
def f(x):
y = x + 1
return y
With if ... else ...
, use and
, or
, and
not
:
simulator = "Nest"
language = "Python"
if simulator=="Nest" and language=="Python":
print "A Nest simulation written in Python."
if simulator!="Nest":
print "Not a Nest simulation."
if not language=="Python":
print "Not written in Python."
You can make loops with for
or while
.
j = 0
for i in range(10):
j += i
print i, j
def f(x, y):
return x
Then, try (one of them causes an error!)
f(1, 2)
f(x=1, y=2)
f(y=2, x=1)
f(x=2, 2)
The default values can be also specified:
def f(x, y=2):
return x+y
Try
f(1)
f(1, y=3)
The functions can be called with data structures such as lists and dictionaries.
f(*[1, 2])
f(**{'x': 1, 'y': 7})
def f(x, y):
""" f(x, y) returns the sum of x and y."""
return x+y
Then, try
help(f)
Try also other functions that we have seen such as
help(range)
and
help('in')
In Python, every file is considered as a module with its own namespace. For
example, let's say you have mymodule.py
as
"""
Here you write a module help. Try help(mymodule) after importing.
"""
def func1():
""" Help for func1. """
print "You called func1!"
You can call func1
as
import mymodule
mymodule.func1()
or with an alias,
import mymodule as m
m.func1()
or import the function directly first
from mymodule import func1
func1()
But use the following method only when you know what you are doing!
from mymodule import *
func1()
A directory can be a module too if it has __init__.py
. Typically, you
have:
mymodule/__init__.py
"""
Module help
"""
import submodule1
mymodule/submodule1.py
"""
Submodule help
"""
def func1():...
Then, func1
can be called as
import mymodule
mymodule.submodule1.func1()
Or you can use aliasing, too.
a = range(6) # a ==?
3 in a # Test if it has a particular element.
for x in a: print x**2, # Loop around elements in the list.
The elements can be accessed via indices:
a[3]
a[1:5] # Access a range of elements.
a[-1] # You can also index from the end.
Lists are mutable.
a.append(6) # You can append elements...
a.append('J') # of different types...
a.remove(3) # and remove them, too.
Python variables are actually labels on the underlying data. This sometimes leads to confusing behaviors. For example,
b = a
a.append(2) # Now b == ???
If this causes a problem, you need to use deep copying:
import copy
b = copy.deepcopy(a)
a.append(3) # b==???
The tuple is similar to the list but is immutable.
a = (1, 2)
3 in a # Test if it has the particular element.
You can also access elements with indices:
a = tuple(range(6)) # Cast a list into a tuple
a[1:5]
a[-1] # You can also index from the end.
Note in many cases the parenthese are not necessary to define a tuple. Try the following examples and see what happens:
a = 1, 2 # a == ???
a, b = 1, 2 # a == ??? We have seen this before.
The last expression can be conveniently used in many occasions:
data = [('Purkinje', 'inhibitory'), ('Granule', 'excitatory')]
for name, exc_inh in data:
print name, 'neurons are', exc_inh
Also the tuple is useful when a function needs to return multiple values:
def f():
return 1, 2
x = f() # x==???
x, y = f() # x==???
The dictionary is a convenient data structure providing key/value access.
p = {'type': 'pyr', 'rate': 1.0, 'number': 1000}
p['type']
'type' in p # Check if the dict has a particular **key**
This is very useful if you have lots of data:
cells = []
cells.append({'type': 'pyr', 'rate': 1.0, 'number': 1000})
cells.append({'type': 'inh_PV', 'rate': 10.0, 'number': 150})
cells.append({'type': 'inh_SOM', 'rate': 1.0, 'number': 50})
slow_cells = [c for c in cells if c['rate']<5.0] # List comprehension.
for c in slow_cells:
print c['type']
Python provides tons of functions to manipulate strings. For example,
'B' + 'A' + 'M'
' '.join(['B','A','M'])
'cell 10 0.01'.split(' ')
'Okinawa eh yokoso.'.replace('yokoso','mensore')
There is the printf
-style string replacement,
'Cell type: %s Number:%d Firing rate:%f' % ('pyr',1000,1.0)
With the data in the dictionary,
cells = []
cells.append({'type': 'pyr', 'rate': 1.0, 'number': 1000})
'%(number)d %(type)s cells fire with rate:%(rate)f Hz.' % cells[0]
The classes are defined as
class Cell(object):
""" Class help """
def __init__(self, cell_type):
self.cell_type = cell_type
def add_patch_electrode(self, location):
raise NotImplementedError('This part is not implemented yet.')
(Note self
in the method definitions)
and you can make objects of the class as
c = Cell(cell_type='pyr')
c.cell_type # Call attributes.
c.add_patch_electrode('soma') # Call methods.
You can also subclass other classes as
class CellList(list):
""" Need help """
def __init__(self):
self.size = len(self)
def append(self, cell):
super(CellList, self).append(cell)
print "You just added a ", cell.cell_type, "in this list."
self.size += 1
print "The number of cells is now", self.size
l = CellList()
l.append(c)
Python objects are dynamic, which makes them very easy to use, but are not optimzed for memory efficiency. Creating many (thousands, millions,...) of them often can make this problem serious (by blowing up your RAM). The solution is to fix the list of attributes by
__slots__
(ask google if you want to know more)namedtuple
(again ask google)f = open('example.dat', 'r+') # open a file
a = f.read()
new_a = article.replace('butt', 'ass')
f.write(new_a)
f.close() # and close it.
Mode strings
import pickle
x = {'cells': ['exc', 'inh']}
f = open('temp.dat', 'w')
pickle.dump(x, f)
f.close()
f = open('temp.dat')
x = pickle.load(f)
f.close()
In most cases when you need to install a Python package,
pip
is your friend. Download the setup file for
distribute
and pip
from
and run
$ python distribute_setup.py
$ python get-pip.py
Then try
$ pip install virtualenv
which will install a package virtualenv
.


A checkbox is styled as a toggle button with the button widget. The label element associated with the checkbox is used for the button text.
This demo also demonstrates three checkboxes styled as a button set by calling .buttonset()
on a common container.


{% extends 'base.html' %} {% block content %} {% include "_modal.html" %}
A jQuery plugin for creating AJAX driven Django forms in Bootstrap modal.
Sign up via Bootstrap modal.
Download files listed below.


Da Vinci Payer Data exchange - Local Development build (v0.3.7). See the Directory of published versions
Previous Page - Handling Data Provenance
This IG provides a mechanism for Member-authorized exchange of their Health History:
The authorization method uses the OAuth 2.0 protocol to issue a token to an authorized application or service. The authorized application can then use the token to enable interaction with the FHIR REST API.
When a Member is authorizing sharing of the Member Health History with another Health Plan or a Third Party Application via the OAuth 2.0 protocol the Health Plan that is operating the API MAY offer the Member an option to allow the sharing of sensitive information, such as behavioral health data, resulting in the data being shared excluding sensitive data that is covered by state and/or federal regulations. However, under the HIPAA right of access the Member is at liberty to share that information if they so wish.
| |
The well defined mechanism for enabling Member/Patient authorization to share information with an application using the FHIR API is to use OAuth2.0 as the Authorization protocol. The member SHALL authenticate using credentials they have been issued with by the Health Plan. This is typically the member’s customer portal credentials.
After authenticating the Member SHALL be presented with an Authorization process that enables them to approve the sharing of information with the Third Party, or new Health Plan, Application that has client application credentials registered with the Health Plan.
The Health Plan SHALL provide the option to allow the Member to limit the information that is shared with the application.. For example, this MAY enable the Member to withhold their demographic or behavioral health information.
After successfully authorizing an application an Access Token and Optional Refresh Token SHALL be returned to the requesting application.
The requesting application SHALL use the access token to access the Health Plan’s secure FHIR API to download the information that the Member is allowed to access.
Applications are registered with the API Endpoint. The application owner MAY be:


abstract fun getBlockRange(heightRange: IntRange): List<<ERROR CLASS>>
Return the given range of blocks.
heightRange
- the inclusive range to fetch. For instance if 1..5 is given, then every
block in that range will be fetched, including 1 and 5.
Return
a list of compact blocks for the given range


| Home | Trees | Indices | Help |
|---|
|
|
Manages all AbstractActions
for the application. It is
responsible for updating Actions whenever the Scheduler ticks.
It is owned by the Director. cocosCairo was designed to have one ActionManager per Director (and one Director per application), so this method should be indirectly accessed through the Director.
Note that it is possible that an Action's current owner may not be its original owner (it is possible, but discouraged, for someone to manually call AbstractAction.setOwner after the Action has already begun). Thus, methods like removeAllActions may not necessarily perform as expected.
|
|||
|
|||
| Adding and removing Actions. | |||
|---|---|---|---|
|
|||
|
|||
|
|||
|
|||
| Accessor methods. | |||
AbstractAction (or None if not found)
|
|
||
|
|||
| Pausing and resuming Actions. | |||
|
|||
|
|||
| Private methods. | |||
|
|
Initialization method.
|
Registers an Action to be updated whenever the Scheduler ticks. If the AbstractAction should not be paused, then it will be started immediately by calling AbstractAction.start.
|
Removes all AbstractAction
|
Removes a specific AbstractAction.
|
Removes a specific AbstractAction by its tag and original owner.
|
Returns the AbstractAction whose tag and original owner match the
ones provided, if it exists. Otherwise, it returns
|
Returns the number of running Actions whose original owner is provided.
|
Resumes all Actions whose original owner is provided.
|
Pauses all Actions whose original owner is provided.
|
Private method which is called by the Scheduler whenever it ticks and propagates the tick to running Actions' AbstractAction.step method. This should generally never be called manually.
|
| Home | Trees | Indices | Help |
|---|
| Generated by Epydoc 3.0.1 on Fri Apr 9 14:54:57 2010 | http://epydoc.sourceforge.net |


--- layout: post status: publish published: true title: QQ for Mac 更新 author: Leask author_login: leask author_email<EMAIL_ADDRESS>author_url: https://leaskh.com wordpress_id: 193 wordpress_url: http://leaskh.wordpress.com/2009/05/25/qq-for-mac-%e6%9b%b4%e6%96%b0 date: '2009-05-25 05:33:47 +0800' date_gmt: '2009-05-25 05:33:47 +0800' categories: tags: [] comments: [] ---


THIS BOY'S LIFE A film review by James Berardinelli Copyright 1993 James Berardinelli
Date Released: 4/7/93 Running Length: 1:59 Rated: R (Mature themes, language, sexual situations, violence)
Starring: Leonardo DiCaprio, Robert DeNiro, Ellen Barkin Director: Michael Caton-Jones Producer: Art Linson Screenplay: Robert Getchell from the novel by Tobias Wolff Released by Warner Brothers
The story of THIS BOY'S LIFE is based on the autobiographical book by Syracuse University professor Tobias Wolff. It tells of his early life in Salt Lake City, Seattle, and Concrete (Washington). Tobias (Leonardo DiCaprio) and his mother Caroline (Ellen Barkin) travel from place-to- place, continually trying to start a new life. In Seattle, Caroline meets Dwight (Robert DeNiro), who seems like the perfect choice for a husband. However, when Tobias spends a few months with Dwight and his children in advance of the wedding, he learns that there is a dark side to his potential stepfather-to-be.
There isn't much that can be said about the plot of a story that's based on a person's boyhood adventures. No one but Tobias Wolff knows how much dramatic license was used in writing his memoirs, but THIS BOY'S LIFE has an unmistakable ring of truth to it. Every boy who has grown up in America will surely recognize much of himself - both good and bad - in Tobias.
Pacing is important to a movie like this, and the creative team behind THIS BOY'S LIFE have done an excellent job keeping the story tight and moving. The editing of the film is impressive - over an hour of footage was cut from the final version without any apparent loss of continuity or flow.
Leonardo DiCaprio, whose only previous credit is the television series GROWING PAINS, shows ability here that the confines of a weekly sit-com did not allow. DiCaprio, while certainly not one of the best child actors to come along in recent years, does a highly credible job as Tobias. He is especially good at portraying anger, although his range for other emotions is limited.
Robert DeNiro gives yet another strong performance. This role is more "typical" of him than that in MAD DOG AND GLORY, with the actor portraying a strong man who means well but is plagued by a dark, violent inner nature. Dwight is not evil, but his means and methods are often reprehensible. When he says that he has Tobias' best interests at heart, we believe him, but it quickly becomes apparent that the way he intends to teach Tobias is nothing short of inhumane.
With her latest pictures (this one and John Tuturo's MAC), Ellen Barkin is trying out more challenging and less typical roles. THIS BOY'S LIFE gives her an opportunity to sink her teeth into a relatively-meaty female role (something sadly lacking in too many movies today). Barkin's Caroline, while not the center of the story, is far from a token character. In the end, she is as critical to everything that happens as Dwight and Tobias.
Numerous themes are explored by THIS BOY'S LIFE. The most obvious is that of dominance and subservience. Dwight believes in triumph through physical and emotional force.  At one time or another, he feels a need to assert his power over everyone: his children, his wife, and Tobias.
Another motif of THIS BOY'S LIFE reminded me strongly of one of the themes of THE CRYING GAME. One of the lines repeated in that movie is "It's in your nature." THIS BOY'S LIFE deals with the question of what a person's nature is and whether or not it can be changed. Tobias is forever trying to make himself into a "better person," but it becomes clear as the movie unfolds that changing one's nature is not a simple matter.
Ultimately, THIS BOY'S LIFE works because we get to know the characters, understand their circumstances, and empathize with their dreams. There's a lot of material in this film to reflect upon. Because of the real-life nature of THIS BOY'S LIFE, certain story lines are left dangling while others are resolved in a most un-Hollywood-like manner. The film is enjoyable and emotionally-stirring. Of recent movies, it reminds me most strongly of A RIVER RUNS THROUGH IT, if not in content, then at least in general atmosphere. This is a coming-of-age story with more realism and feeling than many other movies of its ilk.
Rating: 8.8 (A, ***1/2)
- James Berardinelli<EMAIL_ADDRESS>.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


My site is still under construction, as I'm continuing to work on new additions and features. But feel free to check out my work on Github, my LinkedIn profile, or send me an e-mail.
Hi I'm Erin! A little bit about how I stumbled into the web and software development world:
I graduated with a Bachelor's degree in Sociology from Austin Peay State University in December of 2013, with minors in Psychology and Health, but had not a clue what I wanted to pursue as a career. I ended up working at a local English as a Second Language school as the Media and Technology Coordinator/Administrative Assistant for two years after finishing college.
After working there for over a year, I was looking at the school's website one day and thought to myself, "Hmm, this website is a little outdated, difficult to navigate, and not mobile responsive. How can I improve these aspects of the site? " I then started dabbling in HTML, CSS, and JavaScript on my own via various online resources, and began attending technology related Meetups in the Nashville area.
I started with the Nashville Women Programmers Meetup, where I met many people who were either current or former students of the Nashville Software School (NSS).
I enrolled in an intensive 4 week Intro to Web Development course with Savvy Coders in the fall of 2015, and began the 6 month full time software development program at NSS in January of 2016. Many of the skills I learned there and the projects I worked on can be found below and on my Github profile.
I started my first developer role as a Complex Application Developer with the Strategic Technology Solutions department with the State of Tennessee as a contractor at the end of August 2016.
In November of 2016, I was a guest on the Complete Developer Podcast, a local podcast in Nashville hosted by a couple of friends, Will and Beej. The topic was a round table discussion on Ways to Learn Code, in which Beej, Will, and I discussed each of our different paths in becoming developers. Give it a listen below, and if you like my episode, be sure to check out some of their other episodes on their page as well.


RatchetMessageKeys
struct RatchetMessageKeys
The keys needed to encrypt/decrypt a message
-
The length of cipher keys in bytes
Declaration
Swift
static let cipherKeyLength = 32
-
The length of the mac key in bytes
Declaration
Swift
static let macKeyLength = 32
-
The length of the initialization vector in bytes
Declaration
Swift
static let ivLength = 16
-
The length of cipher key, mac key, and iv
Declaration
Swift
static let derivedMessageSecretsSize = cipherKeyLength + macKeyLength + ivLength
-
The cipher key to encrypt/decrypt a message
Declaration
Swift
var cipherKey: Data
-
The mac key of a message
Declaration
Swift
var macKey: Data
-
The initialization vector
Declaration
Swift
var iv: Data
-
The counter of the message
Declaration
Swift
var counter: UInt32
-
Create the message keys from the components
- counter: The counter of the message
Declaration
Swift
init(cipher: Data, mac: Data, iv: Data, counter: UInt32) throws
Parameters
cipher
The cipher key
mac
The mac key
iv
The initialization vector
-
Create the message keys from generated bytes.
Declaration
Swift
init(material: Data) throws
Parameters
bytes
The bytes to create the message keys from.
-
Create message keys from a ProtoBuf object.
Declaration
Swift
init(from object: Signal_Session.Chain.MessageKey) throws
Parameters
object
The ProtoBuf object
-
Deserialize the message keys.
Declaration
Swift
init(from data: Data) throws
Parameters
data
The serialized keys
-
Serialize the keys.
Declaration
Swift
func data() throws -> Data
Return Value
The serialized keys
-
The message keys converted to a ProtoBuf object
Declaration
Swift
var object: Signal_Session.Chain.MessageKey
-
Compare two message keys for equality.
Declaration
Swift
static func ==(lhs: RatchetMessageKeys, rhs: RatchetMessageKeys) -> Bool
Parameters
lhs
The first message
rhs
The second message
Return Value
True
, if the message keys are equal


Cash Entry Summary
There are no cash entries!
Date
Vehicle Registration #
OLA Payment
Vehicle Incentive
Vehicle Recovery
Driver Name
Cash Paid
Driver Incentive
Driver Recovery
{{result.date | date}}
{{result.vehicle?.regNumber}}
{{result.olaPayment}}
{{result.vehicleIncentive}}
{{result.vehicleRecovery}}
{{result.driver?.driverName}}
{{result.cashPaid}}
{{result.driverIncentive}}
{{result.driverRecovery}}
{{pagination.firstItem + 1}} - {{pagination.lastItem + 1}} of {{total}} Cash Entry


{% extends "cog/common/layout_left_center_right.html" %} {% block main %} {% if request.method == "GET" %}
Thank you for your interest in joining the {{ project.short_name }} project.
**** You do not need to join this project to search for or download data. ****
**** You do not need to join this project to view public information. ****
In general, project membership allows you to:
If you still wish to join the {{ project.short_name }} project, click on the button below.
The project administrator will be notified of your request.


The Ramayana
Ravana resolves to destroy Rama by capturing Sita with the aid of the rakshasa Maricha. Maricha, assuming the form of a golden deer, captivates Sita's attention. Entranced by the beauty of the deer, Sita pleads with Rama to capture it. Lord Rama chases the deer into the forest, leaving Sita under Lakshmana's guard. After some time Sita hears Rama calling out to her; afraid for his life, she insists that Lakshmana rush to his aid. Lakshmana tries to assure her that Rama is invincible, and that it is best if he continues to follow Rama's orders to protect her.
On the verge of hysterics, Sita insists that it is not she but Rama who needs Lakshmana's help. He obeys her wish but stipulates that she is not to leave the cottage or entertain any strangers. He draws a chalk outline around the cottage and casts a spell on it that prevents anyone from entering the boundary but allows people to exit. Finally, with the coast clear, Ravana appears in the guise of an ascetic requesting Sita's hospitality. Unaware of the devious plan of her guest, Sita is tricked into leaving the chalk outline and is then forcibly carried away by the evil Ravana.
Ravana carries Sita away to Lanka, where Sita is kept under the heavy guard of rakshasis. Ravana demands Sita marry him, but Sita, eternally devoted to Rama, refuses. Rama and Lakshmana learn about Sita's abduction, and immediately set out to save her. During their search, they meet the demon Kabandha and the ascetic Shabari, who direct them towards Sugriva, the monkey king, and Hanuman.
Having received Hanuman's report on Sita, held prisoner in Lanka, Rama and Lakshmana proceed with their allies towards the shore of the southern sea. There they are joined by Ravana's renegade brother Vibhishana. The monkeys construct a giant floating bridge across the ocean, and the princes and their army cross over to Lanka. A lengthy battle ensues, in which Rama eventually kills Ravana.


Please make a selection
You should go to Hawaii for sure! You'll love it there!
You should go to California! But watch out! They drive like maniacs there!
You should go to Oregon! See some trees. Smoke some weed. Relax!


Across: 1. Live with team of theologians? (6) 4. Prepare new diet (4) 7. Stubborn and confused, beat dour characters (8) 8. She breaks up triads (6) 10. Traveller and rake, about 50, in America (8) 13. Uncle is working as strongman (6) 14. Soft phrase, maybe? (7) 15. Witness may be watching cricket (6) 18. Realist becomes cross! (7) 19. Orcs return with £2 for piece of parchment (6) 20. Magnificent capital held by peer or ruler (7) 25. R2-D2 and C3PO may become sordid! (6) 26. Paid left-wing journalist to cover conflict (8) 27. Pole swallows one vodka, possibly (6) 28. Boys and girls drench about 49 Roman figures (8) 29. Smarter than the average teacher? (4) 30. Attacked by rock group on drugs! (6) Down: 1. Theologian may be upset about question (6) 2. Quiet prim swimmer (6) 3. Routed around here? (6) 5. Revulsion at flavour from Hell! (8) 6. Whipped trembling hart in front of hut (8) 7. When Coe ran around the north (4) 9. Mean to put 100 back into river (6) 11. Stops movement of lambs around Common Market (7) 12. Thrust out east to reach barrier (7) 13. Flyer's box-file (7) 16. Ideas initially set in words for us (6) 17. Importance of computers in monastery (8) 18. Australian cricket practice is on the slide! (8) 21. Burning in heavy fibre dhoti! (3 3) 22. Penny left garland stitched to sleeve (6) 23. Loved trouble facing communist (6) 24. Dane decanted port (4)


Last modified May 9th, 2017.
Certain Lumeer plans, including all enterprise plans, that explicitly list Service Level Agreement ("SLA") in the support details at http://www.lumeer.io/pricing.html are subject to the terms and conditions of this SLA.
1. DEFINITIONSAny terms not otherwise defined herein shall have the meaning ascribed to them in the Lumeer Terms of Service ("Agreement") located at http://www.lumeer.io/terms_service.html.
2. UPTIME GUARANTEEWe provide a 99.9% uptime guarantee. This means that for any given month, while unlikely, it is possible that Lumeer may experience an average downtime of up to 2678 seconds excluding scheduled maintenance. If an outage exceeds a cumulative of 2678 seconds in a month, we will credit 5% of the Your base monthly recurring fee for the affected account, per hour of downtime.
THE TOTAL CREDIT ALLOWANCE PER MONTH IS CAPPED AT 100% of THAT MONTH'S MONTHLY RECURRING FEE FOR THE AFFECTED ACCOUNT.
This guarantee covers Lumeer's internal infrastructure including application and database servers, routers, switches, the cables connecting them, and connectivity to our backbone providers. This guarantee does not cover email delivery.
3. SCHEDULED MAINTENANCEScheduled Maintenance means any maintenance on the equipment and services that affect the uptime of Lumeer, for which You are notified at least 24 hours in advance.
Notice of Scheduled Maintenance will be provided to your account administrator by a method elected by Lumeer (email or telephone). Nothing in this agreement shall prevent Lumeer from conducting emergency maintenance on an as-needed basis. In the event that scheduled maintenance may unduly affect Your operations, it shall be Your responsibility to so notify Lumeer Technical Support via http://www.lumeer.io/contact.html to discuss any necessary arrangements.
4. CREDIT PROCEDURES AND EXCEPTIONSYou must notify us via opening a support ticket at http://www.lumeer.io/contact.html indicating that you wish to pursue your rights as guaranteed by this SLA within 10 days of the incident to be eligible for credit. Lumeer is not required to provide SLA-guaranteed services or credits to customers who are in default of their contractual obligations. Upon opening a support ticket, we will verify the claim and if the problem is verified and meets the requirements of this SLA, we will measure downtime.
Credits shall not be allowed for conditions (i) caused by You or others authorized by You; (ii) due to the failure of power, facilities, equipment, systems or connections not provided by Lumeer; (iii) the result of scheduled maintenance or upgrades where You have been notified in advance; (vi) attacks (i.e. hacks, denial of service attacks, viruses) by third parties, and other acts not caused by Lumeer and (vii) events of force majeure, including acts of war, god, earthquake, flood, embargo, riot, sabotage, labor dispute (outside of Lumeer's own employees), government act, or failure of the Internet, and actions or inactions of Your personnel, affiliates and vendors.
Credits are accumulated monthly with Monthly Cumulative Downtime being reset at the beginning of each calendar month. Any two consecutive months in which Monthly Cumulative Downtime is in excess of 270 minutes would be considered a breach of contract by Lumeer and You would have the option to terminate with cause.
Credits are applied to future invoices or returned to the credit card if credit occurs in final service month.
Lumeer monitoring systems and records shall be the information source of record for the accumulation of Monthly Cumulative incidents.
5. OTHER LIMITATIONSThe remedies set forth in this Service Level Agreement shall be Your sole and exclusive remedies for any Service Interruption, outage, unavailability, delay, or other degradation, or any Lumeer failure to meet the service objectives.
6. FOR MORE INFORMATIONIf you have any questions or comments about this Agreement, contact us at http://www.lumeer.io/contact.html.


The goal of this project was to construct a static website to host my personal projects and resume. I began by creating a Github repository and hosting a free page with Github pages using HTML and CSS. I realized that I wanted to automate some of the tedious steps in static site generation so I implemented Jekyll along with an open source theme. After uploading the theme I added some customization using JavaScript and Devicon icons which you can see throughout the website along with some minor aesthetic fixes. Lastly, I purchased a custom domain and connected it via a DNS provider.
Check out the codeThe goal of this project was to construct a python bot that could day trade the SPDR S&P 500 ETF Trust (SPY) in a profitable manner. I connected to the online brokerage Alpaca's API and utilized their paper trading features in Python. I implemented an algorithm which utilizes the high-risk Martingdale system to buy and sell shares of SPY during trading hours to hopefully increase the overall portfolio value daily
Check out the code


Previous: The Checked Tag
Running Smudge
Smudge is a command line program. There are no arguments to it. It runs from a single shell script named
smudge which calls the program smudge_exec to generate C++ code.
The definitions for the user interface must be saved in a single file called smudge.ui :- a version is
provided with the distribution. There is also a copy called smudge.defaults_ui for recovery in case of
disaster. Edit the smudge.ui, save your changes and then type smudge at the command line.
The code will be re-compiled, and you should see your changes when you next run chintz. If you make
extensive changes then you should make a new .ChintzDefaults file. This is particularly the case if you
add any Buttons containers or CheckBoxes. By default, any variable whose value is not set in the user
interface does not get written to the child control file. If .ChintzDefaults does not contain entries for
the RadioButtons or CheckBoxes, then their values will not be written to the control file unless they have
been modified (even though they appear to have values in the user interface). For this reason you should
run chintz and modify the contents of each new CheckBox or Buttons group, and then save these to the
.ChintzDefaults file when first running chintz after modification.
Next: Operation and Filenames
Back to Smudge Contents
Last modified: Fri Jan 25 16:06:39 GMT 2002


New Nokia smartphone launches on December 5
by VladHMD Global, the company that makes Nokia smartphones, has started teasing its next product, which will be officially unveiled on December 5. We know this much from the tweet you can see embedded below. Unfortunately, aside from the date and an outline of a handset, we don't have any other clues as to what phone this will be.
On the other hand, here's an interesting tidbit: the Nokia 8.1 was announced on December 5 last year. With this in mind, we would definitely not be shocked if this time around the Nokia 8.2 sees the light of day.
Other options include the Nokia 5.2 (which has so far been missing in action), and even the Nokia 2.3 (which is only expected to be a minor improvement over the 2.2).


|
C++ Geometry Types
This library provides commonly used geometry types and methods for easier and better coding.
|
Represents a quaternion. More...
#include <Quaternion.h>
Public Member Functions | |
| Quaternion () | |
| Basic constructor. | |
| Quaternion (float x, float y, float z, float w) | |
| Constructor. More... | |
| Quaternion (const Vector3< float > &v, float w) | |
| Constructor. More... | |
| void | set (float x, float y, float z, float w) |
| Sets the values of the Quaternion. More... | |
| void | set (const Vector3< float > &v, float w) |
| Sets the values of the Quaternion. More... | |
| float | length () const |
| float | squaredLength () const |
| void | normalize () |
| Normalizes the current Quaternion. | |
| Quaternion | normalized () const |
| Creates a normalized Quaternion from this Quaternion. More... | |
| void | inverse () |
| Inverses the current Quaternion. | |
| Quaternion | inversed () const |
| Creates an inversed Quaternion from this Quaternion. More... | |
| void | conjugate () |
| Conjugates the current Quaternion. | |
| Quaternion | conjugated () const |
| Creates a conjugated Quaternion from this Quaternion. More... | |
| float | dot (const Quaternion &other) const |
| Calculates the dot-product between this and another Quaternion. More... | |
| Matrix3 | mat3 () const |
| Creates a Matrix3 from this Quaternion. More... | |
| Matrix4 | mat4 () const |
| Creates a Matrix4 from this Quaternion. More... | |
| Matrix4 | mat4 (const Vector3< float > &position) const |
| Creates a Matrix4 from this Quaternion. More... | |
| Quaternion | operator- () const |
| Creates an negated Quaternion. More... | |
| Quaternion | operator+ (const Quaternion &other) const |
| Adds two Quaternions. More... | |
| Quaternion | operator- (const Quaternion &other) const |
| Subtracts two Quaternions. More... | |
| Quaternion | operator* (const Quaternion &other) const |
| Multiplies two Quaternions. More... | |
| Quaternion | operator* (float factor) const |
| Multiplies Quaternion with a factor. More... | |
| Quaternion | operator= (const Quaternion &other) |
| Sets this Quaternion to another one. More... | |
| Quaternion | operator+= (const Quaternion &other) |
| Adds another Quaternion to this one. More... | |
| Quaternion | operator-= (const Quaternion &other) |
| Subtracts another Quaternion to this one. More... | |
| Quaternion | operator*= (const Quaternion &other) |
| Multiplies this Quaternion with another one. More... | |
| Quaternion | operator*= (float factor) |
| Multiplies this Quaternion with a factor. More... | |
| Quaternion | operator/= (float factor) |
| Divides this Quaternion with a factor. More... | |
| bool | operator== (const Quaternion &other) const |
| Checks if two Quaternions are equal. More... | |
| bool | operator!= (const Quaternion &other) const |
| Checks if two Quaternions are not equal. More... | |
Static Public Member Functions | |
| static Quaternion | slerp (const Quaternion &a, const Quaternion &b, float factor) |
| Creates a Quaternion as s Spherical Linear intERPolation between two other Quaternions. More... | |
| static Quaternion | fromAxisAngle (float ax, float ay, float az, float angle) |
| Creates a Quaternion from a rotation around an axis. More... | |
| static Quaternion | fromAxisAngle (const Vector3< float > &axis, float angle) |
| Creates a Quaternion from a rotation around an axis. More... | |
| static Quaternion | fromEulerAngles (float yaw, float pitch, float roll) |
| Creates a Quaternion from Euler angles. More... | |
Public Attributes | |
| float | x |
| X value. | |
| float | y |
| Y value. | |
| float | z |
| Z value. | |
| float | w |
| W value. | |
Represents a quaternion.
|
inline |
Constructor.
| [in] | x | X value. |
| [in] | y | Y value. |
| [in] | z | Z value. |
| [in] | w | W value. |
|
inline |
Constructor.
| [in] | v | Vector3. |
| [in] | w | W value. |
|
inline |
Creates a conjugated Quaternion from this Quaternion.
|
inline |
Calculates the dot-product between this and another Quaternion.
| [in] | other | The other Quaternion. |
|
inlinestatic |
Creates a Quaternion from a rotation around an axis.
| [in] | ax | X coordinate of the axis. |
| [in] | ay | Y coordinate of the axis. |
| [in] | az | Z coordinate of the axis. |
| [in] | angle | The angle. |
|
inlinestatic |
Creates a Quaternion from a rotation around an axis.
| [in] | axis | The Vector3 axis. |
| [in] | angle | The angle. |
|
inlinestatic |
Creates a Quaternion from Euler angles.
| [in] | yaw | The "yaw" angle. |
| [in] | pitch | The "pitch" angle. |
| [in] | roll | The "roll" angle. |
|
inline |
Creates an inversed Quaternion from this Quaternion.
|
inline |
|
inline |
Creates a Matrix3 from this Quaternion.
| Matrix4 gtypes::Quaternion::mat4 | ( | ) | const |
Creates a Matrix4 from this Quaternion.
Creates a Matrix4 from this Quaternion.
|
inline |
Creates a normalized Quaternion from this Quaternion.
|
inline |
Checks if two Quaternions are not equal.
| [in] | other | The other Quaternion. |
|
inline |
Multiplies two Quaternions.
| [in] | other | The other Quaternion. |
|
inline |
Multiplies Quaternion with a factor.
| [in] | factor | The factor. |
|
inline |
Multiplies this Quaternion with another one.
| [in] | other | The other Quaternion. |
|
inline |
Multiplies this Quaternion with a factor.
| [in] | factor | The factor. |
|
inline |
|
inline |
Adds another Quaternion to this one.
| [in] | other | The other Quaternion. |
|
inline |
Creates an negated Quaternion.
|
inline |
Subtracts two Quaternions.
| [in] | other | The other Quaternion. |
|
inline |
Subtracts another Quaternion to this one.
| [in] | other | The other Quaternion. |
|
inline |
Divides this Quaternion with a factor.
| [in] | factor | The factor. |
|
inline |
Sets this Quaternion to another one.
| [in] | other | The other Quaternion. |
|
inline |
Checks if two Quaternions are equal.
| [in] | other | The other Quaternion. |
|
inline |
Sets the values of the Quaternion.
| [in] | x | X value. |
| [in] | y | Y value. |
| [in] | z | Z value. |
| [in] | w | W value. |
|
inline |
Sets the values of the Quaternion.
| [in] | v | Vector3. |
| [in] | w | W value. |
|
inlinestatic |
Creates a Quaternion as s Spherical Linear intERPolation between two other Quaternions.
| [in] | a | First Quaternion. |
| [in] | b | Second Quaternion. |
| [in] | factor | The slerp factor. |
|
inline |


| G.A.R. 23 |
| (See rule 91) |
| MEDICAL CHARGES REIMBURSEMENT BILL |
| Bill No. |
.......................... |
|
| Ministry/Department/Office of |
........................................................................................................................... |
|
| ............................................................................................. |
for the month/year |
.......................................... |
|
| Head of account— |
| Sl. No. |
Section of establishment and name of the incumbent |
Gross Claim |
Recovery of Adv. |
Net amt. payable |
Remarks |
| 1 |
2 |
3 |
4 |
5 |
6 |
| |
|
|
|
|
|
|
| Net amount required for payment (In words) Rupees |
................................................................................................... |
|
| 1. Certified that I have satisfied myself that the amount included in bills drawn 1 month/2 months/3 months—
previous to this date, with the exception of those detailed below (of which the total amount has been refunded
by deduction from this bill) have been disbursed to the Govt. servants therein named and their receipts taken
in the office of the bill or in a separate acquittance roll. |
| 2. Details of Medical charges Refunded |
| Section of establishment and name of incumbent |
|
Period |
|
Amount |
|
|
| 3. Certified that Essentiality certificates, receipts etc. are appended. |
| Received Payment |
| Signature |
.............................. |
|
| Designation of Drawing Officer |
| Appropriation for 19 |
.................................. |
|
| Passed for Rs. |
.............................................. |
|
|
| Expenditure including this bill |
.............................. |
|
| Station |
.................................................................... |
|
| Signature of the Controlling Officer |
|
|
| Dated. |
.................................................................... |
|
|
|
| Passed for payment of Rs |
..................................................... |
(Rupees |
.............................................................) |
|
| Payment through Cheque No |
.............................. |
|


Implementation
Design Overview
This document does not reflect the existing codebase, but rather a road map for future development. Some of this design has been implemented in the 2008_SOC_BLEWIS branch, and these changes will be gradually merged into trunk.
The goal of the design is to build a UI which supports the following features:
- multi-track editing
- multi-layer editing*
- multiple selection
- noun-verb interaction
- direct manipulation
- edge snapping
- multiple-level undo/redo support
(*) It is important to distinguish between a track, and a layer in application terminology. Existing video editors use the term track to refer to a UI object which represents a stream of video with a sequence of sources. PiTiVi refers to this as a composition. The term track in PiTiVi means a separate channel of output: for example, audio and video are in separate tracks. The Timeline class contains one TimelineComposition for each of its output tracks. Currently these are hard-coded to audiocomp and videocomp, but in the future multiple audio and video output tracks will be supported. This will enable things like multi-language sound tracks, or multi-angle video sequences.
This is distinguished from the concept of a layer which is directly related to the notion of compositing. Within a track, sources have a property called priority which determines what will appear when the play-head reaches a given position in the timeline. By default, the source with the lowest numerical priority is displayed. Adding effects to a composition enables multiple sources to be composited together. Priority is used to determine which sources will be used by an effect as input.
The MVC/Observer Design Pattern
PiTiVi relies heavily on MVC and Observer design patterns to decouple the core of the application from the user interface. Core objects emit signals which prompt changes in the UI. UI elements wrap core objects to manipulate data, which in turn emit signals. The observer pattern allows the user interface to listen for changes in the core without coupling the core to the UI.
We use pygobject to provide support for the observer pattern in the core. The user interface depends on pygtk and pygoocanvas, both of which are based on GObject.
Files
The advanced UI is implemented in several files in the pitivi/ui directory in the source tree:
- util.py
- complexinterface.py
- complextimeline.py
- ruler.py
Interfaces
- Selectable
- Draggable
- SelectableDraggable
- Magnetic
Classes
- History
- ComplexTimelineObject
- ComplexTimelineFile
- Content
- AudioContent
- VideoContent
- Handle
- EditMarker
- ComplexTrack
- ComplexTimelineCanvas
- ComplexTimelineWidget
Utilities
The util.py file provides a number of convenience functions for working with goocanvas, including an easy way of creating canvas item objects, as well as generic support for drag-and-drop and selections. This file also provides the SmartGroup class, which extends goocanvas.Group with automatic recalculation of size and position.
The code in this file is intended to be as reusable and generic as possible. Its goal is to overcome some limitations of goocanvas which make programming dynamic, reactive interfaces more challenging than necessary. Code in this file is also used by the simple timeline.
SmartGroup
SmartGroup is also used to implement HList and VList, which are container classes that enforce positioning constraints on their children. They work more-or-less like HBox and VBox in gtk. What you need to know about smart group is:
- The smart group keeps track of its own position: Setting the x or y properties on a smartgroup will cause all the group's children to move accordingly.
- The smart group keeps track of its size: If any of the group's children change size or position, the group recomputes its width and height properties.
This is currently accomplished by using property notification signals. SmartGroup overrides the add_child method and connects to the notify::x, notify::y, notify::width, and notify::height signals for each of its children.
Convenience Functions
These functions all take an item as input and return the appropriate property. They make expressions involving these properties more readable and more compact.
- width(item)
- height(item)
- left(item)
- right(item)
- top(item)
- bottom(item)
- center(item)
This function handles getting coordinates from an event object and converting them into the canvas space:
- event_coords(canvas, event)
These functions manipulate object size and position
- pos(item)
- set_pos(item, pos), where pos is a tuple (x, y)
- size(item)
- set_size(item, size), where size is a tuple (width, height)
These functions activate dragging and selection management:
- manage_selection(canvas, changed_cb)
- make_selectable(canvas, item)
- make_dragable(canvas, item, start_cb, transform, end_cb, moved_cb)
SmartCanvas
This class is yet to be implemented. Intended to provide internal support for some of the convenience functions described above:
Methods
- manage_selection(), activates internal selection management, deprecates top-level function with same name
- make_selectable(), activates selection management on a given object, deprecates top-level function with same name.
- make_selection_dragable(),
Interfaces
All the interfaces used in the complex UI are kept in complexinterface.py.
Zoomable
This interface allows for sharing a single gtk.Adjustment among multiple client objects. When the adjustment's value changes, the the Zoomable object's zoomratio property is set, and its zoomChanged() method called.
Implementing classes must define a zoomChanged() method. This method should perform any drawing or size adjustments.
Zoomable containers have the option of defining a setChildZoomAdjustment() method, which they can use to set the zoom adjustment on all of their children. In general, however, a container should set the child's zoom adjustment whenever the child is added to the container.
Draggable
This interface encapsulates handling the mouse events required to make an object dragable with the mouse. Objects can simply extending from this interface to get basic drag-and-drop functionality. If more complex drag-and-drop behavior is required, this interface provides some hook functions which can be overridden by implementing classes.
Methods
- dragStart -- a hook which is called to notify the object that dragging is about to begin
- dragEnd -- a hook which is called to notify the object that dragging has ended
- dragMotion -- a hook which is called to notify the object that its position should be updated.
Selectable
This encapsulates the notion of an object which may be included in the current UI selection. This is kept strictly separate from Dragable, as there is a use case for selectable objects which cannot be moved by the user, as well as a use case for dragable objects which should never become part of the current selection. Objects are selected with Select(), and deselected with Deselect(). Objects are notified of their selection status through the selected() and deselected() method calls.
Being part of the selection implies that the object represents data that can be manipulated. To this end, all Selectable objects provide a core_object property. The list of all selected core objects can be obtained with the getSelectedCoreObjects class method.
The current selection is a set of Selectable objects, and any command which affects the current selection operates on these objects (or the core objects which they represent). To facilitate this, the interface provides class methods to iterate over all instances of selectable objects in various ways.
Properties
- core_object
Methods
- (absract) selected -- notifies the object it has been selected
- (absract) deselected -- notifies the object it has been deselected
- select -- places this item in the current selection
- deselect -- removes this item from the current selection
- (abstract) delete -- removes the core object from application data structures
- (abstract) copy -- places a representation of the core object into the application clipboard
- @classmethod getSelected -- returns a list of all selected selectable objects
- @classmethod getSelectedCoreObjects -- returns the pitivi core object for every object that has been selected
- @classmethod deleteSelected -- deletes all selected objects
SelectableDraggable(Selectable, Dragable)
This is the explicit merging of the Selectable/Dragable interfaces. Objects which are both selectable and dragable should implement this interface, rather than the two ancestors independently. The reason is that this interface provides support for manipulating selections of movable items: i.e., if the user has multiple items selected and moves one of them, all the other items should move in unison.
Methods
- dragStart -- relays dragStart message to all other selected SelectableDraggable objects
- dragEnd -- relays dragEnd message to all other selected SelectableDraggable objects
- dragMove -- relays dragmove message to all other selected SelectableDraggable objects
- (abstract) setPos -- implemented by derived objects, sets the position of the core object represented by this object
- @classmethod selectedDragStart
- @classmethod selectedDragEnd
- @classmethod selectedDragMove
Magnetic
Encapsulates the concept of an important point on the timeline to which timestamps should be snapped during mouse operations. The class keeps track of all its instances in a sorted list, and uses binary search to implement the class method snapTime(), and snapObj, which actually implement magnetic edge snapping.
Properties
- flags -- when the control point is magnetic to the cursor, values are RESIZE, MOVE, RAZOR, COMMAND, ALL
The flags property is a bit-field defining when a magnetic point will be used.
- RESIZE -- control point is magnetic during resize operations
- MOVE -- control point is magnetic during drag operations
- RAZOR -- control point is magnetic to razor tool, or during trimming
- COMMAND -- control point can be the input to a command which operates on current selection
- ALL -- equal to RESIZE | MOVE | RAZOR | COMMAND
Methods
- setTime -- update this magnet's time value
- @classmethod snapTime(time, flags) -- snap the input time to the nearest magnet according to flags
- @classmethod snapObj(start, duration, flags) -- snap start or end time to the nearest magnet, according to flags)
Classes
These classes implement the majority of the pitivi's advanced (or complex) user interface, and can be found in complextimeline.py.
History
This class manages the command history for the user interface. It maintains a stack of actions and their inverses.
Properites
- undo_actions -- stack of (function, data, inverse_function, inverse_data) tuples
- redo_actions -- stack of (function, data, inverse_function, inverse_data) tuples
Methods
- undoLast -- pop the top of the undo stack, push onto the redo stack and execute the inverse operation
- redoLast -- pop the redo stack, push the undo stack, and execute the non-inverse operation
- pushAction -- add a new tuple to the top of the history stack.
- peek -- return the top of the undo stack
- poke -- update the top of the undo stack in place
- pop -- pop from the undo stack without performing any action or pushing the redo stack (for example, to clear a canceled operation from the undo stack)
- clear -- clears the undo/redo stack
ComplexTimelineWidget(gtk.HBox)
This widget contains the timeline canvas and the ruler. It is also responsible for showing and hiding toolbar actions associated with the complex timeline.
ComplexTimelineCanvas(goocanvas.Canvas, Zoomable)
(currently called ComplexLayers, will be renamed before the next release)
This class is the timeline. The canvas creates one ComplexTrack item for ComplexTrack item for each top-level composition within a timeline. PiTiVi core doesn't yet support multi-track editing, but this support is planned. ComplexTracks should be able to handle creating/destroying tracks dynamically.
In addition to the timeline itself, this widget keeps track of a number of important details about the timeline: current edit points, playhead position, current tool (only razor or pointer, at present), and the current selection.
Mouse and pointer events received by this widget are routed to the selection or the current active tool. Keyboard events are handled here directly depending on the current active tool.
The Selection
The primary goal of the editing canvas is to allow the user to modify the selection as they see fit, and then apply changes to the selected object. The selection consists of a set of objects implementing the Selectable interface.
The canvas keeps track of whether or not objects are selected. Objects in the timeline always pass pointer events up to their parent group. If an event reaches the root item group, a test is performed to determine if the object should be added to the current selection. If this test passes, the objects select() method is called.
The selection also identifies a primary object: this is the object with which the user is directly interacting with, i.e. the source of the pointer event. Certain operations make the most sense in the context of a single active object. For example, if the user selects several sources and then drags one of them, this object will be used as a reference point for edge snapping.
Finally, the user is provided with a few tool-bar commands which manipulate the selection explicitly.
Selection Management Methods
- deleteSelected()
- copySelected()
- moveSelected()
- clearSelection()
- selectBeforeCurrent()
- selectAfterCurrent()
Selection Manipulation Methods
- copySelected()
- deleteSelected()
- moveSelected()
- linkSelected()
- unlinkSelected()
- collapseSelected()
Commands which operate on the selection are sent to this widget, which iterates over the selection and performs operations on every element contained therein.
Other
- activateRazor()
- deactivateRazor()
ComplexTrack(SmartGroup, Zoomable)
This class is a container for pitivi tracks.
- Time is represented by horizontal position, in proportion to the current zoom ratio
- Priority is represented by vertical position, with the top of the canvas representing the highest priority.
This class encapsulates an internal view of a TimelineComposition object. Each ComplexTrack manages exactly one TimelineComposition, and connects to the following signals:
- source-added
- source-removed
- effect-added
- effect-removed
- transition-added
- transition-removed
These signals are all sent to the same pair of signal handlers, _objectAdded, _objectRemoved, respectively. This function takes an additional parameter, klass, which is a reference to the sublclass of ComplexTimelineObject which should be instantiated.
Handle(Rect, Dragable, Magnetic)
This object is used by ComplexTimelineObject to represent the in/out edit points of the object. A handle is a goocanvas.Rect item which implements the Dragable, and Magnetic interfaces. It is not directly selectable. A handle object does not directly set its position, but instead hands off mouse events to a callback function, motion_callback.
Properties
- width
- height
- active_color
- normal_color
- motion_callback
- cursor
Methods
- __init__ -- sets up initial properties, and stores the motion_callback
- dragBegin -- sets item's color to the active color
- dragEnd -- sets item to the the normal color, updates magnet timestamp
- dragMotion -- calls the motion_callback, after performing some transformations
ComplexTimelineObject(Group, Zoomable, SelectableDragable)
Corresponds to pitivi.timeline.objects.TimelineObject. It is a base
class for all objects represented in the ComplexTimeline. When created,
it is given a reference to a TimelineObject, and connects to that
object's start-duration-changed
signal. When the core object's start
and duration change, the UI object's horizontal position and width are
updated. When the core object's layer position changes, the vertical
position is updated.
Every TimelineObject has a reference to a Content object which is displayed inside of the TimelineObject. This object may be audio or video. The Content object can change height or visibility depending on its state. The parent ComplexTimelineObject must keep track of the height of its content region and adjust its height accordingly.
ComplexTimelineObjects have drag handles which allow them to be directly resized. See the Handle class documentation for more information.
Properties
- background -- background rectangle
- coreobject -- the core PiTiVi object which this timelineobject represents
- content -- Content object
- inpoint -- Handle, representing the in point of the source
- outpoint -- Handle, representing the out point of the source
Methods
- dragMotion -- calls setStartPoint, Magnetic.snapTime(), and selectable.dragMotion() to adjust the object's position.
- (private) startDurationChanged -- handler for the coreobject's start-duration-changed signal
- setStartPoint -- sets coreobject's start property
- setInPoint -- callback given to inpoint as its motion callback, which sets coreobject's start/duration properties
- setOutPoint -- callback given to outpoint as its motion callback which sets coreobject's duration property
TimelineFileObject(TimelineObject)
This class derives from TimelineObject. It overrides the signal handlers which set the in/out edit points so that they also set the media-start/media-duration points.
Methods
- setInPoint
- setOutPoint
Content(Smartgroup)
Abstract base class for the content region of ComplexTimelineObject. The content region displays a representation of the core object associated with the Content object's parent ComplexTimelineObject. Content regions may be expanded, contracted, or minimized. When expanded, the full preview image is visible, and the widget is expanded to maximum height so that the keyframe editor can be used. When contracted, only the preview image is visible. When minimized, the content region is completely hidden.
Properties
- width
- height
- name
- content_image
- keyframes
- coreobject
Methods
- expand()
- contract()
- minimize()
- make_content_image -- creates a generic image thumbnail.
AudioContent(Content)
Overrides make_content_image to create an audio waveform from audio stream data.
Methods
- make_content_image
VideoContent(Content)
Overrides make_content_image to create a thumbnail sequence.
Methods
- make_content_image
Marker(goocanvas.Polygon, SelectableDragable, Magnetic)
Similar to a handle, but can be the selected, which implies that it contains a reference to a core object.
ScaleRuler(gtk.Layout, Zoomable)
This file contains the ScaleRuler class, a zoomable timeline ruler. It should share the same gtk.Adjustment objects for both zooming and horizontal scrolling.
The results of the search are


Welcome to GitHub Pages.
<<<<<<< HEADJust trynna give back to the black twitter community that has done soo much for me. Ya'll niggas are funny.
Follow Me On Twitter!This automatic page generator is the easiest way to create beautiful pages for all of your projects. Author your page content here using GitHub Flavored Markdown, select a template crafted by a designer, and publish. After your page is generated, you can check out the new branch:
>>>>>>> 8e8504e7d49f8236b4d3ce5ded3fabf8c2a38a43$ cd your_repo_root/repo_name
$ git fetch origin
$ git checkout gh-pages
<<<<<<< HEAD
If you're using the GitHub for Mac, simply sync your repository and you'll see the new branch.
>>>>>>> 8e8504e7d49f8236b4d3ce5ded3fabf8c2a38a43Designer Templates
We've crafted some handsome templates for you to use. Go ahead and continue to layouts to browse through them. You can easily go back to edit your page before publishing. After publishing your page, you can revisit the page generator and switch to another theme. Your Page content will be preserved if it remained markdown format.
Rather Drive Stick?
If you prefer to not use the automatic generator, push a branch named gh-pages
to your repository to create a page manually. In addition to supporting regular HTML content, GitHub Pages support Jekyll, a simple, blog aware static site generator written by our own Tom Preston-Werner. Jekyll makes it easy to create site-wide headers and footers without having to copy them across every page. It also offers intelligent blog support and other advanced templating features.
Authors and Contributors
You can @mention a GitHub username to generate a link to their profile. The resulting <a>
element will link to the contributor's GitHub Profile. For example: In 2007, Chris Wanstrath (@defunkt), PJ Hyett (@pjhyett), and Tom Preston-Werner (@mojombo) founded GitHub.
Support or Contact
Having trouble with Pages? Check out the documentation at http://help.github.com/pages or contact<EMAIL_ADDRESS>and we’ll help you sort it out.