Calculation of powder and single-crystal ENDOR spectra.
salt(Sys,Exp) salt(Sys,Exp,Opt) spec = salt(...) [rf,spec] = salt(...) [rf,spec,trans] = salt(...)
This function calculates powder and single-crystal ENDOR spectra. Its calling syntax
is identical to that of pepper, many of its options
are equal to those of endorfrq, which is used by
salt
to compute line positions and amplitudes.
There are up to three output arguments
salt
plots the simulated spectrum.
rf
is the vector of radiofrequency values in MHz over which the
spectrum was calculated.
spec
is a vector or a matrix containing
the ENDOR spectrum or spectra.
If spec
is a matrix, the subspectra (various
transitions or various orientations) are along rows.
trans
is a list of level number
pairs indicating the transitions which where included in the spectrum
calculations. Level numbers refer to the energy levels of the
Hamiltonian in ascending energy order, so level 1 has lowest
energy and so on.
The three input arguments to the function are
Sys
: spin system (paramagnetic molecule)Exp
: experimental parametersOpt
: simulation options
Sys
is a spin system structure.
Fields available in Sys
include all needed
for the construction of a Hamiltonian and the ENDOR line width parameter
lwEndor
. If lwEndor
is not given, it is assumed to be zero,
and stick spectra are returned. The field HStrain
is included in
excitation window computations (see Exp.ExciteWidth
).
For simulating a multi-component mixture, Sys
should be a cell array of spin systems,
e.g. {Sys1,Sys2}
for a two-component mixture. Each of the component spin systems should
have a field weight
that specifies the weight of the corresponding component in the final
spectrum.
Exp
contains experimental parameters such as the microwave
frequency, the magnetic field range and temperature. Here is a full
list of its fields.
Field
Range
[rfmin rfmax]
. The values are in MHz. Example:
Exp.Range = [1 30]
.
If omitted, EasySpin tries to determine the frequency range automatically.
CenterSweep
[rfcenter rfwidth]
. The values are in MHz. Example: Exp.CenterSweep = [51 10]
.
If omitted, EasySpin tries to determine the frequency range automatically.
nPoints
mwFreq
ExciteWidth
is given.
ExciteWidth
ExciteWidth
is its FWHM. The default is infinity. To obtain the full excitation with for a given orientation, ExciteWidth
is combined with HStrain
from the spin system structure.
Temperature
CrystalOrientation
CrystalOrientation
contains the three Euler rotation angles that transform the crystal frame (C) to the lab frame (L). If only two Euler angles are given, the third is set to zero. If CrystalOrientation
is empty or not specified, the full powder spectrum is computed.
Exp.CrystalOrientation = [0 0 0]; % single crystal, crystal z axis aligned with B0 Exp.CrystalOrientation = [0 pi/2 0]; % single crystal, crystal z axis perpendicular to B0 Exp.CrystalOrientation = [0 0 0; 0 pi/2 0]; % two crystals Exp.CrystalOrientation = []; % powder
CrystalSymmetry
Exp.CrystalSymmetry = 'P21/c'; % space group symbol Exp.CrystalSymmetry = 11; % space group number (between 1 and 230) Exp.CrystalSymmetry = 'C2h'; % point group, Schönflies notation Exp.CrystalSymmetry = '2/m'; % point group, Hermann-Mauguin notation
When CrystalSymmetry
is given, all symmetry-related sites in the crystal are included in the calculation. If CrystalSymmetry
is not given, space group 1 (P1, point group C1, one site per unit cell) is assumed.
Ordering
If a number is given in this field, it specifies the orientational distribution of the paramagnetic molecules in the sample. If not given or set to zero, the distribution is isotropic, i.e. all orientations occur with the same probability.
If it is given, the orientational distribution is non-isotropic and computed according to the formula P(θ) = exp(-U(θ)) with U(θ) = -λ(3 cos2θ - 1)/2), where θ is the angle between the molecular z axis and the static magnetic field, and λ is the number specified in Exp.Ordering
.
Typical values for λ are between about -10 and +10. For negative values, the orientational distribution function P(θ) is maximum at θ = 90° (preferential orientation in the molecular xy plane), for positive values at θ = 0° and θ = 180° (preferential alignment along the molecular z axis). The larger the magnitude of λ, the sharper the distributions.
To plot a distribution depending on λ, use
lambda = 5; theta = linspace(0,pi,1001); U = -lambda*plegendre(2,0,cos(theta)); P = exp(-lambda*U); plot(theta*180/pi,P);
If Exp.Ordering
is a function handle, pepper
will use the user-supplied function to obtain the orientational distribution. It calls the function with two vector arguments, phi
and theta
(in radians). The function must return a vector P
containing probabilities for each orientation, that is P(k)
is the probability of finding the paramagnetic molecules with orientation specified by phi(k)
and theta(k)
. Here is an example with an anonymous function:
Exp.Ordering = @(phi,theta) gaussian(theta,0,15/180*pi);
Of course, the function can also be written and stored in a separate file, e.g. myori.m
. Then use Exp.Ordering = @myori
.
When using a custom orientational distribution, make sure that the symmetry used in the simulation corresponds to the symmetry of the distribution. If the distribution is very narrow, increase the number of knots in the options structure.
There are defaults for all fields except Range
and Field
, which have to be specified when invoking salt
.
The structure Opt
collects a number of parameters allowing to tune speed and accuracy of the simulation. Opt
is optional, if it is omitted, pre-set values for the parameters are used. The field names and their possible values are
Method
'matrix'
(default) or 'perturb1'
or 'perturb2'
'perturb1'
, first-order
perturbation theory, or 'perturb2'
, second-order perturbation theory.
Perturbation theory does not work for electron spins with S>1/2. It is accurate
only if the hyperfine coupling is much smaller than the microwave frequency, and
the nuclear quadrupole interaction is much smaller than both the hyperfine and
the nuclear Zeeman interaction.
Opt.Method = 'perturb1'; % first-order perturbation theory Opt.Method = 'matrix'; % matrix diagonalization
Nuclei
Nuclei
is a list
of indices selecting those nuclei for which ENDOR peaks should be computed. 1
is the first nucleus, etc. E.g. the following specifies ENDOR of only the protons
only in a copper complex.
Sys.Nucs = '63Cu,1H,1H'; Opt.Nuclei = [2 3]; % only protonsBy default, all nuclei are included in the simulation.
Verbosity
salt
prints to the screen. If Opt.Verbosity=0
, salt
is completely silent. 1 logs relevant information, 2 gives more details.
nKnots
[N1]
or [N1 N2]
N1
gives the number of orientations between θ=0° and θ=90°
for which spectra are explicitly calculated using the physical theory.
Common values for N1
are between 10 (10° increments) and 91 (1° increments).
The larger the anisotropy of the spectrum and the narrower the linewidth, the higher
N1
must be to yield smooth powder spectra.
N2
is the refinement factor for the interpolation of the orientational
grid. E.g. if N2=4
, then between each pair of computed orientations
three additional orientations are calculated by spline interpolation. Values higher than 10
are rarely necessary. If N2
is not given, a default value is used.
Opt.nKnots = 91; % 1° increments, no interpolation Opt.nKnots = [46 0]; % 2° increments, no interpolation Opt.nKnots = [31 6]; % 3° increments, 6-fold interpolation (giving 0.5° increments)
Sites
Opt.Sites
is empty or not given, all sites are included. If given, it must be a list of site numbers. The number of sites depends on the space group given in Exp.CrystalSymmetry
. E.g. the following set limits the simulation to sites 1 and 3 of the 4 magnetically distinct sites in crystal of space group no. 47.
Exp.CrystalSymmetry = 47; % space group Pmmm Opt.Sites = [1 3];In powder simulations,
Opt.Sites
is ignored.
Symmetry
'auto'
(default), 'Dinfh'
, 'D2h'
,
'C2h'
or 'Ci'
'Dinfh'
corresponds to a line from θ=0° to &theta=90° (with φ=0°), 'D2h'
to one octant, 'C2h'
to two octants, and 'Ci'
to one hemisphere (four octants).
auto
is the default, meaning that pepper
determines the correct symmetry automatically from the given spin system. With any other setting, pepper
is forced into using the specified symmetry, even if it is incorrect for the spin system.
See also symm.
Output
'summed'
(default) or 'separate'
'separate'
causes salt
to return the spectra
for different transitions separately in spec(k,:)
. For
single-crystal spectra, 'separate'
causes
salt
to return the spectra for different crystals
(see Exp.CrystalOrientation
)
separately. 'summed'
means that only one total
spectrum is returned.
ThetaRange
salt
to be used similar to older powder
ENDOR spectrum computation programs. There it was possible to include
effects of orientation selection and limited excitation bandwidths by
manually specifying the range of orientations to be included in the
"powder" spectrum. ThetaRange
specifies the lower and
upper limit of θ (angle between the z axis of the molecular frame
and the external static magnetic field) for the orientations in the powder
simulation. So if ThetaRange = [10 20]*180/pi
,
only orientations in the segment with θ between
10° and 20° are included in the spectrum.
Opt.Symmetry
is not explicitely given, it is set to 'Ci'
.
Opt.ThetaRange
cannot be used together with Exp.Ordering
or
Exp.Orientations
.
The following options are only available for matrix diagonalization (Opt.Method='matrix'
),
but not for perturbation theory (Opt.Method='perturb1'
or 'perturb2'
).
Transitions
salt
uses them and skips its
automatic transition selection scheme. Level pairs are specified in
Transitions(k,:)
by the level numbers which start with 1 for the
lowest-energy level.
Opt.Transitions = [1 2]; % transition between levels 1 and 2 Opt.Transitions = [1 2; 5 6]; % 2 transitions, 1<->2 and 5<->6
Enhancement
'off'
(default) or 'on'
Intensity
'on'
(default) or 'off'
Threshold
salt
's transition selection scheme.
Any transition with a relative average amplitude less that
Threshold
is not included in the calculation. The relative
average amplitude of the strongest transition is 1.
OriPreSelect
salt
uses automatic orientational pre-selection
to speed-up simulations. This speed-up is most noticeable for large spin
systems and field/frequency settings that lead to single-crystal like spectra.
salt
computes line positions and intensities for a set of orientations using either matrix diagonalization or perturbation theory.
The matrix diagonalization approach used in salt
is identical to that of pepper
, with the obvious exception of the calculation of line intensities, which is similar to that used in MAGRES (Keijzers et al, J.Chem.Soc. Faraday Trans. 1 83, 3493-3503, 1984).
First- and second-order perturbation theory is based on expressions by Iwasaki (J.Magn.Reson. 16, 417-423, 1974). It includes pseudosecular contributions. No transition moments are computed, that is, the intensities of all resonances are equal. Currently, the perturbation-theory algorithm is limited to systems with one electron spin S=1/2 (but an arbitrary number of nuclei with arbitrary spins).
For powder simulations, salt
uses the same methods as pepper
, orientational interpolation and interpolative projection, to construct the powder spectrum.
A full simulation of the powder ENDOR spectrum of a radical with a proton is
Sys.g = 2; Sys.Nucs = '1H'; Sys.A = [-2 1 4]; Sys.lwEndor = 0.1; Exp.Range = [8 18]; Exp.Field = 308.46; salt(Sys,Exp);
eigfields, endorfrq, pepper, resfields, resfields_perturb


Hello,
Having done some research and for those that don't know the British Gas energy meter (Current Cost CC128) uses a YHDC SCT027H current transformer. Has anyone tried this sensor with emon or could advise me which formulae I need to resolve in order to use it?
Thanks,
Ian
Re: YHDC SCT027H Current Sensor/Transformer
If the YHDC data on their website is to be believed, your c.t. is 150 A : 50 mA, therefore you will be able to use it directly in place of the standard 100 A c.t., but you will need a current calibration constant of 166.66 if you use the standard 18 Ω burden resistor (see http://openenergymonitor.org/emon/buildingblocks/ct-and-ac-power-adaptor...). However, if you are in the UK and have a standard 80 A or 100 A supply, you might want to increase the burden to 27 Ω and the calibration constant is then back to 111.11 again. That will give you a range of 0 - 100 A with better resolution at low currents.
Re: YHDC SCT027H Current Sensor/Transformer
Hi Robert,
Thank you for taking the time to reply, much appreciated.
Yes I am in the UK so would opt for a better resolution at lower currents, as I've yet to see my British Gas energy meter read above 4kW (16A) and if it did I'd probably be having a heart attack at the energy cost ;-) Will also read the webpage you linked to.
Thanks again,
Ian
Re: YHDC SCT027H Current Sensor/Transformer
Provided you remain within the (unspecified and indeterminate) VA rating of your c.t., you can in principle increase the burden resistor even further, but you must bear in mind that if the c.t. sees the fault current when a fuse blows or a breaker trips, you can get a big current spike which might damage the electronics unless the c.t. output voltage or the current into the ADC input protection diodes is effectively limited in some way. (The standard 100 A c.t. in the standard emonTx circuit is just about on the limit!)


The goal of this app was to see if I could really replace a waiters job! Im aware that there is some software like this already on the market like Applebees table ordering system. What if you could create your own similar software, that would be priceless. All you would need to run a restaurant with a couple employees is a wifi connection and a lot of android tablets. 15 decent cheap android tablets in todays flooded market of tablets would run you around $140 a tablet. A wifi connection for this type a task would cost about $200 a month. A business could can easily replace a few employees and still pass on the cost to the customers!
The first step for me was to make an ordering app thats easy to use. The app has to be able to show the price of each item and be able to add items and be able to take aways items while being able to keep track of the price of each item. The app also has to be able to add the same item multiple times.
I decided to use a listpicker for this task. You can add multilple list of list if you have lots of items to choose from. If I wanted to add a list of side extras like extra ketchup, extra mustard, extra onion, a listpicker would make this super simple and fun. As you can see this app makes it easy to choose and delete an items
After the order has been confirmed a message will appear along with the total price. After this the order is sent to a database and the person or idividuals with the master app will immediately be alerted to the customers order.
The person who has the master app on their device will get an alert that a table has put in an order. The table that put in the order will turn green on the app. After that all the user has to do is push the order button and push the table number to see the order. The data you will see is the table number, the database tag id, the items ordered, and the total cost of the order.
The only thing left to do is to delete the order from the the database and app after the order is cleared. All the user has to do is press the delete button and and the database tag list will show. Press the database id tag that matches the table order you want to delete. The easiest way to do this is to match the last four digits. This will delete the order from the database and the database id tag list from the list, and the order from the orders list. Once that is done press the green button and it will clear the text on the screen rinse and repeat.


Play Music
About
Play Game
Contributors
Dark Mode
Tic-Tac-Toe
Scoreboard
Game/User
Player
Computer
Win
Lost
Draw
Easy
Normal
Hard
RESET BOARD


--- creation_epoch:<PHONE_NUMBER> lastmod_epoch:<PHONE_NUMBER> categories: ['Computer Problems'] title: VMware Workstation Working on Latest Ubuntu --- Latest Ubuntu (or Xubuntu) distros have kernel versions that don't compile nicely for VMware Workstation Professional 16.x (or 17). Errors like "vmnet-only/vm_assert.h:43:10: fatal error: stdarg.h: No such file or directory" or similar.
I found the solution via multiple searches.
Compiling vmmon module fails on linux kernel 5.16.0-arch1-1
How to Install VMware Workstation 17 Pro on Ubuntu 22.10
https://github.com/mkubecek/vmware-host-modules/blob/master/INSTALL
The famous libssl problem in Linux distribtution
"Cannot open /dev/vmmon: No such file or directory" error when powering on a VM (2146460)
Some pre-req commands:
sudo apt-get install make gcc g++ autoconf build-essential dkms linux-libc-dev git #Ensure that Secure Boot is disabled of the modules will never load (unless you sign them) # Assumed y0ou already ran the VMware installer once.
In the event that community forum content disappears here are the quick start steps (assumes VMware bundle already installed):
mokutil --sb-state mkdir /opt/vmware cd /opt/vmware git clone https://github.com/mkubecek/vmware-host-modules.git cd vmware-host-modules/ # Change-out with your version here git checkout workstation-16.2.5 make tar -cf vmnet.tar vmnet-only tar -cf vmmon.tar vmmon-only sudo cp -v vmmon.tar vmnet.tar /usr/lib/vmware/modules/source/ sudo make install sudo vmware-modconfig --console --install-all
I also had libssl errors with vmware-authdlauncher
vim /etc/ld.so.conf.d/vmware-authdlauncher.conf #linking libssl and libcrypto /usr/lib/vmware/lib/libssl.so.1.1 /usr/lib/vmware/lib/libcrypto.so.1.1 sudo ldconfig


Enter User Id - Enter Place Name - Enter Type Of Place - Enter Locality- City - State - PinCode - Country - Description - Submit


#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <regex.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include <libgen.h>
#include "../include/libopal.h"
Go to the source code of this file.
Functions | |
| void | opal_log (log_level_e tag, const char *file, int line, const char *func, const char *fmt,...) |
| Print formatted message to log file. More... | |
| void | banner (const char *msg) |
| Print banner with stars above and below given string in DEBUG mode. More... | |
| short | opal_exit (short code) |
| Function to close all open resources before program exit. More... | |
| short | opal_error (short exit_code, char *log_msg, int fmt_option, char *fmt,...) |
| Function to call opal_exit and logger functions. More... | |
| int | read_next_char (void) |
| Function to read next character from the source file pointer. More... | |
| short | init_report (FILE *report_fp) |
| Initialize HTML report file. More... | |
| short | close_report (FILE *report_fp) |
| Close HTML report file. More... | |
| short | rem_comments (FILE *source_fp, FILE *dest_fp) |
| Function to read from source, remove comments, and write to destination. More... | |
| short | proc_includes (FILE *source_fp, FILE *dest_fp) |
| Read source, process includes, write to destination. More... | |
| short | print_marc_html (FILE *source_fp, FILE *report_fp) |
| Append MARC output to HTML report file. More... | |
| lexeme_s | get_string_literal_lexeme (int char_line, int char_col) |
| Get lexeme for a string literal. More... | |
| lexeme_type_e | binary_unary (char compound_char, lexeme_type_e compound_type, lexeme_type_e simple_type, int char_line, int char_col) |
| Get lexeme for binary or unary operator. More... | |
| lexeme_s | get_identifier_lexeme (int char_line, int char_col) |
| Get lexeme for char / integer identifier. More... | |
| bool | match (const char *str, const char *pattern) |
| Matches a string against a regular expression pattern. More... | |
| lexeme_s | get_next_lexeme (void) |
| Get the next lexeme based on the next character. More... | |
| short | get_lexeme_str (const lexeme_s *lexeme, char *buffer, const int buffer_len) |
| Get lexeme string format. More... | |
| short | build_symbol_table (lexeme_s *symbol_table, int *symbol_count) |
| Populate symbol table with lexemes in source file pointer. More... | |
| short | print_symbol_table (lexeme_s *symbol_table, FILE *dest_fp) |
| Print symbol table to destination file pointer. More... | |
| short | print_symbol_table_html (lexeme_s *symbol_table, FILE *report_fp) |
| Print symbol table HTML report to report file pointer. More... | |
| void | free_symbol_table (lexeme_s *symbol_table) |
| Free memory allocated for symbol table linked list. More... | |
| node_s * | make_ast_node (ast_node_type_e type, node_s *left_child, node_s *right_child) |
| Return syntax tree node with given left and right child nodes. More... | |
| node_s * | build_syntax_tree (lexeme_s *symbol_table) |
| Build abstract syntax tree from symbol table. More... | |
| void | expect_lexeme (lexeme_type_e expected_type) |
| Check if lexeme is of expected type, else print error and exit. More... | |
| node_s * | make_parentheses_expression (void) |
| Build and return expression inside parantheses. More... | |
| node_s * | make_leaf_node (ast_node_type_e type, lexeme_s *curr_lexeme) |
| Build and return leaf nodes for identifier/integer/strings. More... | |
| node_s * | make_expression_node (int precedence) |
| Build and return expression node. More... | |
| node_s * | make_statement_node (void) |
| Build and return syntax tree node for a statement. More... | |
| node_s * | optimize_syntax_tree (node_s *tree) |
| Optimize the abstract syntax tree. More... | |
| short | print_ast (node_s *syntax_tree, FILE *dest_fp) |
| Print abstract syntax tree to destination file. More... | |
| void | traversePreOrder_graph (node_s *node, FILE *report_fp, int level) |
| Traverse abstract syntax tree pre-order. More... | |
| short | print_ast_html (node_s *syntax_tree, FILE *report_fp) |
| Print abstract syntax tree tree to HTML report file. More... | |
| void | free_syntax_tree (node_s *node) |
| Free memory allocated for syntax tree. More... | |
| void | traverse_ast (node_s *node, FILE *dest_fp) |
| Traverses the syntax tree while printing the contents to dest_fp. More... | |
| void | add_asm_code (asm_code_e code, int intval, char *label) |
| Append ASM code to array. More... | |
| void | gen_asm_code (node_s *ast) |
| Generate assembly command list from given abstract syntax tree. More... | |
| short | print_asm_code (asm_cmd_e cmd_list[], FILE *dest_fp) |
| Print assembly command list. More... | |
| short | print_asm_code_html (asm_cmd_e cmd_list[], FILE *dest_fp) |
| Print assembly code list to HTML report file. More... | |
| int | add_var (char *ident_curr) |
| Get index of an identifier in array, add if missing. More... | |
| int | add_str (char *str_curr) |
| Get index of a string in array, add if missing. More... | |
| short | free_asm_arrays () |
| Free vars & strs arrays used for generating assembly code. More... | |
| short | gen_obj (char *asm_fn, char *obj_fn) |
| Assemble object file using NASM. More... | |
| short | gen_bin (char *obj_fn, char *dest_fn) |
| Link object using LD. More... | |
Definition in file libopal.c.
| void add_asm_code | ( | asm_code_e | code, |
| int | intval, | ||
| char * | label | ||
| ) |
| int add_str | ( | char * | str_curr | ) |
Get index of a string in array, add if missing.
Create String array.
| [in] | str_curr | string to get index for |
If string array is not empty
Search it for the current string
and return its index if found
Otherwise append the string to the array
and return its index
| int add_var | ( | char * | ident_curr | ) |
Get index of an identifier in array, add if missing.
Create Identifier array.
| [in] | ident_curr | identifier to get index for |
If identifier array is not empty
Search it for the current identifier
and return its index if found
Otherwise append the identifier to the array
and return its index
| void banner | ( | const char * | msg | ) |
Print banner with stars above and below given string in DEBUG mode.
Print a banner with stars above and below given string.
Helper function to show something prominently in the logs Eg:
| [in] | msg | String to print |
Create buffer of 64 characters size and fill with 63 stars
Call logger macro to print newline, 63 stars, string, 63 stars & newline
| lexeme_type_e binary_unary | ( | char | compound_char, |
| lexeme_type_e | compound_type, | ||
| lexeme_type_e | simple_type, | ||
| int | char_line, | ||
| int | char_col | ||
| ) |
Get lexeme for binary or unary operator.
| enum | lexeme type |
Initialize return variable.
The next char needs to be checked, so get it.
Illegal character found.
Compound type found, so get the next char and return compound_type.
Compound type not found, so return simple_type.
| short build_symbol_table | ( | lexeme_s * | symbol_table, |
| int * | symbol_count | ||
| ) |
Populate symbol table with lexemes in source file pointer.
| [in,out] | *symbol_table | Symbol table linked list to populate |
| [in,out] | *symbol_count | Pointer to count of lexemes found |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert symbol table pointer is not NULL
Assert symbol table count pointer is not NULL
Create symbols at the beginning of the linked list
Get lexemes in a loop until we get a EOF lexeme
Call get_next_lexeme() to populate next_lexeme
Append next_lexeme to symbol table
Call get_lexeme_str() to stringify next_lexeme
Append lexeme to symbol table
Increment symbol count
Move current to last symbol in linked list
Build abstract syntax tree from symbol table.
| symbol_table | Lexeme symbol table |
| Tree | root node pointer On success |
| NULL | On error |
Check if symbol table pointer is not NULL
Create syntax tree node NULL pointer to return
Start reading lexemes from the symbol table
Call make_ast_node() until lexeme with lx_EOF is seen
| short close_report | ( | FILE * | report_fp | ) |
Close HTML report file.
Close HTML report.
| [in,out] | report_fp | Report file pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert report file pointer is not NULL
Write HTML closing tags to the report
| void expect_lexeme | ( | lexeme_type_e | expected_type | ) |
Check if lexeme is of expected type, else print error and exit.
Check if lexeme is expected type, else print error and exit.
| [in] | expected_type | Expected lexeme type |
If ast_curr_lexeme is of expected type
... read next lexeme and return
... else print error and exit
| short free_asm_arrays | ( | ) |
| void free_symbol_table | ( | lexeme_s * | symbol_table | ) |
| void free_syntax_tree | ( | node_s * | node | ) |
| void gen_asm_code | ( | node_s * | ast | ) |
| short gen_bin | ( | char * | obj_fn, |
| char * | dest_fn | ||
| ) |
Link object using LD.
| obj_fn | Source object file name |
| dest_fn | Destination binary file name |
Assert object file name is not null
Assert destination file name is not null
Call to linker
Confirm obj_fn can be read
Use LD to link the obj_fn contents
Confirm successful linking
Confirm dest_fn can be read to and executed
Return errno if missing permissions on dest_fn
...or log command if unsuccessful
...or missing read permission on obj_fn
| short gen_obj | ( | char * | asm_fn, |
| char * | obj_fn | ||
| ) |
Assemble object file using NASM.
Assemble object using NASM.
| asm_fn | Assembly source file name |
| obj_fn | Object destination file name |
Assert assembly file name is not null
Assert object file name is not null
Check if asm_fn can be read
Create the NASM call with -g, -f and -o flags
Check if obj_fn can be read
| lexeme_s get_identifier_lexeme | ( | int | char_line, |
| int | char_col | ||
| ) |
Get lexeme for char / integer identifier.
Get identifier lexeme.
| struct | lexeme |
Get string to analyze
Terminate string
Error for unsupported characters
Determine if string is a reserved keyword
Determine if the string is an integer via regex
String must be an identifier
| short get_lexeme_str | ( | const lexeme_s * | lexeme, |
| char * | buffer, | ||
| const int | buffer_len | ||
| ) |
Get lexeme string format.
Stringify lexeme.
| [in] | lexeme | Lexeme to stringify |
| [in,out] | buffer | Buffer to store string value of lexeme |
| [in] | buffer_len | Length of buffer to use |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert buffer is not NULL
Empty out the string buffer
Populate the buffer with values from the struct
| lexeme_s get_next_lexeme | ( | void | ) |
Get the next lexeme based on the next character.
Get the next lexeme.
| struct | lexeme |
Create a empty struct to populate and return
Call read_next_char() to get the next character from source
Populate lexeme line and column number
Get the lexeme type based on the next character
| lexeme_s get_string_literal_lexeme | ( | int | char_line, |
| int | char_col | ||
| ) |
Get lexeme for a string literal.
| [in] | char_line | line number of char in source file |
| [in] | char_col | column number of char in source file |
| struct | lexeme * |
Initialize the string
The next char needs to be checked, so get it.
| short init_report | ( | FILE * | report_fp | ) |
Initialize HTML report file.
Initialize HTML report.
| [in,out] | report_fp | Report file pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert report file pointer is not NULL
Write HTML head tag to the report
Open res/styles.css in read-only mode
Copy CSS to HTML report
Close res/styles.css file
Start HTML body tag
Open textarea tag for source file
Append source file to HTML report and close textarea tag
Rewind source file pointer
If current value of source file position not 0, print error and exit
| node_s* make_ast_node | ( | ast_node_type_e | type, |
| node_s * | left_child, | ||
| node_s * | right_child | ||
| ) |
Return syntax tree node with given left and right child nodes.
| [in] | type | Node type to create |
| [in] | left_child | Left child node pointer |
| [in] | right_child | Right child node pointer |
| node_s* | On success |
Create node with given children and return
Create buffer for logging
Append left child node type to log buffer
Append current node type to log buffer
Append right child node type to log buffer
Log node message
| node_s* make_expression_node | ( | int | precedence | ) |
Build and return expression node.
Build expression node.
| [in] | precedence | Precedence of mathematical operation |
| node_s* | On success |
| NULL | On error |
Create the tree node to return
If lexeme type is Not, get next lexeme
...make Not node with the children next_lexeme and NULL
If lexeme type is Add or Sub, save type
Get next lexeme and make new expression node with it
If original node type was Sub
...make a Negate node with the children new node and NULL
Else only use the new node
If lexeme type is Integer, make leaf node and get next lexeme
If lexeme type is Ident, make leaf node and get next lexeme
If lexeme type is Input, get next lexeme
...expect LParen
... and make Input node with NULL as one child
... and expect String contents as the other
... finally expect Rparen to close Input
If lexeme type is Lparen, make tree from contents within
Expressions cannot start with any other type of lexeme
While the next lexeme is binary and its precedence is at least as high as the current lexeme
Save lexeme type and get next lexeme
Search for higher precedence in a later lexeme
and increment counter to work up precedence hierarchy
Recursively make new expression node with incremented precedence
...and add it to a working tree
...until all higher precedented lexemes in expression are processed
| node_s* make_leaf_node | ( | ast_node_type_e | type, |
| lexeme_s * | curr_lexeme | ||
| ) |
Build and return leaf nodes for identifier/integer/strings.
| [in] | type | type of node in tree |
| [in] | curr_lexeme | lexeme to make leaf with |
| node_s* | On success |
| NULL | On error |
Create the leaf node to return
Assign node type to new node
If lexeme type is a string or an identifier
Otherwise the lexeme type is an integer
| node_s* make_parentheses_expression | ( | void | ) |
Build and return expression inside parantheses.
| node_s* | On success |
| NULL | On error |
Expect left parantheses before the expression
Create tree for expression inside parantheses
Expect right parantheses after the expression
return tree
| node_s* make_statement_node | ( | void | ) |
Build and return syntax tree node for a statement.
Build and return statement node.
| node_s* | On success |
| NULL | On error |
< Syntax tree node to return
< Leaf node with int/string value
< Node for expression
< if/while condition statement node
< else condition statement node
If next lexeme is if statement, read next lexeme
... get expression inside left parentheses
... get condition statement node
... and create else statement node as NULL
If next lexeme is an else
... read next lexeme
... and make else statement node
Build and return the tree with left child as the expression node & right child as the code block to execute
If next lexeme is print, read next lexeme
Loop over lexemes inside the left and right parantheses of print statement, incrementing with every comma lexeme found
For string inside print statement ...
Build tree with left child as op-code to print string & right child as the leaf node representing the string
... and read next lexeme
For integer inside print statement ...
Build tree with left child as op-code to print integer & right child as the expression node representing the integer
make_expression_node() will read next lexeme
Build tree for statement till this comma
If no more commas in print statement, return tree
Expect a ')' & a ';' after print, else print error and exit
If next lexeme is semicolon, read next lexeme & return tree
If next lexeme is no operation, read next lexeme & return tree
If next lexeme is an identifier create leaf node for it
... and read next lexeme
Expect an '=' operator after an identifier, else print error and exit
Build expression tree whose result we will assign to the identifier
Build tree with left child as identifier & right child as expression
Expect a semi colon after expression, else print error and exit
If next lexeme is while, read next lexeme
... build expression node inside parantheses
... build tree node to execute if condition is true
... return while tree with left child as expression & right child as code block to execute
If next lexeme is left brace, build tree for code block until right brace lexeme is found
Expect a right brace after code block and return tree, else print error and exit
If next lexeme is end of file, break and return tree
Statements cannot start with any other type of lexeme
| bool match | ( | const char * | str, |
| const char * | pattern | ||
| ) |
Matches a string against a regular expression pattern.
Determine if regular expression is an integer.
From pubs.opengroup.org/onlinepubs/007904875/functions/regcomp.html
| [in] | str | String to match |
| [in] | pattern | Extended regular expression |
| true(1) | On match |
| false(0) | On error |
Ensure regex is set up properly
Process string against regex pattern
| short opal_error | ( | short | exit_code, |
| char * | log_msg, | ||
| int | fmt_option, | ||
| char * | fmt, | ||
| ... | |||
| ) |
Function to call opal_exit and logger functions.
| [in] | exit_code | Exit code to return |
| [in] | *log_msg | Logging message |
| [in] | fmt_option | Must be 1 if a formatted string is used |
| [in] | fmt | Formatted message to log |
| Function | call to opal_exit |
Allocate buffer to hold message to log
Read formatted user message string into the buffer
| short opal_exit | ( | short | code | ) |
Function to close all open resources before program exit.
Close open files, flush buffers and exit.
| [in] | code | Exit code to return |
| code | |
| errno | On system call failure |
Flush stdout
Close source file
Flush and close destination file
Flush and close report file
Flush and close log file
| void opal_log | ( | log_level_e | tag, |
| const char * | file, | ||
| int | line, | ||
| const char * | func, | ||
| const char * | fmt, | ||
| ... | |||
| ) |
Print formatted message to log file.
Helper function to log messages. Function writes to global variable log_fp. Usually called by a macro logger. Eg:
| [in] | tag | Log level of message |
| [in] | file | Source file name |
| [in] | line | Source file line number |
| [in] | func | Source file function |
| [in] | fmt | Formatted message to log |
Assert log file pointer is not null
Allocate buffer to hold message to log
Read formatted user message string into the buffer
If tag is a result of a system call and current log level is more than DEBUG, print the message and return. Eg - PASS / FAIL etc
If log message is less than current log level, print message with current date, time to log file pointer. Eg.
Flush message to log file
Optimize the abstract syntax tree.
| [in] | tree |
| node_s* | On success |
| NULL | On error |
Return NULL if no node
If no left or right child nodes
Empty code block with no child nodes
Leaf node
If no left node, return address of right
If no right node, return address of left
If node has left and right nodes, optimize them
| short print_asm_code | ( | asm_cmd_e | cmd_list[], |
| FILE * | dest_fp | ||
| ) |
Print assembly command list.
Print assembly code list.
| cmd_list | Assembly command list to print |
| dest_fp | Destination file pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
Open header file in 'r' mode
Assert destination file pointer is not NULL
Copy contents of header char by char to dest_fp
Close header file pointer if not NULL
Print user code
Open footer file in 'r' mode
Copy contents of footer char by char to dest_fp
Close footer file pointer if not NULL
Create strings and their lengths
Read each string character
print ASCII values for newlines
directly print all other characters
NULL terminate string
Print string length
Print string array
...and length array
Create integers array
| short print_asm_code_html | ( | asm_cmd_e | cmd_list[], |
| FILE * | dest_fp | ||
| ) |
Print assembly code list to HTML report file.
| cmd_list | Assembly command list to print |
| dest_fp | Destination HTML reportfile pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
Create strings and their lengths
Read each string character
print ASCII values for newlines
directly print all other characters
NULL terminate string
Print string length
Print string array
...and length array
Create integers array
| short print_ast | ( | node_s * | syntax_tree, |
| FILE * | dest_fp | ||
| ) |
Print abstract syntax tree to destination file.
| [in] | syntax_tree | Abstract syntax tree |
| [in,out] | dest_fp | Destination file pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Check if syntax tree pointer is not NULL
Print syntax tree in pre-traversal mode to destination file pointer
| short print_ast_html | ( | node_s * | syntax_tree, |
| FILE * | report_fp | ||
| ) |
Print abstract syntax tree tree to HTML report file.
Print abstract syntax tree to HTML report.
| [in] | syntax_tree | Abstract syntax tree |
| [in,out] | report_fp | Report file pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Check if syntax tree pointer is not NULL
Write mermaid graph header
Open res/mermaid.styles in read-only mode
Copy CSS to HTML report
Close res/styles.css file
Print abstract syntax tree to report
Write mermaid graph footer
| short print_marc_html | ( | FILE * | source_fp, |
| FILE * | report_fp | ||
| ) |
Append MARC output to HTML report file.
| [in] | source_fp | Source to be read from |
| [in] | report_fp | Destination to written to |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert source file pointer is not NULL
Assert destination file pointer is not NULL
Open textarea tag in report file for MARC output
Append MARC output file to report file
Flush contents of report to disk
| short print_symbol_table | ( | lexeme_s * | symbol_table, |
| FILE * | dest_fp | ||
| ) |
Print symbol table to destination file pointer.
| [in,out] | symbol_table | Symbol table to print |
| [in,out] | dest_fp | Destination file pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert symbol table pointer is not NULL
Assert destination file pointer is not NULL
Write ALEX to destination file
Call get_lexeme_str() to stringify next_lexeme
Append lexeme to symbol table
| short print_symbol_table_html | ( | lexeme_s * | symbol_table, |
| FILE * | report_fp | ||
| ) |
Print symbol table HTML report to report file pointer.
Print symbol table to HTML report.
| [in,out] | symbol_table | Symbol table to print |
| [in,out] | report_fp | Report file pointer |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert symbol table pointer is not NULL
Assert destination file pointer is not NULL
Walk the symbol table & print the HTML report to destination file pointer
Append symbol table to report file
Flush contents of report to disk
| short proc_includes | ( | FILE * | source_fp, |
| FILE * | dest_fp | ||
| ) |
Read source, process includes, write to destination.
Process include files, write to destination.
| [in] | source_fp | Source to be read from |
| [in] | dest_fp | Destination to written to |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Assert source file pointer is not NULL
Assert destination file pointer is not NULL
Move source_fp to beginning of file.
If source file position not 0, print error and exit
Copy each character to the destination file, while checking for include files.
Reads in 8 chars to check if they are "include ".
Rewinds the file pointer.
If include is found, process the included file.
Move file pointer to the point after "include "
Get the filename for the include file.
If given file name is relative path, prefix source file dir
Get source file directory
If include file does not exist, print error and exit
If include file can not be read, print error and exit
Open include file in read-only mode
Move contents of include file into destination file
Flush destination file contents to disk
Close include file pointer
Gets the next char for the switch case to evaluate.
| int read_next_char | ( | void | ) |
Function to read next character from the source file pointer.
Read next character from source file.
| Next | character read from FILE *stream source_fp |
| errno | On system call failure |
Read character from source file pointer
getc() sets the errno in the event of an error
Increment the column number of the character
If character is a newline, increment line number and reset column number
Return the character read
| short rem_comments | ( | FILE * | source_fp, |
| FILE * | dest_fp | ||
| ) |
Function to read from source, remove comments, and write to destination.
Read source, remove comments, write to destination.
| [in] | source_fp | Source to be read from |
| [in] | dest_fp | Destination to written to |
| EXIT_SUCCESS | On success |
| EXIT_FAILURE | On error |
| errno | On system call failure |
Check if source file pointer is not NULL
Check if destination file pointer is not NULL
Start reading characters from file
If character is not a /, line is not a comment
If character is a /, read next character
If next character is / or *, line is a comment, set flag
else, not a comment, write both characters to file
If comment flag is set, process comment
Read next character from file
If next character is /, process single line comment
If next character is *, process multi-line comment
If end of file in multi-line comment return EXIT_FAILURE
If char is a newline, write to file to preserve line numbers
| void traverse_ast | ( | node_s * | node, |
| FILE * | dest_fp | ||
| ) |
Traverses the syntax tree while printing the contents to dest_fp.
Traverse syntax tree for output file generation.
| [in] | node | The syntax tree node to be processed |
| [in] | dest_fp | The file to which the node's content will be printed |
We have reached a NULL leaf
If node is identifier or string, print char_val
... if node is integer, print the int_val
... else, print node type name
Recursive calls for further tree traversal
| void traversePreOrder_graph | ( | node_s * | node, |
| FILE * | report_fp, | ||
| int | level | ||
| ) |
Traverse abstract syntax tree pre-order.
| [in] | node | Abstract syntax tree node to print |
| [in] | report_fp | Destination report file pointer |
| [in] | level | Level in tree |
If node to print is null, return
If node is string, print char_val
If node is identifier, print name
... if node is integer, print the int_val
... else, print node type name
If node has left/right child nodes, create connection with array index
Print child nodes of tree recursively for left and right child nodes


I wish we had GitHub back in the day
My thoughts on version control
3/19/2015
In 2004 I began working on The Orion, the student-run newspaper at Chico State. It was an advanced news gathering operation. We had Mac computers, digital SLR cameras and our own decent website, www.orion-online.net (which is apparently a German coffee blog now).
We had all the cool tools and the awards to prove our talents. But we didn't have version control.
Imagine a staff of 50 college kids writing stories, editing articles and designing news pages. Now think of all the times you have accidentally deleted a file or saved over something you didn't mean to. We would routinely overwrite, destroy or just plain lose hours of work every month. There was no system in place to safely move our files around and make sure nothing horrible happened. So we had plenty of horrible happen.
Version control would have made our lives a lot easier. Today's college kids probably use a program called Git to make a digital trail of who touched each file, when they touched it and why they touched it.
Git is fantastic for teams that are collaborating on files. Once you finish editing a file - like this blog post, for example - you would declare the file as finished by "committing" it. You would then "push" the file to a central hub. A popular hub for software developers is GitHub.
GitHub allows you to publicly post your file for others to pick up and work on. It also allows you to jump into another person's file and work on it. But the file isn't just automatically overwritten when someone else wants to change things. There is a standard process for reviewing changes called a "pull request".
A student newspaper built today would save a lot of teary-eyed reporters and lost hours by building a workflow around Git. It may seem nerdy to use the command line to turn in a news article, but you'll thank me when your 750 word masterpiece on Chipotle opening up in the student union isn't accidentally deleted by someone cleaning a keyboard.


Maritime Bulletin Daily Nov 21 – 22
by Mikhail VoytenkoAccidents
• Ro-ro EUROCARGO TRIESTE fire, Livorno
• Taiwanese cargo ship sank after collision 2 crew missing
• Bunker tanker aground, Ukraine
• Aground and Not Under Command vessels Worldwide Alerts (2 ships)
Details only for subscribers.
Annual subscription $750. For annual subscription, contact<EMAIL_ADDRESS>Subscribe if you want to receive accidents news ASAP and in full.


| 类 | 说明 |
|---|---|
| EscapedErrors |
Errors wrapper that adds automatic HTML escaping to the wrapped instance,
for convenient usage in HTML views.
|
| ServletRequestDataBinder |
Special
DataBinder to perform data binding
from servlet request parameters to JavaBeans, including support for multipart files. |
| ServletRequestParameterPropertyValues |
PropertyValues implementation created from parameters in a ServletRequest.
|
| ServletRequestUtils |
Parameter extraction methods, for an approach distinct from data binding,
in which parameters of specific types are required.
|
| WebDataBinder |
Special
DataBinder for data binding from web request parameters
to JavaBean objects. |
| 异常错误 | 说明 |
|---|---|
| MethodArgumentNotValidException |
Exception to be thrown when validation on an argument annotated with
@Valid fails. |
| MissingMatrixVariableException |
ServletRequestBindingException subclass that indicates that a matrix
variable expected in the method parameters of an @RequestMapping
method is not present among the matrix variables extracted from the URL. |
| MissingPathVariableException |
ServletRequestBindingException subclass that indicates that a path
variable expected in the method parameters of an @RequestMapping
method is not present among the URI variables extracted from the URL. |
| MissingRequestCookieException |
ServletRequestBindingException subclass that indicates
that a request cookie expected in the method parameters of an
@RequestMapping method is not present. |
| MissingRequestHeaderException |
ServletRequestBindingException subclass that indicates
that a request header expected in the method parameters of an
@RequestMapping method is not present. |
| MissingServletRequestParameterException |
ServletRequestBindingException subclass that indicates a missing parameter. |
| ServletRequestBindingException |
Fatal binding exception, thrown when we want to
treat binding exceptions as unrecoverable.
|
| UnsatisfiedServletRequestParameterException |
ServletRequestBindingException subclass that indicates an unsatisfied
parameter condition, as typically expressed using an @RequestMapping
annotation at the @Controller type level. |


“We design and build innovative digital platforms that deliver award winning secure user experiences to create more profitable and connected client businesses.”
Get to know us


. THE BIG LEBOWSKI A film review by Christopher Null Copyright 1998 Christopher Null
It bears repeating: Just because you happen to make an amazing, perfectly-crafted, wildly funny movie (FARGO), doesn't mean you can do whatever the hell you want in your follow-up and pass it off as art.
THE BIG LEBOWSKI is the definitive answer to skeptics like me who wondered if FARGO was the fluke, and ho-hum flicks like THE HUDSUCKER PROXY and RAISING ARIZONA were more the norm for the Coen brothers. They undoubtedly are. In THE BIG LEBOWSKI, the Coens had the world to play with as a palette. What they delivered is a wreck.
The story, what little there is of one, follows Jeff "The Dude" Lebowski (Bridges), a bum/amateur bowler who gets caught up in a kidnapping-gone-wrong scheme involving a millionaire who happens to have the same name. Promising premise (even if it sounds familiar...), but the story is totally blown on one-dimensional goofball characters, blind side plots that go nowhere, and a meandering plotline that barely keeps you awake.
Sure, with characters like Goodman's Vietnam vet/wacked-out bowling buddy, Moore's new age "vaginal" artist, and, most memorably, John Turturro's minuscule role as Jesus, the most flamboyant bowler alive, there is plenty to be amused by in the film, and sometimes it's absolutely riotous. But the laughs are hollow... because the story just sits there like a 7-10 split.
I wish the Coens the best, but they're going to have to do better than this. I know they can.

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


Software Architecture and Development Process
Complex IoT application challenges and an endless number of potential technology choices and approaches necessitates a tailor-made software architecture design for each of your projects. While most IoT projects involve both edge and centralized (usually cloud-based) software components, the similarities between any two projects can quickly diverge from there.
IOTA2Z takes a holistic and informed approach in our architecture design. Our expertise spans horizontally scalable cloud applications, microservice architectures, public and private cloud infrastructures, distributed systems, asynchronous messaging, and web and mobile-based user interfaces. We are expert in multiple object oriented and functional languages, standard application platforms and integration tools, relevant standards, and mainstream design patterns. IOTA2Z further specializes in complex web application development for our fortune 500, startup, military, and governmental customers. We reduce development risk for our clients by using Agile methodologies and standards-based code to get applications to production quickly.
Usability
Software users have become accustomed to beautiful, logical interfaces, in both enterprise and consumer applications. In IoT applications specifically, advanced features such as “zero touch” provisioning techniques are also a necessity. IOTA2Z delivers these for our clients through a process of design thinking, user research and assumption testing. We design with usability in mind from day one, building applications with bullet-proof provisioning, intuitive user experiences, and fast response times.
Scalability
Need an app that can scale to millions of IoT endpoints and/or users in a matter of months? You’ve found the right team. We build custom IoT apps from the ground up that are designed with massive scale as a principal priority. We are experts at developing apps that effectively and cost-efficiently scale with your business.
Architecture
In general, IOTA2Z embraces microservice architectures and service oriented architectures (SOA), design patterns based on discrete pieces of software providing application functionality as services to other applications. This is particularly important in a world where most IoT applications require 24x7 highly available operation, frequent functionality upgrades, and massive scale.
Continuous Delivery and Agile Iteration
We manage all our projects with a highly iterative, continuous delivery, continuous feedback approach. Living and breathing Agile methodologies and practices ensures that we optimize project resources, minimize project risks, hit deliverable milestones, and meet or exceed customer expectations. Further, our use of current DevOps practices and continuous integration/delivery enable us to accelerate product delivery and simplify sustaining engineering over an applications full lifecycle.


I will never switch to boxing –Adesanya
by Kelvin EkereteKelvin Ekerete
Ultimate Fighting Championship middleweight champion, Israel Adesanya, says he has no intention of switching to boxing.
Top UFC fighters from Jorge Masvidal to Stipe Miocic want to make the crossover to boxing, but newly-crowned Adesanya has no intention of leaving the cage.
The Last Stylebender in a recent edition of Ebro said he plans to make mega-money in the UFC and can’t understand why other fighters won’t adopt the same attitude.
“This (UFC) is where I’m going to end my career,” Adesanya said.
“People say, ‘oh, after UFC, you can go to boxing and have one super fight maybe with Canelo and make a hundred million.’ I’m like, I can do that in the UFC. I might be the first fighter to do that in the UFC.”
Adesanya added that fighting in the ring wiould take away more of his skills, a situation he will not like to find himself, no matter the price.
“It’s silly. Why would I come to the proving ground of all fighting — the UFC — and then afterward, fight a guy and take away like 80 percent of my weapons,” he said.
“I want to kick people. I want to strangle someone. I can’t do that in boxing. I don’t want to get into the clinch and then okay, break.”
The 30-year-old unified the middleweight titles with a second round knockout of Robert Whittaker at UFC 243 and plans to defend his title against Yoel Romero next year.
Copyright PUNCH.
All rights reserved. This material, and other digital content on this website, may not be reproduced, published, broadcast, rewritten or redistributed in whole or in part without prior express written permission from PUNCH.
Contact: editor@punchng.com


Gateway
BOT
17-Nov-19 04:21 PM
[dscrd-hush] <Finality> I think hush can do with a more human friendly wallets
[dscrd-hush] <Finality> Something simple
[dscrd-hush] <Finality> Like verus
[dscrd-hush] <Finality> It will go long way
[dscrd-hush] <dukeleto>
[dscrd-hush] <dukeleto> @Finality are you talking about Verus Agama ?
[dscrd-hush] <Finality> Verus android
[dscrd-hush] <dukeleto> @Finality and if there are specific features that are "human friendly", that is good to know
[dscrd-hush] <Finality> We need to be more applicable to general public
[dscrd-hush] <dukeleto> @Finality what verus android?
Android companion app for SilentDragon . Contribute to MyHush/SilentDragonAndroid development by creating an account on GitHub.
[dscrd-hush] <Finality> There is verus android wall
[dscrd-hush] <dukeleto> we haz an android app too
[dscrd-hush] <Finality> What about hush
[dscrd-hush] <dukeleto> i don't follow Verus world, so i have not idea what they do
[dscrd-hush] <Finality> Ohhhh ok
[dscrd-hush] <Finality> Well i see u guys as tied up tech to certain level
[dscrd-hush] <Finality> General public would want something user friendly
Android companion app for SilentDragon . Contribute to MyHush/SilentDragonAndroid development by creating an account on GitHub.
[dscrd-hush] <dukeleto> that is our latest android release
[dscrd-hush] <Finality> And this that u posted is not in ur main website
[dscrd-hush] <dukeleto> it's not in any App stores yet
[dscrd-hush] <dukeleto> @gilardh and @heguli97 are working on updating the website
[dscrd-hush] <Finality> Duke
[dscrd-hush] <Finality> I have been in crypto space for 6 yeats and have great respect for u
[dscrd-hush] <Finality> But the future also means newbies adapting
[dscrd-hush] <Finality> Need something more user friendly
[dscrd-hush] <dukeleto> giving up all privacy is very user-friendly
[dscrd-hush] <dukeleto> such as using Verus
[dscrd-hush] <Finality> U dont get me
[dscrd-hush] <dukeleto> @Finality if you have specific requests, we are happy to hear them
[dscrd-hush] <Finality> Not. Giving up on privavy
[dscrd-hush] <dukeleto> Verus is not focused on privacy nor do I consider it a privacy coin
[dscrd-hush] <dukeleto> So comparing Hush against Verus makes no sense
[dscrd-hush] <dukeleto> Privacy is our first concern, then convenience and ease-of-use. We have made massive strides in just the last few weeks
[dscrd-hush] <Finality> But can the team make up a friendly app which supports privacy yet be user friendly?
[dscrd-hush] <dukeleto> the whole industry has been trying and failing for years, lol
[dscrd-hush] <Finality> Dont get me wrong
[dscrd-hush] <Finality> I am not here to critic u
[dscrd-hush] <Finality> I am merely suggesting
[dscrd-hush] <Finality> I have high hopes for u guys
[dscrd-hush] <Finality> For your info what u invest as mere $500 is equivalent to $ 4000 my country
[dscrd-hush] <Finality> Yet i do
[dscrd-hush] <Finality> Cause of ur tech
[dscrd-hush] <dukeleto> I work on Hush for the privacy tech, not because of the financials
[dscrd-hush] <dukeleto> I could make a lot more money doing a lot less work doing other things
[dscrd-hush] <dukeleto> and i have worked for free for over 2 years
[dscrd-hush] <Finality> I hooe u keep working on it
[dscrd-hush] <dukeleto> So it's hard to understand where you are coming from.
[dscrd-hush] <Finality> Regardless what
@dukeleto @florian_tramer @danboneh Do you agree your discovery was only made because the code had been updated in response to our prior disclosure to the Zcash team?
[dscrd-hush] <Finality> What u went through is beyond me as i do not know
[dscrd-hush] <dukeleto> oh look, i ruffled some feathers of the researchers that discovered the massive zec/xmr bugs, @Biz
[dscrd-hush] <Finality> Neither is it my business
[dscrd-hush] <dukeleto> Nor do I know about the financial situation of all community members, nor do I want to know
[dscrd-hush] <Finality> But the fact that u are seen as icon of privacy
[dscrd-hush] <dukeleto> It's their privacy business


|
Panda3D
|
Pure virtual particle renderer base class. More...
Public Types | |
| enum | ParticleRendererAlphaMode { PR_ALPHA_NONE = 0, PR_ALPHA_OUT = 1, PR_ALPHA_IN = 2, PR_ALPHA_IN_OUT = 3, PR_ALPHA_USER = 4, PR_NOT_INITIALIZED_YET = 5 } |
| enum | ParticleRendererBlendMethod { PP_NO_BLEND = 0, PP_BLEND_LINEAR = 1, PP_BLEND_CUBIC = 2 } |
Public Member Functions | |
| BaseParticleRenderer::ParticleRendererAlphaMode | getAlphaMode () |
| bool | getIgnoreScale () |
| Returns the "ignore scale" flag. More... | |
| GeomNode | getRenderNode () |
| Query the geomnode pointer. More... | |
| NodePath | getRenderNodePath () |
| Query the geomnode pointer. More... | |
| float | getUserAlpha () |
| gets alpha for "user" alpha mode More... | |
| output (Ostream out) | |
| Write a string representation of this instance to <out>. More... | |
| setAlphaMode (BaseParticleRenderer::ParticleRendererAlphaMode am) | |
| setColorBlendMode (ColorBlendAttrib::Mode bm, ColorBlendAttrib::Operand oa, ColorBlendAttrib::Operand ob) | |
| sets the ColorBlendAttrib on the _render_node More... | |
| setIgnoreScale (bool ignore_scale) | |
| Sets the "ignore scale" flag. More... | |
| setUserAlpha (float ua) | |
| sets alpha for "user" alpha mode More... | |
| write (Ostream out, int indent) | |
| Write a string representation of this instance to <out>. More... | |
| Public Member Functions inherited from ReferenceCount | |
| int | getRefCount () |
| Returns the current reference count. More... | |
| ref () | |
| Explicitly increments the reference count. More... | |
| bool | testRefCountIntegrity () |
| Does some easy checks to make sure that the reference count isn't completely bogus. More... | |
| bool | testRefCountNonzero () |
| Does some easy checks to make sure that the reference count isn't zero, or completely bogus. More... | |
| bool | unref () |
| Explicitly decrements the reference count. More... | |
Additional Inherited Members | |
| Static Public Member Functions inherited from ReferenceCount | |
| static TypeHandle | getClassType () |
| Public Attributes inherited from ReferenceCount | |
| int | ref_count |
| The current reference count. More... | |
Pure virtual particle renderer base class.
| BaseParticleRenderer::ParticleRendererAlphaMode getAlphaMode | ( | ) |
| bool getIgnoreScale | ( | ) |
Returns the "ignore scale" flag.
See set_ignore_scale().
| GeomNode getRenderNode | ( | ) |
Query the geomnode pointer.
| NodePath getRenderNodePath | ( | ) |
Query the geomnode pointer.
| float getUserAlpha | ( | ) |
gets alpha for "user" alpha mode
| output | ( | Ostream | out | ) |
Write a string representation of this instance to <out>.
| setAlphaMode | ( | BaseParticleRenderer::ParticleRendererAlphaMode | am | ) |
| setColorBlendMode | ( | ColorBlendAttrib::Mode | bm, |
| ColorBlendAttrib::Operand | oa, | ||
| ColorBlendAttrib::Operand | ob | ||
| ) |
sets the ColorBlendAttrib on the _render_node
| setIgnoreScale | ( | bool | ignore_scale | ) |
Sets the "ignore scale" flag.
When this is true, particles will be drawn as if they had no scale, regardless of whatever scale might be inherited from above the render node in the scene graph.
This flag is mainly useful to support legacy code that was written for a very early version of Panda, whose sprite particle renderer had a bug that incorrectly ignored the inherited scale.
| setUserAlpha | ( | float | ua | ) |
sets alpha for "user" alpha mode
| write | ( | Ostream | out, |
| int | indent | ||
| ) |
Write a string representation of this instance to <out>.


{% extends 'base.html'%} {% load bootstrap4 %} {% block content %}
{{business.locale}}
{{business.business_number}}


I am a construction engineer who, after 11 years in the industry, decided to change gears and follow my passion for writing code. I am INTJ personality, a quick learner, and I work well as part of a team with both detail and big picture.
You can see my LinkedIn and Github accounts below:
A very wide array of jobs involving all aspects of running a small and successful construction company.
Managing small and medium projects as the main contractor; performing various tasks as necessary on the construction site.
Maintaining and improving production throughput in various areas. Developing VBA application to aggregate information from legacy systems.
Designing and developing websites for friends mainly in Wordpress and PHP.
Managing a small wedding photography business. Wedding album design and wedding photography.
Creating, maintaining, and updating website along with various other duties involved in small business ownership.
My interests vary widely, from coding, reading and meditation on the quiet side, through gaming, gardening and cooking to bouldering, cycling and Taekwondo on the active side.
I am a big fan of board games, my latest fascination being Terraforming Mars and Mansions of Madness. As soon as the winter is over I get my gardening supplies out and setup my little growing plot in the balcony, which provides me with endless supplies for cooking. I enjoy learning about and studying Eastern schools of thought, especially when being explained by Alan Watts. I mainly practice mindfullness meditation, but would occasionaly try something different. I'm also a couchsurfing host and a member of the Burning Man community.


Organizations and members can create an account absolutely free.
Simple and straight to the point. Save time on event management.
Start browsing your organizations upcoming events.
Third-year Masters of Professional Accounting
Fourth-year in Mathematics
Fourth-year in Physics and Astronomy


UI5con 2017 was all about the great Community around UI5 and their mind-blowing ideas paving the path of the framework’s future. With UI5 Evolution and the new SAPUI5 Demo Kit, the UI5 Development teams announced to target modularization, increase performance and leverage emerging Technologies. Community projects such as the custom control library UI5Lab and custom built features playing around with modern trends like mixed and augmented reality complemented the conference agenda. As a final Highlight, a toast was given with the particularly for UI5con@SAP brewed delicious "PullToRefresh IPA" which wowed the crowd!
This so far biggest UI5con ever thrived on the fun, open-minded atmosphere typical for UI5cons: enthusiastic people, rich discussions and entertaining "Anki Overdrive" races in the breaks. Originally initiated by the UI5 Community in March 2016, UI5con is meant to give UI5 developers and enthusiasts a common platform to meet face-to-face and discuss the latest innovations.
Now we’re looking forward to a breathtaking UI5con 2018, with loads of Community driven sessions – Call for Papers starting soon!


On January 29th at 8pm, people across Canada will be placing a light in their windows to symbolize their commitment to push back the darkness of ignorance and hate with the light of knowledge and friendship in their communities. Please join us as we make January 29th A Day To Push Back The Darkness
If using a candle, please use a battery-operated one - we want a light in your window, not a bonfire.


# The source root of this Component COMPONENT_ROOT=../.. # The root of the build system BS_ROOT=$(COMPONENT_ROOT)/build3 # Boostrap Build system definitions. include $(BS_ROOT)/defines.mk # Obtain the latest changelist that applied to a file or directory FILE_REV:=$(call PERFORCE_FUNC_GET_LASTCHANGENUM,my_source.c) DIR_REV:=$(call PERFORCE_FUNC_GET_LASTCHANGENUM,$(COMPONENT_ROOT)/...) # Finally, include the rules to make the build system go. include $(BS_ROOT)/rules.mk


i3- Open a new terminal window:
Super + Return- Create a new workspace:
Super + Shift + number- Switch to workspace number:
Super + number- Open new window horizontally:
Super + h- Open new window vertically:
Super + v- Open application (type out application name after executing command):
Super + D


--- layout: page title: countries / United Kingdom of Great Britain and Northern Ireland ---
| Party Status: | Party to the Nagoya Protocol. The UK’s ratification of the Nagoya Protocol does not extend to the 14 Overseas Territories or 3 Crown Dependencies |
| Entry into force on: | 22 Feb 2016 |
| Ratifiation on: | 22 May 2016 |
| Signatory: | Signed on 23 Jun 2011 |
| CBD Country Profile: | www.cbd.int/countries/?country=gb |
| 1 NBD |
3 CNA |
4 MSR |
15 PRO |
5 NMCC |
0 NDB |
0 IRCC |
0 CP |
0 CPC |
1 NR |


Stereotype Threat
October 26, 2014
In Claude M. Steele's 1999 article in The Atlantic, this line leapt out to me as exceptionally important: "A person has to care about a domain in order to be disturbed by the prospect of being stereotyped in it."
Stereotype threat is Steele's term for the phenomenon of diminished performance because of anxiety about being judged based on stereotypes related to the performance.  This is because of a stereotype about black americans underacheiving in fields like literary academia.
 The most obvious issue is that it can hinder performance. It creates anxiety in people related to factors that shouldn't bear on their performance. On an individual basis, this can be overcome. Enough experience with a given pursuit can give you the capacity you need to overcome almost any kind of anxiety. It's not fair, mind you. It's terrible that some people have to put in more effort than others simply because of large, blind social realities.
But the truly endemic problem that stereotype threat creates is that entire groups of people avoid entire fields of work because of the threshold of anxiety entailed by steretypes about the category of person they happen to be. In the tech world, this is starkly manifest. There are is a freakishly low ratio of women, black people, and hispanic people working in tech jobs in the US than there are in the general working population. Stereotype threat is one of the very real causes of this.
 She pointed out that in America, the only people who are invisible in public are white men. For everyone else, race or gender is something that is noticed.
That insight stuck with me. I'm a white guy in America, so in most contexts of my external traits are relatively invisible. What I'm saying or doing is generally the first thing someone notices about me, and that's a huge blessing. To paraphrase Martin Luther King, I have the good fortune of being judged by the content of my character rather than the color of my skin.
The phenomenon of stereotype threat that Steele identified is one of the most pressing problems of discrimination that faces our society today. A generation ago, we dispensed with many of the laws the prevent real equality in the US. What we need to do today is deal with the remaining ghosts of racist attitudes. These continue to weigh on the decisions people make about their lives; they dictate the domains they care about.
I hope that in every environment I work in, I can work to ensure that everyone is judged by what they bring to the present task. What's tragic is that there is enough racism left in this country to reduce the range of person who I am priveleged to find myself working beside.


EUR Futures: scope for extra losses
by Pablo PiovanoOpen interest in EUR futures markets rose by nearly 1.5K contracts on Friday according to preliminary readings from CME Group. In addition, volume increased by around 19.1K contracts, extending the erratic performance.
EUR/USD targets 1.10 and below
Friday’s negative price action in EUR/USD was on the back of rising open interest and volume, leaving the door open for extra losses in the near-term. That said, a test of the 1.10 neighbourhood and probably below remains well on the cards in the short-term horizon.


stack
monotonic deque
]
Leetcode 0084. Largest Rectangle in Histogram
https://leetcode.com/problems/largest-rectangle-in-histogram
Key insight: for given bar i
with value h
, how to find the biggest rectangle, which is ending with this bar? We need to find the previous smallest place, where value is less or equal than h
: that is smallest j
, such that j < i
and heights[j] >= heights[i]
. Ideal data structure for these type of problems is monostack: stack which has the following invariant: elements inside will be always in increasing order. To be more clear let us consired the following histogram [1,4,2,5,6,3,2,6,6,5,2,1,3]
. Let us go element by element and understand what is going on.
- Stack is empty, so just put first bar of our histogram into stack: so we have
stack = [1]
. (actually what we put inside are indexes of bars, not values, but here we look at values for simplicity). - Next we put bar
4
, and we have[1, 4]
now. - Next, we have bar
2
, which is less than4
. So, first we evaluate When we evaluateH
andW
: width and height rectangle we can construct, using last element of stack as height: they equal to4
and1
. Next, we extract4
and add2
to stack, so we have[1, 2]
bars in stack now. - Next bar is bigger than
2
, so just add it and we have[1, 2, 5]
- Next bar is bigger than
5
, so just add it and we have[1, 2, 5, 6]
- Next bar is
3
, so we need to extract some stuff from our stack, until it becomes increasing one. We extract6
, evaluate(H, W) = (6, 1)
and extract5
and evaluate(H, W) = (5, 2)
. Now we have[1, 2, 3]
in our stack. - Next bar is
2
, it is smaller thanstack[-1]
, so we again need to extract some stuff: we extract3
and have(H, W) = (3, 3)
and also we extract2
and have(H, W) = (2, 5)
. Note here, why exactly we haveW = 5
: because we keep in stack indexes of our bars, and we can evaluate width asi - stack[-1] - 1
. Now, we havestack = [1, 2]
- Next bar is
6
, so just put it to stack and we havestack = [1, 2, 6]
. - Next bar is
6
also, and we need to extract one last element from stack and put this new6
to stack.(H, W) = (6, 1)
. Note, that we have in stack[1, 2, 6]
again, but it is values, for indexes last index was increased by one. - Next bar is
5
, we extract last element from stack, have(H, W) = (6, 2)
and put it to stack, so we have[1, 2, 5]
now. - Next bar is
2
, so we again start to pop elements to keep increasing order:(H, W) = (5, 3)
for fisrt step and(H, W) = (2, 9)
for second step, nowstack = [1, 2]
. - Next bar is
1
, so we have(H, W) = (2, 10)
and then(H, W) = (1, 11)
andstack = [1]
. - Next bar is
3
, so we just put it to stack and have[1, 3]
in stack. - Next bar is
0
(we added it to process border cases), so we have(H, W) = (3, 1)
and(H, W) = (1, 13)
and finally stack is empty.
Complexity is O(n)
, where n
is number of bars, space complexity is O(n)
as well.
class Solution:
def largestRectangleArea(self, heights):
stack, ans = [], 0
for i, h in enumerate(heights + [0]):
while stack and heights[stack[-1]] >= h:
H = heights[stack.pop()]
W = i if not stack else i-stack[-1]-1
ans = max(ans, H*W)
stack.append(i)
return ans
See also similar problems with monotonic deque idea:
239. Sliding Window Maximum 496. Next Greater Element I 739. Daily Temperatures 862. Shortest Subarray with Sum at Least K 901. Online Stock Span 907. Sum of Subarray Minimums 1687. Delivering Boxes from Storage to Ports
Please let me know if you know more problems with this idea
If you like the solution, you can upvote it on leetcode discussion section: Problem 0084


The complete set of 170 icons in Linearicons Free v1.0.0 License: MIT License. You can use it for commercial projects, open source projects, or really just about whatever you want


jstack [ option ] pid jstack [ option ] executable core jstack [ option ] [server-id@]remote-hostname-or-IP
Options are mutually exclusive. Option, if used, should follow immediately after the command name. See OPTIONS.
jstack prints Java stack traces of Java threads for a
given Java process or core file or a remote debug server. For
each Java frame, the full class name, method name, 'bci' (byte
code index) and line number, if available, are printed. With the
-m option, jstack prints both Java and native frames of all
threads along with the 'pc' (program counter). For each native
frame, the closest native symbol to 'pc', if available, is
printed. C++ mangled names are not demangled. To demangle C++
names, the output of this command may be piped to c++filt.
If the given process is running on a 64-bit VM, you may need to
specify the -J-d64 option, e.g.:
jstack -J-d64 -m pid
NOTE - This utility is unsupported and may or may not
be available in future versions of the JDK. In Windows Systems
where dbgeng.dll is not present, 'Debugging Tools For Windows'
needs to be installed to have these tools working. Also,
PATH
environment variable should contain the
location of jvm.dll
used by the target process or
the location from which the Crash Dump file was produced.
For example, set
PATH=<jdk>\jre\bin\client;%PATH%
Mixed mode stack trace, the -m option, does not work with the remote debug server.


The menu RSA Cryptosystem contains the following commands and sub menus:
| Prime Number Test | Various tests for prime numbers. |
| Generate Prime Numbers | Generate two prime numbers. |
| Factorization of a Number | Factorize an integer into its prime factors. |
| RSA Demonstration | Tutorial for the RSA cryptosystem. |
| Signature Demonstration (Signature Generation) | Visualize the process of generating a digital signature. |
| Lattice Based Attacks on RSA | Execute lattice based attacks on RSA. |


{%extends "bootstrap/base.html" %} {% block content %}
Summary: You have annotated {{num_annotation}} sentences, compose of:
- {{num_unsentiment}} sentences have no sentiment
- {{num_neutral}} neutral dependency pair
- {{num_pos}} positive dependency pair
- {{num_negative}} negative dependency pair


{% extends 'dashboard-base.html' %} {% load crispy_forms_tags %} {% block content %} {% include 'messages.html' %}
| # | Name | Phone | Active | {% for team in teams %}|
|---|---|---|---|---|
| {{ forloop.counter }}. | {{ team.name }} | {{ team.phone }} | {{ team.email }} | {{ team.is_active | yesno | capfirst }} |


Justice League: Gal Gadot Further Explains Her Stance on the Snyder Cut
by Duane RichardsWonder Woman herself is shedding some light on her recent Snyder Cut support.
In an interview with CinéPop for Wonder Woman 1984, star Gal Gadot was asked about her feelings regarding Zack Snyder's director's cut of 2017's Justice League -- a project Gadot and her Justice League costars Ben Affleck and Jason Momoa recently showed support for with the #ReleasetheSnyderCut hashtag. Admitting that the movie suffered from "unfortunate" and "sad circumstances," Gadot explained, "I would have loved to see the finished cut of [Zack's], and I hope that one day we'll get to see it, but I don't know."
Click the button below to start this article in quick view.
Of particular interest is that both Gadot and Wonder Woman director Patty Jenkins revealed they haven't seen the Snyder Cut, which only fuels the ongoing debate over whether the edit even exists. Zack Snyder himself has shared apparent photographic evidence that it does, while Warner Bros. has been vague and slightly dismissive about the idea. Fans, meanwhile have speculated about its existence since the production of the film was taken over in its late stages by Joss Whedon.
Gadot's support for the director's cut has precedent, as it was Snyder who originally cast her in the iconic Wonder Woman role for 2015's Batman v Superman: Dawn of Justice. Gadot was considered a critical standout in a film that received otherwise negative reactions before taking center stage in 2017's massively successful Wonder Woman.
Directed by Patty Jenkins, Wonder Woman 1984 stars Gal Gadot as Diana, Chris Pine as Steve Trevor, Kristen Wiig as Barbara Minerva/Cheetah, Pedro Pascal and Natasha Rothwell. The film opens on June 5, 2020.
https://schema.orgBreadcrumbListListItem1Homehttps://www.cbr.com/ListItem2Movieshttps://www.cbr.com/category/movies/ListItem3Movie Newshttps://www.cbr.com/category/movies/news-movies/ListItem4Justice League: Gal Gadot Further Explains Her Stance on the Snyder Cuthttps://www.cbr.com/justice-league-gal-gadot-snyder-cut-stance/


{{ femaleName }} was a {{ jobTitle }} who loved technology. Although she loved parts of her job, she absolutely hated {{ tediousTask }} and {{ dirtyTask }} . So, {{ femaleName }} met with her life mentor {{ celebrity }} who told her to learn how to {{ uselessSkill }} with Thinkful. Thinkful didn't offer a course on {{ uselessSkill }} so she studied programming instead.
What a great decision! With her new skills, {{ femaleName }} built a(n) {{ adjective }} robot named {{ obnoxiousCelebrity }} that not only loved {{ dirtyTask }} but did it {{ hugeNumber }} times faster.


GOV.UK elements Colour
Always use the great.gov.uk colour palette.
Contents:
Colour contrast
The colour contrast ratio for text and interactive elements should be at least 4.5:1 as recommended by the W3C. Test your service to meet this standard.
Sass variables
Use Sass variables in case colour values need to be updated – find these in the GOV.UK frontend toolkit colours.scss file. Great.gov.uk overrides can be found in the export-elements colours.scss file.
Core colours
- GREAT Red should only be used for the GREAT logo.
- GREAT Blue is used for type where possible, if not black can be used.
- Flag Red is used for red lines and can be used in type.
- Stone has been introduced for use as a pale background colour on pages and tables.
- GREAT blue
- #1e1348
- $great-blue
- Flag red
- #b00d23
- $flag-red
- Stone
- #dfd5c5
- $stone
- White
- #ffffff
- $white
- GREAT red
- #e41f13
- $great-red
Supporting colours
- Black
- #000000
- $black
- Mid blue
- #00549f
- $mid-blue
- Grey
- #333333
- $grey
- Mid grey
- #999999
- $mid-grey
- Light grey
- #d8d8d8
- $light-grey
- Dark navy
- #160d37
- $dark-navy
Extended palette
Use for link and focus states.
- Active blue
- #006ccc
- $active-blue
- Aqua
- #007ea3
- $aqua
- Focus yellow
- #ffbf47
- $focus-yellow
$focus-colour
- Purple
- #4f0b7b
- $purple
Tints of stone
- Stone 90%
- #E2D9CB
- $stone-90
- Stone 40%
- #F2EEE8
- $stone-40
- Stone 80%
- #E5DDD1
- $stone-80
- Stone 30%
- #F5F2ED
- $stone-30
- Stone 70%
- #E9E2D6
- $stone-70
- Stone 20%
- #FCFBF9
- $stone-20
- Stone 60%
- #ECE6DC
- $stone-60
- Stone 10%
- #FDFDFC
- $stone-10
- Stone 50%
- #EFEAE2
- $stone-50


User Management - Admin
Active Users 42 | Approval 15
| Select | User | Contact details | Created | Status | Actions |
|---|---|---|---|---|---|
|
|
Suresh Loganathan Admin |
<EMAIL_ADDRESS>+91<PHONE_NUMBER> |
2013/08/12 | pending | |
SURESH LOGANATHANSURESH LOGANATHAN |
|||||
|
|
Arunkumar Karruppasamy Admin |
<EMAIL_ADDRESS>+91<PHONE_NUMBER> |
2013/08/12 | Active | |
|
|
Ananthan Guru Member |
<EMAIL_ADDRESS>+91<PHONE_NUMBER> |
2013/08/12 | Pending |


Multi Node Testing
Note
This module is experimental. This document describes how to use the features implemented so far. More features are coming in Akka Coltrane. Track progress of the Coltrane milestone in Assembla.
Multi Node Testing Concepts
When we talk about multi node testing in Akka we mean the process of running coordinated tests on multiple actor systems in different JVMs. The multi node testing kit consist of three main parts.
- The Test Conductor. that coordinates and controls the nodes under test.
- The Multi Node Spec. that is a convenience wrapper for starting the TestConductor and letting all nodes connect to it.
- The SbtMultiJvm Plugin. that starts tests in multiple JVMs possibly on multiple machines.
The Test Conductor
The basis for the multi node testing is the TestConductor. It is an Akka Extension that plugs in to the network stack and it is used to coordinate the nodes participating in the test and provides several features including:
- Node Address Lookup: Finding out the full path to another test node (No need to share configuration between test nodes)
- Node Barrier Coordination: Waiting for other nodes at named barriers.
- Network Failure Injection: Throttling traffic, dropping packets, unplugging and plugging nodes back in.
This is a schematic overview of the test conductor.
The test conductor server is responsible for coordinating barriers and sending commands to the test conductor clients that act upon them, e.g. throttling network traffic to/from another client. More information on the possible operations is availible in the akka.remote.testconductor.Conductor API documentation.
The Multi Node Spec
The Multi Node Spec consists of two parts. The MultiNodeConfig that is responsible for common configuration and enumerating and naming the nodes under test. The MultiNodeSpec that contains a number of convenience functions for making the test nodes interact with each other. More information on the possible operations is available in the akka.remote.testkit.MultiNodeSpec API documentation.
The setup of the MultiNodeSpec is configured through java system properties that you set on all JVMs that's going to run a node under test. These can easily be set on the JVM command line with -Dproperty=value.
- These are the available properties:
multinode.max-nodes
The maximum number of nodes that a test can have.
multinode.host
The host name or IP for this node. Must be resolvable using InetAddress.getByName.
multinode.port
The port number for this node. Defaults to 0 which will use a random port.
multinode.server-host
The host name or IP for the server node. Must be resolvable using InetAddress.getByName.
multinode.server-port
The port number for the server node. Defaults to 4711.
multinode.index
The index of this node in the sequence of roles defined for the test. The index 0 is special and that machine will be the server. All failure injection and throttling must be done from this node.
The SbtMultiJvm Plugin
The SbtMultiJvm Plugin has been updated to be able to run multi node tests, by automatically generating the relevant multinode.* properties. This means that you can easily run multi node tests on a single machine without any special configuration by just running them as normal multi-jvm tests. These tests can then be run distributed over multiple machines without any changes simply by using the multi-node additions to the plugin.
Multi Node Specific Additions
The plugin also has a number of new multi-node-* sbt tasks and settings to support running tests on multiple machines. The necessary test classes and dependencies are packaged for distribution to other machines with SbtAssembly into a jar file with a name on the format <projectName>_<scalaVersion>-<projectVersion>-multi-jvm-assembly.jar
Note
To be able to distribute and kick off the tests on multiple machines, it is assumed that both host and target systems are POSIX like systems with ssh and rsync available.
- These are the available sbt multi-node settings:
multiNodeHosts
A sequence of hosts to use for running the test, on the form user@host:java where host is the only required part. Will override settings from file.
multiNodeHostsFileName
A file to use for reading in the hosts to use for running the test. One per line on the same format as above. Defaults to multi-node-test.hosts in the base project directory.
multiNodeTargetDirName
A name for the directory on the target machine, where to copy the jar file. Defaults to multi-node-test in the base directory of the ssh user used to rsync the jar file.
multiNodeJavaName
The name of the default Java executable on the target machines. Defaults to java.
- Here are some examples of how you define hosts:
localhost
The current user on localhost using the default java.
user1@host1
User user1 on host host1 with the default java.
user2@host2:/usr/lib/jvm/java-7-openjdk-amd64/bin/java
User user2 on host host2 using java 7.
host3:/usr/lib/jvm/java-6-openjdk-amd64/bin/java
The current user on host host3 using java 6.
Running the Multi Node Tests
To run all the multi node test in multi-node mode (i.e. distributing the jar files and kicking off the tests remotely) from inside sbt, use the multi-node-test task:
multi-node-test
To run all of them in multi-jvm mode (i.e. all JVMs on the local machine) do:
multi-jvm:test
To run individual tests use the multi-node-test-only task:
multi-node-test-only your.MultiNodeTest
To run individual tests in the multi-jvm mode do:
multi-jvm:test-only your.MultiNodeTest
More than one test name can be listed to run multiple specific tests. Tab completion in sbt makes it easy to complete the test names.
Preparing Your Project for Multi Node Testing
The multi node testing kit is a separate jar file. Make sure that you have the following dependency in your project:
"com.typesafe.akka" %% "akka-multi-node-testkit" % "2.1.4"
If you are using the latest nightly build you should pick a timestamped Akka version from https://repo.akka.io/snapshots/com/typesafe/akka/akka-multi-node-testkit_2.12/. We recommend against using SNAPSHOT in order to obtain stable builds.
A Multi Node Testing Example
First we need some scaffolding to hook up the MultiNodeSpec with your favorite test framework. Lets define a trait STMultiNodeSpec that uses ScalaTest to start and stop MultiNodeSpec.
package sample.multinode
import org.scalatest.{ BeforeAndAfterAll, WordSpec }
import org.scalatest.matchers.MustMatchers
import akka.remote.testkit.MultiNodeSpecCallbacks
/**
* Hooks up MultiNodeSpec with ScalaTest
*/
trait STMultiNodeSpec extends MultiNodeSpecCallbacks
with WordSpec with MustMatchers with BeforeAndAfterAll {
override def beforeAll() = multiNodeSpecBeforeAll()
override def afterAll() = multiNodeSpecAfterAll()
}
Then we need to define a configuration. Lets use two nodes "node1 and "node2" and call it MultiNodeSampleConfig.
package sample.multinode
import akka.remote.testkit.MultiNodeConfig
object MultiNodeSampleConfig extends MultiNodeConfig {
val node1 = role("node1")
val node2 = role("node2")
}
And then finally to the node test code. That starts the two nodes, and demonstrates a barrier, and a remote actor message send/receive.
package sample.multinode
import akka.remote.testkit.MultiNodeSpec
import akka.testkit.ImplicitSender
import akka.actor.{Props, Actor}
class MultiNodeSampleSpecMultiJvmNode1 extends MultiNodeSample
class MultiNodeSampleSpecMultiJvmNode2 extends MultiNodeSample
class MultiNodeSample extends MultiNodeSpec(MultiNodeSampleConfig)
with STMultiNodeSpec with ImplicitSender {
import MultiNodeSampleConfig._
def initialParticipants = roles.size
"A MultiNodeSample" must {
"wait for all nodes to enter a barrier" in {
enterBarrier("startup")
}
"send to and receive from a remote node" in {
runOn(node1) {
enterBarrier("deployed")
val ponger = system.actorFor(node(node2) / "user" / "ponger")
ponger ! "ping"
expectMsg("pong")
}
runOn(node2) {
system.actorOf(Props(new Actor {
def receive = {
case "ping" => sender ! "pong"
}
}), "ponger")
enterBarrier("deployed")
}
enterBarrier("finished")
}
}
}
Things to Keep in Mind
There are a couple of things to keep in mind when writing multi node tests or else your tests might behave in surprising ways.
- Don't issue a shutdown of the first node. The first node is the controller and if it shuts down your test will break.
- To be able to use blackhole, passThrough, and throttle you must activate the TestConductorTranport by specifying testTransport(on = true) in your MultiNodeConfig.
- Throttling, shutdown and other failure injections can only be done from the first node, which again is the controller.
- Don't ask for the address of a node using node(address) after the node has been shut down. Grab the address before shutting down the node.
- Don't use MultiNodeSpec methods like address lookup, barrier entry et.c. from other threads than the main test thread. This also means that you shouldn't use them from inside an actor, a future, or a scheduled task.
Contents


Opens and initializes a Phidget Power Guard
|
error in (no error) error in can accept error information wired from VIs previously called. |
|
status status is TRUE (X) if an error occurred or FALSE (checkmark) to indicate a warning or that no error occurred. Right-click the error in control on the front panel and select Explain Error or Explain Warning from the shortcut menu for more information about the error. |
|
code code is the error or warning code. Right-click the error in control on the front panel and select Explain Error or Explain Warning from the shortcut menu for more information about the error. |
|
source source describes the origin of the error or warning. Right-click the error in control on the front panel and select Explain Error or Explain Warning from the shortcut menu for more information about the error. |
|
Device Info Information required to specify which Phidget to open |
|
Serial Number The device serial number |
|
Channel The channel index |
|
Port The hub port index |
|
Connection Selects whether to look for a Phidget on the Local machine, over a Remote network, or both (No Preference) |
|
Timeout (mSec) Timeout in milliseconds |
|
Over Voltage The voltage value Units: volts (V) SAF1000_0 (ver: 101, 102) Power Supply Protector: Min: 8 Max: 33 |
|
Fan Mode The fan mode value
SAF1000_0 (ver: 101, 102) Power Supply Protector: Def: FAN_MODE_AUTO |
|
Power Enabled The power enabled value. SAF1000_0 (ver: 101, 102) Power Supply Protector: Def: 0 |
|
Attached? Returns TRUE is the device successfully attached, or FALSE otherwise |
|
error out error out passes error or warning information out of a VI to be used by other VIs. |
|
status status is TRUE (X) if an error occurred or FALSE (checkmark) to indicate a warning or that no error occurred. Right-click the error out control on the front panel and select Explain Error or Explain Warning from the shortcut menu for more information about the error. |
|
code code is the error or warning code. Right-click the error out control on the front panel and select Explain Error or Explain Warning from the shortcut menu for more information about the error. |
|
source source describes the origin of the error or warning. Right-click the error out control on the front panel and select Explain Error or Explain Warning from the shortcut menu for more information about the error. |
|
Phidget ID Device # Identification |
|
Serial Number Return The device serial number |


B/W Bitplane(s): 7 6 5 4 3 2 1 0
Current Data Color Mode: Red Blue Green B/W
Bitplane B/W: 7 6 5 4 3 2 1 0
Replacement 0 Replacement 1 Neighbours Reconstruction
Replacement 0 Replacement 1 Neighbour Reconstruction


A few days ago, Seedsummit released a Term Sheet intended to be (or become) standard across Europe for early stage investment.
It’s been several days since the announcement and so far I haven’t seen much in-depth commentary on it (other than acknowledging its existence and how difficult it must have been to achieve consensus). That might be because the announcement seemed to come as a surprise, so perhaps folks haven’t had a chance to digest it yet. Or maybe nobody cares?
One post from the Guardian offered some criticism, but beyond that it’s all been a bit quiet. Since no-one else has posted any thoughts, I thought I’d go through the document and offer my opinions. I’ve put the notes in a more comprehensive post and summarised the main points here (mostly because going through a legal document is a little bit dreary).
There are a few of things that founders should be careful of. First is the liquidation preference, where founders should be getting the non-participating option (Option 1). Second is vesting, since founders probably want to adjust the values described. Third is how the option pool is set up (before/after the funding). Finally, the anti-dilution provisions don’t seem to provide any useful information so founders should check this carefully if they’re presented with it. For more detail on any of these points, see the relevant section in the detailed review.
The overall impression I got was that these are documents for dealing with VCs (edit: It seems an additional note was added to the download page to this effect). Unsurprising since it was put together by 21 VC firms from across Europe. Surprising because I’m guessing no Angel investors were involved, despite the term sheet being advertised for ‘early stage’ financing. Since Seedsummit is trying to build a network of european investors (and credit to them for that), I did find it a little odd that there didn’t seem to be any Angels listed as helping to create this document. Perhaps it’s because the Angels aren’t investing on a pan-european basis? I’d love to see a Series A term sheet for comparison and my gut feel is that the Seedsummit document has a lot more in common with Series A than with Angel docs. This does beg the question, what does ‘seed’ actually mean?
In 2009, I set up and ran the first iteration of Springboard (a seed accelerator). We were helping early-stage teams to get a product out the door and to start getting feedback from users (customer development). When teams came out of the programme, I considered them ‘seed-stage’, i.e likely to be ready for seed investment, wherever that may come from. Ideally, the team would have a version of the product that was being used by early adopters. The team would be adapting that product based on feedback, although they would likely have little/no revenue. That basically sums up what I picture in my head when I think of ‘seed-stage’.
Over the last week I’ve met several VCs from different firms and asked them directly what seed means to them. For each of them, seed-stage investing involves companies that have a product, customers and revenues. This was pretty much the case for all the VCs I spoke to. I wish I’d probed for more detail as to what kind of revenue/customer numbers they expect but never mind.
In any case, despite using the same language, there’s obviously a gap between the above viewpoints. I’m not suggesting either of them is right or wrong but I think it’s important to point out such differences, especially in the light of the new ‘standard’ term sheet.
In brief, founders should do their homework. In going through this document, I spent quite a while researching and there’s actually a lot of information out there about what the terms mean and the impact they might have. As we now have a European VC term sheet in the open it’ll make comparisons with US VCs a lot easier. Any major disparities will quickly be picked on by the popular startups who might go elsewhere to raise money. Indeed, the real test will be whether or not a ‘hot’ new startup uses these terms and as they stand, I doubt that will be the case. Founders will still need lawyers and VCs will still be willing to negotiate terms.
We’re not quite at the point-and-click stage for early stage financing but with more and more information being put into the open, it does become easier for startups to make better informed decisions.
If you haven’t already, you can go check my review of the Seedsummit terms now.
Did you find this useful? Upvote and comment on HN
Photo credit: Affärsbilder by Dan Eriksson on Flickr