Overview
Package
Class
Use
Tree
Deprecated
Index
Help
PREV
NEXT
FRAMES
NO FRAMES
All Classes
Hierarchy For Package storm.trident.testing
Package Hierarchies:
All Packages
Class Hierarchy
java.lang.
Object
java.util.
AbstractCollection
<E> (implements java.util.
Collection
<E>)
java.util.
AbstractList
<E> (implements java.util.
List
<E>)
java.util.
ArrayList
<E> (implements java.lang.
Cloneable
, java.util.
List
<E>, java.util.
RandomAccess
, java.io.
Serializable
)
storm.trident.testing.
MockTridentTuple
(implements storm.trident.tuple.
TridentTuple
)
storm.trident.operation.
BaseOperation
(implements storm.trident.operation.
Operation
)
storm.trident.operation.
BaseAggregator
<T> (implements storm.trident.operation.
Aggregator
<T>)
storm.trident.testing.
CountAsAggregator
storm.trident.operation.
BaseFilter
(implements storm.trident.operation.
Filter
)
storm.trident.testing.
TrueFilter
storm.trident.operation.
BaseFunction
(implements storm.trident.operation.
Function
)
storm.trident.testing.
Split
storm.trident.testing.
StringLength
storm.trident.testing.
TuplifyArgs
storm.trident.testing.
FeederBatchSpout
(implements storm.trident.testing.
IFeeder
, storm.trident.spout.
ITridentSpout
<T>)
storm.trident.testing.
FeederBatchSpout.FeederCoordinator
(implements storm.trident.spout.
ITridentSpout.BatchCoordinator
<X>)
storm.trident.testing.
FeederBatchSpout.FeederEmitter
(implements storm.trident.spout.
ITridentSpout.Emitter
<X>)
storm.trident.testing.
FeederCommitterBatchSpout
(implements storm.trident.spout.
ICommitterTridentSpout
<X>, storm.trident.testing.
IFeeder
)
storm.trident.testing.
FixedBatchSpout
(implements storm.trident.spout.
IBatchSpout
)
storm.trident.testing.
LRUMemoryMapState
<T> (implements storm.trident.state.
ITupleCollection
, storm.trident.state.map.
MapState
<T>, storm.trident.state.snapshot.
Snapshottable
<T>)
storm.trident.testing.
LRUMemoryMapState.Factory
(implements storm.trident.state.
StateFactory
)
storm.trident.testing.
MemoryBackingMap
(implements storm.trident.state.map.
IBackingMap
<T>)
storm.trident.testing.
MemoryMapState
<T> (implements storm.trident.state.
ITupleCollection
, storm.trident.state.map.
MapState
<T>, storm.trident.state.snapshot.
Snapshottable
<T>)
storm.trident.testing.
MemoryMapState.Factory
(implements storm.trident.state.
StateFactory
)
Interface Hierarchy
storm.trident.testing.
IFeeder
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
PREV
NEXT
FRAMES
NO FRAMES
All Classes
Copyright © 2014
The Apache Software Foundation
. All Rights Reserved.


Speech
School Reform Minister Nick Gibb speaks to the London Thames Maths Hub Primary Conference.
Good morning.
It’s a pleasure to be here today at the Harris Primary maths conference. This government’s education reforms have been the most radical for a generation. And the growth of the Harris Federation of academies and free schools to a chain of 36 primary and secondary schools has been one of the great successes of the last 5 years. Our approach to deliver greater autonomy for schools through academisation was based on clear evidence from around the world that in the most successful school systems schools are autonomous and accountable.
The Harris Federation is also part of another of the evidence-based approaches we have put at the heart of our education reforms - mathematics for mastery. In early years teaching, Harris schools use Singapore maths and beyond the early years, Harris primary schools have adopted the effective mathematics curriculum, which combines Singapore and Shanghai approaches, and use maths no problem textbooks.
As part of the second wave of the Shanghai teacher exchange, last week I was fortunate enough to observe a lesson at the Harris Primary Academy in Chafford Hundred, Essex, led by Lin Lei. In a 35 minute lesson, with all pupils facing the teacher and engaged throughout, Lin taught all of the pupils to carry out complex types of long multiplication through clear explanation of calculation methods.
Some of you may have already heard me tell that story (perhaps even more than once) since I observed the lesson last week! But I think that reflects something truly positive - that we are undergoing a transformation in our approach to maths and how it is taught in schools.
That transformation is so important, because our performance in maths had been stagnating over a number of years. From 2005 to 2010, while in opposition I visited hundreds of schools across the country. What I learnt from these visits was that few pupils at primary or secondary school knew their times tables. Long multiplication and long division were rarely taught, with inefficient methods such as the grid method for multiplication and chunking for long division commonplace in classrooms, neither of which are used in the Far East. When I showed visiting members of the Shanghai Municipal Education Commission they were bemused.
I have also spent time reviewing grade E and F scripts of all 3 main exam boards maths GCSEs . What this exercise revealed was that most of the problems came down to a lack of knowledge of how to carry out basic arithmetic: pupils couldn’t multiply numbers of more than 1 digit. This was a result of the approach to teaching maths.
For too long we set expectations too low for pupils. An approach of differentiation in primary schools saw classes being taught in different groups, pupils expected to progress at different rates and acceleration on to new topics for those doing well rather than consolidation. An over-emphasis on concepts at the expense of practice, fluency and, through that, understanding meant that too many pupils simply did not know how to perform calculations. Using textbooks became unpopular, with only 10% of maths teachers in England using a textbook for core teaching, compared to 70% in Singapore and 95% in Finland according to TIMSS 2011.
This stagnation was reflected in our international performance in maths. Coming 24th in the PISA maths tables in 2012 was equivalent to a 3 year difference between the performance of our 15-year-olds and those at the top of the table - in Shanghai. And take up of the study of maths post-15 in England was among the lowest throughout the OECD .
Education was failing pupils - too often those from poorer backgrounds - and denying them the opportunities that come with the study of maths. Only a solid grounding in the basics of maths will allow pupils to do well at the next level and proceed to further study such as A level. People with an A level in maths go on to earn 7 to 10% more than similarly educated people without the qualification and it opens doors to a whole range of interesting careers. We want to inspire young people to recognise the importance of maths and the opportunities it can offer, and continue studying it to the highest level so that they can compete with the best in the world and succeed throughout their education and careers.
That is why we have attached such importance to maths, along with STEM subjects more widely. We have introduced the 34 new maths hubs and £67 million announced by the Prime Minister for STEM teaching will improve the skills of 15,000 existing teachers, and recruit an additional 2,500 specialist maths and physics teachers over the next Parliament.
We have come a long way already. Here we are today talking about mastery - which embodies the idea that every pupil can do well and achieve high standards in maths. Mastery is the model of the high-performing Asian systems such as Shanghai, Singapore and South Korea. It delivers a meticulous approach to arithmetic, whole class teaching and focused 35 minute lessons. Frequent practice allows pupils to consolidate their understanding, and pupils are assisted through immediate and tailored in-class questioning and scaffolding techniques. Homework is frequent, and simply and quickly marked.
The mastery approach also uses high quality resources and teaching tools - especially textbooks. Great effort and collaboration goes towards perfecting lesson design, with close attention to effective teaching methods. Whole lessons are devoted to thorough teaching of small steps of calculation - the use of the zero, for example in long multiplication.
We have introduced a new national curriculum, which is more detailed and more demanding, to reflect the mastery approach.  In year 2, basic columnar addition and subtraction is studied, with carrying and borrowing in year 3. In year 2 the teaching of times tables begins, and pupils are expected to know all of the times tables up to 12 x 12 by year 4.
Instant recall of facts like times tables is crucial because the working memory is small and so they need to be committed to long term memory, as explained by Daniel Willingham in his book ‘Why don’t students like school’. Such recall from long term memory is essential to be able to add fractions, and perform long multiplication and division, which pupils will be taught in year 5 and year 6. The year by year approach sets out greater clarity and the focus on fluency in the essentials of maths allows time for pupils to practise more to ensure deep knowledge. We are also expecting the majority of pupils to move through programmes of study at roughly the same pace.
We have made important changes to testing. The new key stage 2 tests will assess pupils’ mastery of mathematics and the first of these new tests will be taken in summer 2016. At secondary level, reformed maths GCSEs will be more challenging qualifications, sat for the first time in 2017, with teaching beginning in September this year. While A levels will only introduce a small amount of new content, students will be required to have a deeper understanding of the mathematics they are taught. We have also focused on progression to A level, which has increased by 13% since 2010, meaning maths is now the most popular A level.
There is no doubt that we could not be delivering these reforms to maths without the work and dedication of schools and school groups like Harris and others who are also here today.
Through the maths hubs programme, you have been taking part in the Shanghai teacher exchange, which provides an important opportunity to learn from teachers in one of the best systems in the world, as you implement teaching for mastery in your schools. The most recent exchange came to an end on Friday, and was a resounding success. Across the maths hubs, schools are also trialling Singapore textbooks, which provide a coherent, structured programme and benefit teachers, pupils and parents.
The next step to help spread and embed mastery is to develop a cadre of 140 primary mastery experts, who will support 3,500 teachers across primary schools to introduce teaching for mastery of mathematics effectively.
I am grateful to all of you for being part of these reforms. They are an important example of how we have looked to the evidence of what works to deliver better outcomes to inform our policymaking. I am confident that the reward we reap from this approach will be a better quality maths teaching in our schools, higher standards of attainment among pupils and greater opportunities for them as a result.
Thank you.
Published: 27 March 2015


Gecode::Int::LDSB Namespace Reference
Symmetry breaking for integer variables. More...
Classes | |
| class | VariableMap |
| Map from variable implementation to index. More... | |
| class | Literal |
| A Literal is a pair of variable index and value. More... | |
| class | SymmetryObject |
| Implementation of a symmetry at the modelling level. More... | |
| class | VariableSymmetryObject |
| Implementation of a variable symmetry at the modelling level. More... | |
| class | ValueSymmetryObject |
| Implementation of a value symmetry at the modelling level. More... | |
| class | VariableSequenceSymmetryObject |
| Implementation of a variable sequence symmetry at the modelling level. More... | |
| class | ValueSequenceSymmetryObject |
| Implementation of a value sequence symmetry at the modelling level. More... | |
| class | SymmetryImp |
| Implementation of a single symmetry. More... | |
| class | VariableSymmetryImp |
| Implementation of a variable symmetry. More... | |
| class | ValueSymmetryImp |
| Implementation of a value symmetry. More... | |
| class | VariableSequenceSymmetryImp |
| Implementation of a variable sequence symmetry. More... | |
| class | ValueSequenceSymmetryImp |
| Implementation of a value sequence symmetry. More... | |
| class | LDSBChoice |
| Choice storing position and value, and symmetric literals to be excluded on the right branch. More... | |
| class | LDSBBrancher |
| Symmetry-breaking brancher with generic view and value selection. More... | |
Functions | |
| template<> | |
| ModEvent | prune< Int::IntView > (Space &home, Int::IntView x, int v) |
| template<> | |
| ModEvent | prune< Int::BoolView > (Space &home, Int::BoolView x, int v) |
| template<class View , int n, class Val , unsigned int a> | |
| void | postldsbbrancher (Home home, ViewArray< View > &x, ViewSel< View > *vs[n], ValSelCommitBase< View, Val > *vsc, SymmetryImp< View > **syms, int nsyms, BranchFilter< typename View::VarType > bf, VarValPrint< typename View::VarType, Val > vvp) |
| Post LDSB brancher. | |
| template<class T , class A > | |
| ArgArray< T > | dynamicStackToArgArray (const Support::DynamicStack< T, A > &s) |
| Convert a DynamicStack<T,A> into an ArgArray<T> | |
| std::pair< int, int > | findVar (int *indices, unsigned int n_values, unsigned int seq_size, int index) |
| Find the location of an integer in a collection of sequences. | |
| SymmetryImp< IntView > * | createIntSym (Space &home, const SymmetryHandle &s, VariableMap variableMap) |
| Create an integer symmetry implementation from a symmetry handle. | |
| SymmetryImp< BoolView > * | createBoolSym (Space &home, const SymmetryHandle &s, VariableMap variableMap) |
| Create a boolean symmetry implementation from a symmetry handle. | |
| template<class View > | |
| ModEvent | prune (Space &home, View x, int v) |
| Exclude value from variable view . | |
| template<> | |
| ModEvent | prune< Set::SetView > (Space &home, Set::SetView x, int v) |
Detailed Description
Symmetry breaking for integer variables.
Function Documentation
template<>
| ModEvent Gecode::Int::LDSB::prune< Int::IntView > | ( | Space & | home, | |
| Int::IntView | x, | |||
| int | v | |||
| ) | [inline] |
template<>
| ModEvent Gecode::Int::LDSB::prune< Int::BoolView > | ( | Space & | home, | |
| Int::BoolView | x, | |||
| int | v | |||
| ) | [inline] |
template<class View , int n, class Val , unsigned int a>
| void Gecode::Int::LDSB::postldsbbrancher | ( | Home | home, | |
| ViewArray< View > & | x, | |||
| ViewSel< View > * | vs[n], | |||
| ValSelCommitBase< View, Val > * | vsc, | |||
| SymmetryImp< View > ** | syms, | |||
| int | nsyms, | |||
| BranchFilter< typename View::VarType > | bf, | |||
| VarValPrint< typename View::VarType, Val > | vvp | |||
| ) | [inline] |
Post LDSB brancher.
template<class T , class A >
| ArgArray<T> Gecode::Int::LDSB::dynamicStackToArgArray | ( | const Support::DynamicStack< T, A > & | s | ) | [inline] |
Convert a DynamicStack<T,A> into an ArgArray<T>
Definition at line 39 of file sym-imp.hpp.
| std::pair< int, int > Gecode::Int::LDSB::findVar | ( | int * | indices, | |
| unsigned int | n_values, | |||
| unsigned int | seq_size, | |||
| int | index | |||
| ) |
Find the location of an integer in a collection of sequences.
Given an array indices of integers (of length n_values), which represents a collection of sequences each of size seq_size, find the location of the first occurrence of the value index. Returns a pair of sequence number and position within that sequence (both zero-based).
| SymmetryImp<IntView>* Gecode::Int::LDSB::createIntSym | ( | Space & | home, | |
| const SymmetryHandle & | s, | |||
| VariableMap | variableMap | |||
| ) |
| SymmetryImp<BoolView>* Gecode::Int::LDSB::createBoolSym | ( | Space & | home, | |
| const SymmetryHandle & | s, | |||
| VariableMap | variableMap | |||
| ) |
template<class View >
| ModEvent Gecode::Int::LDSB::prune | ( | Space & | home, | |
| View | x, | |||
| int | v | |||
| ) | [inline] |
Exclude value from variable view .
template<>
| ModEvent Gecode::Int::LDSB::prune< Set::SetView > | ( | Space & | home, | |
| Set::SetView | x, | |||
| int | v | |||
| ) | [inline] |


Experienced consultants lead and motivate, are proactive and deal with continuous challenges that are faced in business. They monitor company resources, enhance efficiency and productivity, reduce costs, minimize errors and risk – thereby optimizing results.
Together we can achieve great things, create a culture that embraces change and enable future growth to win in this ever changing marketplace.


Welcome to the online quiz center, register yourself and login to enjoy the quiz..
Login

Register

Logout

Profile

Leaderboard


@evanphx But worth keeping it going in the meantime for sure! 11/30/2016, 9:52:15 AM Favs: 0 Retweets: 0 link


July 12-15, 2017 :: Denver, Colorado
Three Day Conference with optional Workshop Day
GopherCon 2017 will be in Denver, Colorado again in 2017. The conference starts on July 13th, with an optional workshop day on the 12th. Our final day the 15th is the "Community Day".


To ask the Secretary of State for Transport, what steps his Department is taking to support British citizens driving in EU countries after 29 March 2019 who do not hold a green card.

06 Feb 2019 | Written questions | House of Commons | 214040


In short, Feed-buster is a service that enables better RSS/ATOM feed media importing into FriendFeed. Here is the result of using Feed-buster when importing feeds into FriendFeed:
Feed-buster is actually a collection of AppEngine services for remixing RSS and ATOM feeds. Currently, the only service is MediaInjection which injects media enclosure links into feed posts based on media present in the item description and content
Media enclosures are special RSS/ATOM tags that identify rich media content in feed posts. The Media injection service automatically inserts media enclosure tags into RSS/ATOM feeds that do not have them. The service scrapes feed posts for rich media, generates and inserts media tags back into the feed for each post, and outputs the resulting feed.
Why do this? Some feed-based applications, like FriendFeed, generate their UIs based on media present in feeds. These applications don't crawl the content of feed posts for media items, rather just look for special media tags that identify this media. Therefore, if no media tags are present, the UI will not contain any rich media like images and videos, and this causes bad user experience.
Currently, feed-buster scrapes images, Mp3 audio links, YouTube embedded videos and Vimeo embedded videos. Support for other media is on the way.
Media injection is a simple HTTP service: you pass it a feed URL in a GET request URL parameter, and it returns the modified feed as the result. Just replace FEED_URL with your RSS or ATOM feed URL in http://feed-buster.appspot.com/mediaInjection?inputFeedUrl=FEED_URL and use this URL as the new feed URL.
Or simply use this form to do the same thing:
Copy/paste the output URL and try the new feed out on the FriendFeed feedtest page!
Project homepage: Feed-buster on Google Code.
FriendFeed feedback room: feed-buster.
Twitter: @izuzak.
|
Powered by:
|


eix package_name- Search for installed packages:
eix --installed package_name- Search in package descriptions:
eix --description "description"- Search by package license:
eix --license license- Exclude results from search:
eix --not --license license


Step 1
Step 1 to the F layout is to create an image of how the website would be laid out, and how to make it pop out, especially to fit the shape of an 'F'.
Step 2
Step 2 to the F layout is to basically divide the content up into separate lines, paragraphs, as well as headlines in order to fit the 'F' layout. In a way, the content itself should literally look like an 'F', but it should not be abundantly clear.
Step 3
Step 3 to understanding the F layout itself through code, such as bolding and highlighting titles in order to make the rest of the content in that section pop out, as seen above.
Step 4
Step 4 should be consisting of touching it up and making sure that the content itself flows correctly, such as making sure that all the events or content is able to relate to one another without being too different, while staying similar.


VESPER is designed around cutting-edge HTML5 functionality and as such requires a modern web browser. The latest releases of Chrome, Opera (now WebKit based), Safari (for Mac), Firefox, and Internet Explorer (9 or above) are suitable.
There are five DWCA examples supplied in the "Example Data" tab, press the respective button to choose any of these files. If you’re using Chrome/Opera (which have implemented HTML5 local filesystems) the "Load Your Data" tab contains a button to load your own DWCA (a file browser should pop up).
After a quick initial loading to grab the DWCA's meta information, a small panel will appear detailing your next choices - it is basically a filter asking which data fields in the DWCA you'd like to analyse. Pick a field you’d like to use as a “label” in the taxonomy and map components – you may not have a choice here. Then pick which of the visualisations VESPER has deduced from the DWCA that the archive should be able to populate.
When you’re happy with your selected visualisations, press “Load” and wait anything from a second or two (HIBG) to 30 seconds or so (the ENA file) for parsing, and then your selected views should appear.
In the event of a fail/crash when loading data, in the first instance check your data set with GBIF's DWCA Validator. This will pick up problems related to the syntax of the data set i.e. whether fields are in the right place etc. VESPER is designed towards testing data quality when the data is syntactically valid. If your data set passes syntactic validation but still won't load in VESPER, get in touch with m.graham{at}napier.ac.uk.
Each visualisation panel has a close button in the top-right corner to remove that particular view. Pressing the close button of the “Controls" view kills all associated views for that data set. This effectively ends any more interaction with that data set (unless you load it again). Also, one of the sections in the "Controls" accordion contains buttons to launch new view instances. The drag bar at the top of each visualisation allows it to be moved around the browser window.
In all components, a left mouse-click navigates and a right mouse-click selects. The map component has some extra selection options – press the circle, square, polygon icons to start selecting groups by drawing shapes around them. Selections in one component are reflected in the other visible components, so a selection of a group on the map will show where these specimens occured in the timeline and in a taxonomy (assuming there is data for these views as well).
The taxonomy view (or tree viewer if you prefer) comes in two flavours. The Normalised Taxonomy is calculated from parent/child ids when they are available in a data set. Such taxonomies often have a lot of synonyms. The Denormalised Taxonomy is calculated from explicitly named kingdom/family/genus etc fields in the DWCA data set and the specimens are added at the bottom of this structure. Apart from this difference, both taxonomies are displayed and interacted with in the same way.
There's a control panel with expandable sections for controlling various aspects of the taxonomy view. The first section (Space Allocation) decides how space is apportioned in the tree. Either Bottom-Up, where each taxon has a size according to it's number of eventual leaf taxa, or Top-Down where space is divided equally at the root between immediate sub-taxa and the process recurses down the taxonomy. In practice, the third option, Bottom-Up Log is often best, it gives each taxon space according to its number of leaf taxa, but on a logarithmic scale. This means large taxa are still clearly shown as larger but don't squeeze smaller taxa out of space.
The second section controls whether the taxonomy is drawn Centre-Out (also known as a sunburst) or from Left-to-Right (a.k.a. an icicle plot).
The third section has various options for sorting taxa at each level. Note in the centre-out view, the first taxon according to the current sort is at 12 o'clock.
There are a final pair of controls for visualising ranks within the taxonomy if using a Normalised Taxonomy. The first is a button that selects all taxa that have ranks that are not within GBIF's controlled vocabulary for ranks. The second is a checkbox that colours nodes according to their rank, this can be used to give an indication of whether ranks are used consistently or there is skipping of ranks within the structure.
The timeline view is a bar chart of available data for when specimens were collected. The range slider at the bottom of the timeline allows zooming in on a particular time period, which often reveals annual trends. Individual bars can be selected directly.
The Map plots associated longitude and latitude data found for each record in the data set. The default layer is a clustered view of records which change when the map is zoomed in or out, and are coloured according to the proportion of selected records in that cluster. Marker clusters can be selected directly (right mouse-click) or otherwise the circle/rectangle/polygon shape selectors used to select records within areas of the map. There is a second layer of points showing every individual record position on the map that can be activated, but on this layer the individual points cannot be selected, the shape selectors must be used.
The taxa distribution view is a bar chart like the timeline view. Here though the view is of the number of immediate sub-taxa of each taxon. Normally, this follows a hollow curve distribution: most taxa have relatively few immediate sub-taxa, while a few taxa have many immediate sub-taxa. This view can show whether a catch-all taxa has been implemented within the taxonomy.
A simple tabular display of which fields are empty across the record set. Sub-divided into missing data by view as well, it can show if a particular type of data has been omitted.
A simple input that takes a record ID and outputs the associated fields in a table. If the table contains other IDs these can be clicked to see the details for that record.
Another simple input that searches the field used as the 'label' for the taxa (selected when the data set was loaded). It scans and selects every record that has a partial 'label' match with the input string so can be used to find known taxa quickly. It also operates on synonyms and specimens as well. The Keystroke Search checkbox is best unticked in large data sets for speed reasons.
As well as launching other views, this widget serves a couple of special purposes accessed through its other sections. The second section (Current Selections) has options for manipulating the current selection. Invert and Clear are self-explanatory. Save takes advantage of the HTML5 FileWriter API if present to output the IDs of currently selected records to another browser tab. These can then be saved for use in an external application.
The third section (Taxonomy Comparison) in this control contains a single button. Pressing it marks this taxonomy as in preparation for a name-based comparison with another taxonomy (VESPER can have several data sets open at once, memory is the ultimate barrier to the number and size). In the other taxonomy's Controls view open the same section and select this button to compare the two. It works by matching stems between the two name sets, and as a result is not 100% accurate, and not to be taken as a replacement for taxonomic name reconciliation services. However, as a quick quality guide it can rapidly compare large data sets.


Two Wolves fans arrested for homophobic abuse
The Premier League club has strongly condemned the behaviour of the supporters during Sunday’s draw away to Brighton.
by The42 TeamWOLVES HAVE CONFIRMED two arrests were made for homophobic abuse during Sunday’s Premier League match at Brighton and Hove Albion.
The club have strongly condemned the behaviour of the individuals involved and are offering their full support to Sussex Police in a criminal investigation.
Wolves drew 2-2 at AMEX Stadium on Sunday, as the Premier League this weekend celebrated equality and diversity within the game with its Stonewall Rainbow Laces campaign, which aims to celebrate LGBT people within sport.
“Our ethos at Wolves is about being ‘One Pack’ — an attitude our supporters are very passionate about and that extends to our relationships across the football community, regardless of rivalries on the pitch,” a statement on Wolves’ official website read.
The arrests follow on from Everton confirming they were investigating alleged homophobic chants that were reported during a 3-1 victory over Chelsea at Goodison Park on Saturday.


action
Value: action id (string)
Assign a click action. See Actions & UI.
aiNode
Value: node id (string)
Declare mesh to be an AI node. This removes the mesh from the scene. See AI.
aiSpawn
Value: none
Declare mesh to be an AI spawn. This removes the mesh from the scene. See AI.
animation
Value: animation id (string)
Assign a global animation script. See Controlling Animations.
bottom
Value: absolute offset (number or percentage suffixed with %
) or variable (:variable:)
Align UI element to the bottom of the screen. See UI Alignment.
cacheMaterial
Value: none
Save mesh material to AssetsService
. Material can be retrieved in-code using AssetsService.getMaterial(materialName)
. Material is disposed on scene change.
camera
Value: camera id (string)
Declare mesh to be a camera. This removes the mesh from the scene. See Camera.
fullscreen
Scale mesh to cover the entire screen based on camera position and FOV. This effect is continuous and may affect performance.
Note: If fullscreenOffset
is not defined, object will be scaled continously. This may severely affect framerate.
fullscreenOffset
Value: constant offset (number)
Offset at which camera is assumed to be located.
fullscreenPreserveRatio
Value: none
Preserve scale ratio when applying fullscreen
effect.
gameObject
Value: game object id (string)
Declare mesh to be a game object. See Game Objects.
if
Value: value (string) or variable (:variable:)
Show mesh only if value is truthy.
ifNot
Value: value (string) or variable (:variable:)
Show mesh only if value is falsy.
label
Value: text (string) or variable (:variable:)
Declare mesh to be a label placeholder. This removes the mesh from the scene. See Actions & UI.
labelFont
Value: font id (string)
Assign font family to a label
. Font must be defined using GameInfoService.font
. Falls back to GameInfoService.config.fonts.default
.
labelSize
Value: font size (number)
Define font size for label
. Default is 1.0
.
labelAlign
Value: left
, center
, right
Define font alignment for label
. Default is center
.
labelColor
Value: color (string, prefixed with #
)
Define font color for label
. Default is #ffffff
. Color value must be compatible with Three.Color
.
labelOutlineColor
Value: color (string, prefixed with #
)
Define outline color for label
. If not defined, outline is not added. Color value must be compatible with Three.Color
.
left
Value: absolute offset (number or percentage suffixed with %
) or variable (:variable:)
Align UI element to the left of the screen. See UI Alignment.
material
Value: material id (string) or variable (:variable:)
Assign material to mesh. Material must be defined using AssetsService.saveMaterial
or cacheMaterial
.
navmap
Value: none
Declare mesh to be a navmap. This removes the mesh from the scene. See Views & Scenes and Physics.
right
Value: absolute offset (number or percentage suffixed with %
) or variable (:variable:)
Align UI element to the right of the screen. See UI Alignment.
navpath
Value: navpath id (string)
Declare mesh to be a navpath. See SceneService.parseScene#navpath. If defined, mesh is only added to the scene if value matches the current parseScene
navpath value.
rotateX / Y / Z
Value: angular velocity (number)
Rotate mesh.
scroll
Value: scroll container id (number)
Assign mesh to a scroll container. Meshes in a container can be scrolled by panning.
shader
Value: shader id (string)
Assign shader to mesh. Shader must be defined using GameInfoService.shader
.
shading
Value: basic
, normal
, depth
, lambert
, phong
, standard
, physical
, toon
, matcap
(string) or variable (:variable:)
Convert default MeshStandardMaterial
to another material type.
slideshow
Value: none
Declare mesh to be a slideshow. Slideshow mesh UV map is split into X/Y panels and shifts over time. Requires either slidesX
or slidesY
.
slidesX
Value: slide count (number)
Amount of horizontal UV slides. Default is 1.0
;
slidesY
Value: slide count (number)
Amount of vertical UV slides. Default is 1.0
;
surface
Value: surface id (string)
Declare mesh to be of specific surface type. Surface handler must be registered using PhysicsService.registerSurfaceHandler
. See Physics.
top
Value: absolute offset (number or percentage suffixed with %
) or variable (:variable:)
Align UI element to the top of the screen. See UI Alignment.


--- layout: post title: Two tips for working with databases in Rails post_id: 242 categories: - tips & tricks date: 2005-12-13 19:13:00.000000000 -07:00 author: Jamis permalink: 2005/12/13/two-tips-for-working-with-databases-in-rails.html ---
First tip: I’ve found recently that if I have a boolean field in the database that is being used to mark whether some event occurred (referrals.pending
, or feeds.subscribed
) it is often more effective to make the field a datetime
and record the moment that the event occurred. Then, a NULL
can be used to indicate that the event has not yet occurred. Thus, you have referrals.applied_at
with a method on Referral
like this:
1 2 3 |
def pending? applied_at.nil? end |
This gives you the capability down the road to not only report whether the event occurred, but how frequently over various periods of time.
The second tip is handy when you’re working on a migration. I find that the process (for me) works like this:
(Repeat as necessary.) However, being the imperfect programmer that I am, I find that I often implement the #down
method incorrectly, forgetting to drop a table or remove a column. Thus, when I try to run the migration again, it fails saying that the table/column already exists.
Using script/console
and ActiveRecord::Schema, it becomes a cinch to clean up the artifacts:
1 2 3 4 5 |
ActiveRecord::Schema.define do drop_table :foos remove_column :bars, :blitz remove_column :bars, :things end |
And if you have the verbose_migrations plugin installed, you can also get some very useful output describing what was done and how long it all took.


An Engine component represents the entire Catalina servlet container. A single instance of an Engine component is configured for each Service, to receive all requests received by one or more Connector components. This element must be nested immediately after the Connector elements, inside the owning Service element.
Request processing Valves that are nested here will be executed for every request received from every Connector configured within this service.
All implementations of the Engine component support the following attributes:
| Attribute | Description |
|---|---|
className |
Java class name of the implementation to use. This class must
implement the org.apache.catalina.Engine interface. If
no class name is specified, the standard implementation will be
used (org.apache.catalina.core.StandardEngine ).
|
defaultHost |
The default host name, identifying the Host to which requests from unidentified remote hosts will be directed. |
name |
The logical name of this engine. The name selected is arbitrary, but it is required. |
The standard implementation of the Engine component also supports the following attributes:
| Attribute | Description |
|---|---|
debug |
The level of debugging detail logged by this Engine to the associated Logger, with higher numbers generating more detailed output. If not specified, the debugging detail level will be set to zero (0). |
You can attach one or more of the following utility components by nesting a corresponding declaration inside your Engine element. Unless overridden by a utility component of the same name being nested in a Host or Context element, the utility components you declare here will be shared among all virtual hosts and web applications running in this Engine:
When you run a web server, one of the output files normally generated is an access log, which generates one line of information, in a standard format, for each HTTP request that was received, and responded to, by the web server. Catalina includes an optional Valve implementation that can create access logs in the same standard format created by web servers, or in any custom format desired.
You can ask Catalina to create an access log for all requests to any web application for any Host, by nesting an element like this inside your Engine element:
<Engine name="engine" ...> ... <Valve className="org.apache.catalina.valves.AccessLogValve" prefix="catalina_access_log." suffix=".txt" pattern="common"/> ... </Engine>
See Access Log Valve for more information on the configuration options that are supported.
If you have implemented a Java object that needs to know when this Engine
is started or stopped, you can declare it by nesting a
<Listener>
element inside the <Engine>
element. The class you specify in the className
attribute
of this Listener must implement the
org.apache.catalina.LifecycleListener
interface, and it will be
notified about the occurrence of the corresponding lifecycle events.
Configuration for such a listener might look like this:
<Engine name="engine" ...> ... <Listener className="com.mycompany.MyEngineListener"/> ... </Engine>
You can ask Catalina to check the IP address, or host name, of an incoming request for the entire servlet container against a list of "accept" and "deny" filters, which are defined using the Regular Expression syntax supported by the jakarta-regexp regular expression library system. Requests that come from remote locations that are not accepted will be rejected with an HTTP "Forbidden" error. Example filter declarations:
<Engine name="engine" ...> ... <Valve className="org.apache.catalina.valves.RemoteHostValve" allow="*.mycompany.com,www.yourcompany.com"/> <Valve className="org.apache.catalina.valves.RemoteAddrValve" deny="192.168.1.*" ... </Engine>
See Remote Address Filter or Remote Host Filter for more information on the syntax of these filters, and the logic that is applied when they are executed.


Setting a valid SSL certificates for local development
July 19, 2019
Overview
The web is quickly moving towards HTTPS everywhere
. Whether providers like it or not, they have to adopt HTTPS
for all their traffic in the near future.
It’s no longer acceptable to use HTTP
, even browsers like Google, Mozilla .. have been working for a long time on a user interface that negatively reinforces HTTP and positively reinforces secure HTTPS.
You can read more about “HTTPS Everywhere” here.
It’s recommended to enhance our servers’ security, however, that means that HTTP requests will be rejected by servers configured to accept only HTTPS. This poses a problem for developers who use a local development environment because all of them run on http://localhost
.
If you don’t want to run into a situation where your local development environment requests to the server start getting rejected, follow these steps to secure your local environment.
How SSL works
Since HTTPS
uses SSL
protocol to secure the communication between clients and server, let’s see how SSL works before going deeper into technical details.
SSL fundamentally works with the following concepts:
-
Asymmetric Cryptography uses a key pair for data encryption/decryption named
public
andprivate
keys.Every server has his own key pair and any one who wants to send data(requests) to that server should encryt it with the public key(also known as digital certificate:public key + other information) of that server. Like that only the one who has the private key can decrypt the data . In https, asymmetric cryptography is used to initiate the communication between server and client which is known as SSL handshake. In handshake stage server and client exchange another key which is the secret key of symmetric cryptography. -
Symmetric Cryptography uses only one key for data encryption/decryption. In HTTPS, symmetric encryption is used to encrypt all the communication between server and client and the reason is that asymmetric encryption is more resource intensive. To achieve an SSL communication we need to set an
infrastructure
that includes roles, policies, and procedures needed to create, manage, distribute, use, store, and revoke digital certificates and manage public key encryption.This infrastructure is calledPKI(Public Key Infrastructure)
.
Step1: Root CA(Certificate Authority)
As a demonstration, I decided to secure a local nginx application
and take advantages of a PKI(Public Key Infrastructure)
by creating a digital certificate for the application using Openssl tool and enabling ssl in Nginx configuration.
You will find several articles detailing instructions on how HTTPS can be implemented on localhost but browsers will throw an "NET::ERR_CERT_COMMON_NAME_INVALID"
error every time you try to access to the application and you need to accept it as an exception .
The reason is that the certificate used by the application is unknown for the browser and it should be signed by a known CA
.
You can try the following steps by yourself using our Katacoda scenario .
So first step is to create a Root CA
for development purposes instead of buying one from CA providers like Symantec or DigiCert.That CA can be used after that to sign any number of certificates we want.
-
First of all we have to prepare a folder to store all our CA data (we assume that Nginx is installed and we have /etc/nginx folder ) :
$ mkdir /etc/nginx/pki
$ cd /etc/nginx/pki
$ mkdir -p db/ca.db.certs
$ mkdir config
$ mkdir certificats
$ echo ‘01’> db/ca.db.serial
$ cp /dev/null db/ca.db.index
-
After that we need to add
config/ca.config
file that will be used by openssl when signing certificates with our CA :
-
Next step is to create the private key of our CA certificate :
$ openssl genrsa -des3 -out certificats/ca.key 2048
Command Explanation :
genrsa generate private RSA key
-des3 encrypt the key with DES
-out <file> output file of the RSA key
2048 Bitssize of the key
-
Using this private key we will create a self-signed root certificate :
$ openssl req -new -x509 -days 3000 -key certificats/ca.key -out certificats/ca.crt
Command Explanation :
req create a certificate signing request
-new create a new signing request
-x509 output a self signed certificate instead of a certificate request
-days <n> number of days to certify the certificate for
-key <file> specifies the private key file
-out <file> self signed root ca certificate
-
Now let’s generate the DER file that will be imported in browsers :
$ openssl x509 -in certificats/ca.crt -outform DER -out certificats/ca.der
Command Explanation :
req create a certificate signing request
-new create a new signing request
-x509 output a self signed certificate instead of a certificate request
-days <n> number of days to certify the certificate for
-key <file> specifies the private key file
-out <file> self signed root ca certificate
Step2: Server certificate (singed by the ca)
-
Same thing as the CA we need to create a private key first for our server certificate :
$ openssl genrsa -out certificats/nginx.key 2048
Command Explanation :
genrsa generate private RSA key
-out <file> output file of the RSA key
2048 Bitssize of the key
- To obtain an SSL certificate we need to use OpenSSL to create a certificate signing request (CSR) that can be sent to a Certificate Authority (CA) :
The CSR contains the common name(s) we want our certificate to secure, so we need to make sure when writing the common name which is the domain name that our ca will secure.
In order for a CSR to be created, it needs to have a private key from which the public key is extracted. This can be done by using an existing private key or generating a new one. Because of the security issues associated with using an existing private key, it’s recommended to generate a brand new private key whenever we create a CSR. Because it’s just an example I’m using an existing private key.
> $ openssl req -days 365 -new -key certificats/nginx.key -out certificats/nginx.csr
Command Explanation :
req create a certificate signing request
-days <n> number of days to certify the certificate for
-new create a new signing request
-key <file> specifies the private key file
-out <file> output file of CA CSR
-
Finally let’s sign our Nginx certificate with CA that we made :
$ openssl ca -config config/ca.config -out certificats/nginx.crt -infiles certificats/nginx.csr
Command Explanation :
ca certificate authority management
-config <file> use the given openssl config file
-out <file> output file (signed certificate)
-infiles <file> input file (the CSR)
Step3: Certificate installation
-
Now we should have 3 files in /etc/nginx/certificats which are nginx.crt, nginx.csr and nginx.key (copy them to /etc/nginx/ssl or use them directly from the pki folder):
-
Next step is enabling ssl connexion in Nginx configuration file which is “/etc/nginx/sites-available/default “ , so open the file and uncomment those lines :
listen 443 ssl default_server;
listen [::]:443 ssl default_server;
- After that add those lines :
ssl_certificate /etc/nginx/pki/certificats/nginx.crt;
ssl_certificate_key /etc/nginx/pki/certificats/nginx.key;
-
To save changes we need to restart Nginx service by this command :
$ service nginx restart
It can fail if the generated certificate and key are not well formed.
After that we have to import der file of our ca into mozilla browser as a trusted authority .
Once it’s imported we can access to our url application with https and Green Lock
in our case it is https://localhost
where localhost
is the common name that I gave for the nginx.crt and nginx.csr.


@(ciphertexts: Option[String], messages: Option[String]) @main("Encode") {
This logic is designate to break one time pad cipher, which uses the same key to encrypt all messages. Put multiple ciphertexts, encoded with the same key, in the textarea below. Each row should contain one ciphertext.


| tiff2pdf - convert a TIFF image to a PDF document |
| tiff2pdf [ options ] input.tiff |
| tiff2pdf opens a TIFF image and writes a PDF document to standard output. |
| The program converts one TIFF file to one PDF file, including multiple page TIFF files, tiled TIFF files, black and white. grayscale, and color TIFF files that contain data of TIFF photometric interpretations of bilevel, grayscale, RGB, YCbCr, CMYK separation, and ICC L*a*b* as supported by libtiff and PDF. |
| If you have multiple TIFF files to convert into one PDF file then use tiffcp or other program to concatenate the files into a multiple page TIFF file. If the input TIFF file is of huge dimensions (greater than 10000 pixels height or width) convert the input image to a tiled TIFF if it is not already. |
| The standard output is standard output. Set the output file name with the -ooutput.pdf option. |
| All black and white files are compressed into a single strip CCITT G4 Fax compressed PDF, unless tiled, where tiled black and white images are compressed into tiled CCITT G4 Fax compressed PDF, libtiff CCITT support is assumed. |
| Color and grayscale data can be compressed using either JPEG compression, ITU-T T.81, or Zip/Deflate LZ77 compression. Set the compression type using the -j or -z options. JPEG compression support requires that libtiff be configured with JPEG support, and Zip/Deflate compression support requires that libtiff be configured with Zip support, in tiffconf.h. Use only one or the other of -j and -z. |
| If the input TIFF contains single strip CCITT G4 Fax compressed information, then that is written to the PDF file without transcoding, unless the options of no compression and no passthrough are set, -d and -n. |
| If the input TIFF contains JPEG or single strip Zip/Deflate compressed information, and they are configured, then that is written to the PDF file without transcoding, unless the options of no compression and no passthrough are set. |
| The default page size upon which the TIFF image is placed is determined by the resolution and extent of the image data. Default values for the TIFF image resolution can be set using the -x and -y options. The page size can be set using the -p option for paper size, or -w and -l for paper width and length, then each page of the TIFF image is centered on its page. The distance unit for default resolution and page width and length can be set by the -u option, the default unit is inch. |
| Various items of the output document information can be set with the -e, -c, -a, -t, -s, and -k options. Setting the argument of the option to "" for these tags causes the relevant document information field to be not written. Some of the document information values otherwise get their information from the input TIFF image, the software, author, document name, and image description. |
| The Portable Document Format (PDF) specification is copyrighted by Adobe Systems, Incorporated. |
| -ooutput-file |
| Set the output to go to file output-file |
| -j |
| Compress with JPEG (requires libjpeg configured with libtiff). |
| -z |
| Compress with Zip/Deflate (requires zlib configured with libtiff). |
| -qquality |
| Set the compression quality, 1-100 for JPEG. |
| -n |
| Do not allow data to be converted without uncompressing, no compressed data passthrough. |
| -d |
| Do not compress (decompress). |
| -i |
| Invert colors. |
| -ppaper-size |
| Set paper size, eg "letter", "legal", "A4". |
| -u[i|m] |
| Set distance unit, i for inch, m for centimeter. |
| -wwidth |
| Set width in units. |
| -llength |
| Set length in units. |
| -xxres |
| Set x/width resolution default. |
| -yyres |
| Set y/length resolution default. |
| -r[d|o] |
| Set d for resolution default for images without resolution, o for resolution override for all images. |
| -f |
| Set PDF "Fit Window" user preference |
| -eYYYYMMDDHHMMSS |
| Set document information date, overrides image or current date/time default, YYYYMMDDHHMMSS. |
| -ccreator |
| Set document information creator, overrides image software default. |
| -aauthor |
| Set document information author, overrides image artist default |
| -ttitle |
| Set document information title, overrides image document name default |
| -ssubject |
| Set document information subject, overrides image image description default |
| -kkeywords |
| Set document information keywords. |
| -h |
| List usage reminder to stderr and exit. |
| The following example would generate the file output.pdf from input.tiff. |
| tiff2pdf -o output.pdf input.tiff |
| The following example would generate PDF output from input.tiff and write it to standard output. |
| tiff2pdf input.tiff |
| The following example would generate the file output.pdf from input.tiff, putting the image pages on a letter sized page, compressing the output with JPEG, with JPEG quality 75, setting the title to "Document", and setting the "Fit Window" option. |
| tiff2pdf -p letter -j -q 75 -t "Document" -f -o output.pdf input.tiff |
| Please report bugs via the web interface at |
| http://bugzilla.remotesensing.org/enter_bug.cgi?product=libtiff |
| libtiff(3), tiffcp(1), tiff2ps(1) |


Beryl Reid's panel show appearances
Beryl Reid (born 1919-06-17[ref]) has appeared in 10 episodes between 1965-1969. Beryl Reid on IMDB. Beryl Reid on Wikipedia.
- 1969-04-01 / Petticoat Line
- 1968-12-17 / Petticoat Line
- 1968-03-25 / Petticoat Line
- 1968-01-08 / Petticoat Line
- 1967-12-22 / Just A Minute
- 1967-10-02 / Petticoat Line
- 1965-11-18 / Petticoat Line
- 1965-11-11 / Petticoat Line
- 1965-10-21 / Petticoat Line
- 1965-10-14 / Petticoat Line


The heat builds as the fires burn in Australia
As firefighters continue to battle bushfires, another heatwave is about to sweep the country.
The Australia Bureau of Meteorology (BoM) is forecasting a heatwave across the northern half of the country this week as firefighters continue to battle bushfires.
The heat began this weekend across northern areas of Western Australia (WA) and the Northern Territory (NT), with some regions experiencing extreme heatwave conditions.
More:
The BoM states: "Low intensity to severe heatwave conditions are forecast from the west coast of WA, across the central and northern parts of Australia and into northern and eastern New South Wales (NSW) for Monday, Tuesday and Wednesday."
Over the weekend, firefighters took advantage of improved weather conditions, as winds eased across areas of NSW. The lighter winds also came with increased moisture in the air, which allowed fire crews to carry out back-burning.
The respite is short-lived, however, as the encroaching heatwave will add more fuel to the burning fires.
More than 100 fires were still burning across NSW on Sunday, including the massive Gospers Mountain blaze, which is expected to burn for weeks.
Victoria state has declared a total fire ban for some areas beginning on Monday, ahead of the extremely high temperatures and increasing winds.
Andrew Crisp, the commissioner for Emergency Management Victoria (EMV), said "the hot, dry and windy conditions mean fires could start anywhere and without warning".
On Tuesday, a number of districts in southern and central NSW are expected to experience severe fire danger. The impending heatwave will see temperatures in some areas, including western Sydney, soar above 40 degrees Celsius.
"It looks likely we'll see the next big peak day on Tuesday, with a number of districts likely to experience severe fire danger," said BoM meteorologist Diana Eadie.
The BoM said some inland areas, such as Bathurst and Orange, could see record temperatures for December. Westerly winds could also increase the smoke haze for Sydney and surrounding areas later in the week.
As the heatwave eases across the south of the country towards the end of the week, the chance of rain showers increases.
The BoM's rainfall outlook for the coming week shows below average rainfall for much of Australia, but showers are expected for coastal areas of NSW and Queensland through Thursday and Friday.


The character * is called a wildcard, and will match against none or more character(s) in a file (or directory) name. For example, in your unixstuff directory, type
% ls list*
This will list all files in the current directory starting with list....
Try typing
% ls *list
This will list all files in the current directory ending with ....list
The character ? will match exactly one character.
So ls ?ouse will match files like house and mouse,
but not grouse.
Try typing
% ls ?list
We should note here that a directory is merely a special type of file. So the rules and conventions for naming files apply also to directories.
In naming files, characters with special meanings such as / * & % , should be avoided. Also, avoid using spaces within names. The safest way to name a file is to use only alphanumeric characters, that is, letters and numbers, together with _ (underscore) and . (dot).
File names conventionally start with a lower-case letter, and may end with a dot followed by a group of letters indicating the contents of the file. For example, all files consisting of C code may be named with the ending .c, for example, prog1.c . Then in order to list all files containing C code in your home directory, you need only type ls *.c in that directory.
Beware: some applications give the same name
to all the output files they generate.
For example, some compilers, unless given the appropriate option, produce compiled
files named a.out. Should you forget to use that option, you
are advised to rename the compiled file immediately, otherwise the next such
file will overwrite it and it will be lost.
There are on-line manuals which gives information about most commands. The manual pages tell you which options a particular command can take, and how each option modifies the behaviour of the command. Type man command to read the manual page for a particular command.
For example, to find out more about the wc (word count) command, type
% man wc
Alternatively
% whatis wc
gives a one-line description of the command, but omits any information about options etc.
When you are not sure of the exact name of a command,
% apropos keyword
will give you the commands with keyword in their manual page header. For example, try typing
% apropos copy
* |
match any number of characters |
? |
match one character |
man command |
read the online manual page for a command |
whatis command |
brief description of a command |
apropos keyword |
match commands with keyword in their man pages |
<EMAIL_ADDRESS>© 9th October 2000


Before Change
self.assertIsNotNone(acls)
def test_join_returns_activity_with_history_attachment(self):
response = api.on_join(self.activity_for_join())
attachments = response[1]["object"]["attachments"]
history = self.get_attachment_for_key(attachments, "history")
self.assertIsNotNone(history)
After Change
self.assertIsNotNone(acls)
def test_join_returns_activity_with_history_attachment(self):
act = self.activity_for_join()
response = api.on_join(act, as_parser(act))
attachments = response[1]["object"]["attachments"]
history = self.get_attachment_for_key(attachments, "history")
self.assertIsNotNone(history)


section "meta" { make meta language; make meta title; make meta author; set language = "q"; set title = "Variable Type Declarations for Q"; set author = "Raph Hennessy"; } section "data" { make template int8; set int8 = signed integer 8; make template uint8; set uint8 = unsigned integer 8; make template int16; set int16 = signed integer 16; make template uint16; set uint16 = unsigned integer 16; make template int32; set int32 = signed integer 32; make template uint32; set uint32 = unsigned integer 32; make template int64; set int64 = signed integer 64; make template uint64; set uint64 = unsigned integer 64; make template string; set string = unsigned string; }


{% extends "global/Page.html" %}
{% load staticfiles otree %}
{% block title %}
Questionnaire
{% endblock %}
{% block content %}
{% formfield player.age %}
{% formfield player.gender %}
{% formfield player.profession %}
Was the search task difficult?
| strongly disagree |
disagree |
slightly disagree |
neutral |
slightly agree |
agree |
strongly agree |
{% for choice in form.difficult %}
| {{ choice }} |
{% endfor %}
When doing the search tasks, did you feel time pressure?
| strongly disagree |
disagree |
slightly disagree |
neutral |
slightly agree |
agree |
strongly agree |
{% for choice in form.feel_time_pressure %}
| {{ choice }} |
{% endfor %}
Do you feel like you performed well on the task?
| strongly disagree |
disagree |
slightly disagree |
neutral |
slightly agree |
agree |
strongly agree |
{% for choice in form.performed_well %}
| {{ choice }} |
{% endfor %}
When doing the search tasks, did you feel that you needed to work fast?
| strongly disagree |
disagree |
slightly disagree |
neutral |
slightly agree |
agree |
strongly agree |
{% for choice in form.need_work_fast %}
| {{ choice }} |
{% endfor %}
Did you think the search topic was interesting?
| strongly disagree |
disagree |
slightly disagree |
neutral |
slightly agree |
agree |
strongly agree |
{% for choice in form.interesting %}
| {{ choice }} |
{% endfor %}
When doing the search tasks, did you feel hurried or rushed?
| strongly disagree |
disagree |
slightly disagree |
neutral |
slightly agree |
agree |
strongly agree |
{% for choice in form.feel_hurried_rushed %}
| {{ choice }} |
{% endfor %}
{% next_button %}
{% endblock %}
{% block styles %}
{% endblock %}


Bright Lamps made in Vienna
Bright Light is an independent lamp company focused on functional design and understated silhouettes. Every lamp is made to order and handcrafted by local artisans.
Custom furniture. Built to order. No warehouses. No sales team. We work with you directly to create just what you’re looking for.
BERKELEY WALL LAMP
from $99
HAYWARD DESK LAMP
from $89
VENTURA FLOOR LAMP
from 119$


My Calendar
The new events calendar for all your scheduling needs!
Login
Username
Password
Login
Register
Wrong login credentials. Please try again.
Close


|
OIS
1.5
Object-oriented Input System
|
A 3D Vector component (perhaps an orientation, as in the WiiMote) More...
#include <OISPrereqs.h>
Public Member Functions | |
| Vector3 () | |
| Vector3 (float _x, float _y, float _z) | |
| void | clear () |
| Public Member Functions inherited from OIS::Component | |
| Component () | |
| Component (ComponentType type) | |
Public Attributes | |
| float | x |
| X component of vector. More... | |
| float | y |
| Y component of vector. More... | |
| float | z |
| Z component of vector. More... | |
| Public Attributes inherited from OIS::Component | |
| ComponentType | cType |
| Indicates what type of coponent this is. More... | |
A 3D Vector component (perhaps an orientation, as in the WiiMote)
|
inline |
|
inline |
|
inline |
| float OIS::Vector3::x |
X component of vector.
| float OIS::Vector3::y |
Y component of vector.
| float OIS::Vector3::z |
Z component of vector.


[gecode-users] saving the way to one of the solution in a file
Guido Tack
tack at ps.uni-sb.de
Mon Dec 4 14:41:38 CET 2006
> nevertheless I wonder why the webpage http://www.gecode.org/gecodej/
> indicates that Gecode/J allows to implement search engines using
> copying
> and recomputation.
>
> Don't you think I could program a new search engine totally in java as
> it's done for Gist ?
Sorry, I maybe wasn't very clear on this. You can write the search
engine in Java, it's just that you can't take an existing one and
modify it, but you'll have to start from scratch. I wanted to suggest
that you look at the C++ code, and then more or less port that to
Java, adjusting it to your needs. The space interfaces are very
similar in C++ and Java, so porting stuff is relatively easy.
Cheers,
Guido
More information about the gecode-users
mailing list


For Project 5, I chose to implement image compression.
We will start by reading in the following well-known test image of Lena Söderberg. We'll convert it to grayscale to make our initial work easier.
We will take the first \(8 \times 8\) pixel block in the image and apply a 2D Discrete Cosine Transform (DCT) with \(p=1\), \(p=2\), and \(p=4\). Below, we have the original pixel block.
\[ \left[ \begin{array}{ccc} 160 & 160 & 160 & 159 & 160 & 153 & 161 & 158\\ 160 & 160 & 160 & 159 & 160 & 153 & 161 & 158\\ 160 & 160 & 160 & 159 & 160 & 153 & 161 & 158\\ 160 & 160 & 160 & 159 & 160 & 153 & 161 & 158\\ 160 & 160 & 160 & 159 & 160 & 153 & 161 & 158\\ 162 & 162 & 155 & 153 & 159 & 157 & 156 & 157\\ 158 & 158 & 162 & 156 & 158 & 160 & 156 & 152\\ 156 & 156 & 153 & 154 & 155 & 156 & 153 & 155 \end{array} \right]\]Below is the \(Y_Q\) matrix for \(p=1\).
\[ Y_Q = \left[ \begin{array}{ccc} 11 & 5 & 4 & 3 & 2 & 2 & 1 & 1\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{array} \right]\]Below is the \(Y_Q\) matrix for \(p=1\).
\[ Y_Q = \left[ \begin{array}{ccc} 5 & 3 & 2 & 1 & 1 & 1 & 1 & 1\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{array} \right]\]Below is the \(Y_Q\) matrix for \(p=1\).
\[ Y_Q = \left[ \begin{array}{ccc} 3 & 1 & 1 & 1 & 1 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0\\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \end{array} \right]\]Dequantization results in the following images for each block.
Applying this compression to every \(8 \times 8\) block in the image results in the following images.
After using using 1, 2, and 4 as values for \(p\), I decided to try the powers of two up to and including 256.
We will repeat the previous section, but this time we will use the suggested JPEG Quantization matrix.
\[Q_y=p\begin{bmatrix} 16 & 11 & 10 & 16 & 24 & 40 & 51 & 61 \\ 12 & 12 & 14 & 19 & 26 & 58 & 60 & 55 \\ 14 & 13 & 16 & 24 & 40 & 57 & 69 & 56 \\ 14 & 17 & 22 & 29 & 51 & 87 & 80 & 62 \\ 18 & 22 & 37 & 56 & 68 & 109 & 103 & 77 \\ 24 & 35 & 55 & 64 & 81 & 104 & 113 & 92 \\ 49 & 64 & 78 & 87 & 103 & 121 & 120 & 102 \\ 72 & 92 & 95 & 98 & 112 & 100 & 103 & 99 \end{bmatrix}.\]Dequantization results in the following images for each block.
Applying this compression to every \(8 \times 8\) block in the image results in the following images.
After using using 1, 2, and 4 as values for \(p\), I decided to try the powers of two up to and including 256.
Next I did RGB compression. I used the same block as before, and applied the JPEQ Quantization to each set of red, green, and blue blocks and then re-combined them.
I tried all of the powers of two from \(p=1\) to \(256\).
These become all gray when p gets high enough because we are trying to get matrices of all zeros for our Huffman encoding (so that we can just say that there will be, say, 20 zeros ahead). We add back 128 during the dequantization and inverse transform process, and this results in the gray color. 0 is black, 255 is white, and as the value 128 is right in between the two, 128 represents gray.
Finally, I tested the JPEG compression on the YUV colorspace. The YUV colorspace consists of Y, the luminance or brightness, and U and V which determine the chrominance or color of the picture.
Converting to YUV is rather simple, and follows a similar to procedure to the one used to convert to grayscale.
\begin{align} Y &= 0.299 R + 0.587 G + 0.114 B\\ U &= -0.14713 R - 0.28886 G + 0.436 B\\ V &= 0.615 R - 0.51499 G - 0.10001 B \end{align}We cannot simply display these YUV coordinates, so we have to convert them back to RGB after we do our image compression.
\begin{align} R &= Y + 1.139834576 V\\ G &= Y -0.3946460533 U -0.58060 V\\ B &= Y + 2.032111938 U \end{align}And this what our images looked like after compression.
As with the previous section, these pictures turn pink as we increase the loss parameter because we are trying to create matrices of all zeros for our Huffman encoding. Adding 128 to each \(Y\), \(U\), and \(V\) coordinate and then converting back to our RGB coordinates results in the pink color.


Playback
Mark up Audio and Video files of your music with feedback comments at specific timestamps!
Login
Sign Up
How to use PlayBack for Feedback
Select an Audio or Video file
Enter your comments at specific timestamps


NHIF has divided the accredited hospitals in to 3 categories:
Category A - Government Hospitals. Members enjoy full and comprehensive for maternity and medical diseases including surgery.
Category B - Private and Mission. Members get a full comprehensive cover but if surgery is required, the member pays for that.
Category C – Private. NHIF only pays for specified daily benefits and the member pays everything else.
Premium Rates
Enter your gross income to find out how much you should pay*
*Self-employed individuals have a constant rate of KSH 500


Aminus Dungeon
Aminus Dungeon
Non-master players should visit the Aminus Dungeon located in the northern area of Shaduwar
| Aminus Dungeon is accessible from the Shaduwar continent. |
Dungeon Particularities
| All Masquerpets are aggravated. This is an Instance Dungeon so only Party and or Guild members will be present. | |||||||||||||||||||||||||||||||||||||||||||||
| Entrance Fee | |||||||||||||||||||||||||||||||||||||||||||||
| None | |||||||||||||||||||||||||||||||||||||||||||||
|
Unique Items Present
Aminus Dungeon contain item uniquely found here. |
|||||||||||||||||||||||||||||||||||||||||||||
|
Available
All quests in Shaduwar are given by the NPC (Quest Office) Jano Level 105 - 120 Prizes are Penya and Experience. |
|||||||||||||||||||||||||||||||||||||||||||||
Quest Items Found Here
|
|||||||||||||||||||||||||||||||||||||||||||||
|
Certain rules apply:
1) You must be in a party to enter dungeon but party is not teleported to dungeon if you enter it. You may proceed alone, though this is not advised 2) If you leave the either Dungeon you must wait 120 minutes to re-enter. 3) Although clearing the Dungeon is preferred, only the 3 giants are necessary kills to spawn the mini boss Lykanos and boss Drakul 4) The use of Trans, be it Aibatt Trans or other, are no longer aloud within the dungeons |
Monsters Present
|
This dungeon is for level Masquerpets. This is a party dungeon so masquerpets hit hard and have a lot of hp. Rewards are very interesting. Here is where you will find the Vampine Weapons |
|
Dungeon Prizes
Cursed Aminus Dungeon
Master and higher level players should venture towards the Cursed Aminus Dungeon which is located near the lake in the center of Shaduwar.
| Cursed Aminus Dungeon is accessible from the [[]] continent. |
Dungeon Particularities
| All Masquerpets are aggravated. This is an Instance Dungeon so only Party and or Guild members will be present. |
| Entrance Fee |
| None |
|
Unique Items Present
Cursed Aminus Dungeon contain item uniquely found here. |
|
Available
All quests in Shaduwar are given by the NPC (Quest Office) Jano Level 105M - 120M Prizes are Penya and Experience. |
|
Quest Items Found Here
Coming Soon |
|
Certain rules apply:
1) You must be in a party to enter dungeon but party is not teleported to dungeon if you enter it. You may proceed alone, though this is not advised 2) If you leave the either Dungeon you must wait 120 minutes to re-enter. 3) Although clearing the Dungeon is preferred, only the 3 giants are necessary kills to spawn the mini boss Lykanos and boss Drakul 4) The use of Trans, be it Aibatt Trans or other, are no longer aloud within the dungeons |
Monsters Present
|
This dungeon is for level Masquerpets. This is a party dungeon so masquerpets hit hard and have a lot of hp. Rewards are very interesting. Here is where you will find the Ancient Weapons |
|
Dungeon Prizes
|
All Ancient Weapons are level 120M and are Soul Linked. Meaning once they have been equipped they may
not be banked, warehoused, traded or sold. They may be put in backpack. They are class restricted
including RM and BP.
|


Tema Municipality Chamber
Thank you for Getting this Far
We say thank you and congratulate you for having successfully joined us. You are now part of this amazing communinity. We look foward to working with your brand.
Confirmed
Thank you for filling out the form with your information, an email will be sent to you for confirmation. Kindly check your email, open the mail from us and click on the confirmation button. Thank you


Cloud On Key
HOME
FILES
LOGOUT
{%for file_name in files_list%}
{{ file_name }}
{% endfor %}
Download File
Share File
Delete File


Open your world
🗞📰📮🗺🏵🏫📸💵📨🗳📚📖🔎📝📑📱📺📻📡🌎🌍🌏✏🖋⚖🗣🧑🎓🎙💻📋📒📯📬📜🖼📂🔭📡🗂
Here at Dulwich College Beijing, we encourage students to have a voice, do what we enjoy and contemplate about different subjects. The Current Affairs Seminars does just that, providing students with the opportunity to talk freely about topics they are passionate about through fascinating seminars and meaningful conversations.
The overarching focus is "current affairs", as in hot topics and important issues that resonate with fellow students. Whether students are enthusiastic about recent video games, sports, politics and the news, the latest movies, books or songs, this club will be the platform where anyone can bring up interesting ideas, give comments or solve problems.
Discussion points will primarily focus on social topics such as politics and economics issues, with all topics coming from students themselves. Make sure you sign up on SOCS to join us as we engage in intellectual and meaningful discussions and interactive activities.
This is the first-ever initiative of a discussion group of this scale at DCB, and we hope to see students joining the ECA and learn more about themselves along the way.
If you would like to think critically and enjoy a pleasant exchange of ideas on your passion, contact us at<EMAIL_ADDRESS>We look forward to interesting, productive and fruitful discussions
Matthew🇰🇷
Chief Information Officer (CIO)
Kevin🇨🇳
President, Co-founder👔
Janice🇰🇷
Chief Financial Officer (CFO)💵
Anna🇨🇳
Chief Communications Officer 🗣
Eric🇰🇷
Chairman, Co-founder👔
Hayden🇨🇳
Managing Director
Nick🇵🇱🇺🇸
Chief Marketing Officer (CMO)🔊
Andrew🇨🇳
Chief Technology Officer (CTO)💻
Ila🇬🇧
Vice-President (VP)📰
Current Topics
Available positions (prone to change)
Head (President) 👔
• delegating responsibilities.
• In addition to the administrative or executive duties in organizations, presides over meetings.
• Organizing and coordinating the board's activities, creating agenda.
Chief Marketing Officer (CMO) 🔊
• Leads graphic design (logo/poster), advertising and promotions, and coordinates with executives to create strategy and execution plans.
• Advertising and raising publicity, brand awareness.
Chief Technology Officer (CTO) 💻
Manages technological aspects of the CAS such as maintaining the website, mapping out ICT strategies
Chief Communications Officer (CCO) 🗣
• advise and participate in decisions that may impact the reputation of CAS.
• primarily responsible for managing communications risks and opportunities between teachers, members and student organizations, etc.
• Partnering with other organisations
Chief Financial Officer (CFO) 💵
• manages CAS's finances, including planning, risks, record-keeping, and financial reporting.
• updates Finance spreadsheet.
General Manager 💼
• Maintaining the overall performance of CAS.
• Keeping in regular contact with the executives to maintain a positive relationship.
• Assisting in producing and planning strategic operating plans and objectives for the long-term future. Also ensuring all short term targets have been achieved.


Calculate vehicle drivetrain properties, such as gear reduction and top speed, based on variables like wheel diameter and motor RPM.
Select the radio button for the value you wish to calculate, then fill in the other values. Calculation happens on the fly as you type.
This unit is given in inches, and is the outer diameter of the tire.
If you wish to find a wheel diameter to match a vehicle gear reduction, motor RPM and desired top speed.
This unit is given as X to 1 reduction. For example 9.3 to 1 and 12 to 1 have 9.3 and 12 respectively for the values entered here.
This will calculate the needed gear reduction for a vehicle with known tire size, given motor RPM and vehicle speed.
Electric motors often have a specified max RPM and continuous RPM, try out both values, and match those with the desired top speed and cruising speed, to find a good gear reduction balance.
This unit is Revolutions Per Minute (RPM)
This will calculate the motor's rotational speed for the given vehicle's wheel diameter, gear reduction and desired speed.
Electric motors often have a specified max RPM and continuous RPM, try out different speed and gearing values to fit in the motor's power curve.
This unit is in Miles Per Hour (MPH)
This will calculate the vehicle's speed for the selected wheel diameter, gear reduction and motor RPM.
Electric motors often have a specified max RPM and continuous RPM, try out both values to see top speed and cruising speed respectively.


last.fm submission broken in 3.5a2
-
bugzilla user 500
As the title says, can't seem to get this to work. From what I see in the console, the handshake is working but the submission never actually happens.
09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Read preferences 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Username is unchanged 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Password is unchanged 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Not the first time we've read the preferences; will refresh the existing session 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Refresh Audioscrobbler session 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Will request handshake 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Handshake URL is http://post.audioscrobbler.com/?hs=true&p=1.1&c=syn&v=0.1&u=neilio 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Starting connection attempt 09/juil./2009 11:50:59 Synergy[692] Audioscrobbler: Waiting for handshake reply 09/juil./2009 11:51:00 Synergy[692] Audioscrobbler: Connection to Audioscrobbler did finish loading (response received) 09/juil./2009 11:51:00 Synergy[692] Audioscrobbler: Received an INTERVAL directive 09/juil./2009 11:51:00 Synergy[692] Audioscrobbler: Storing interval value: 1 09/juil./2009 11:51:00 Synergy[692] Audioscrobbler: Processing handshake reply 09/juil./2009 11:51:00 Synergy[692] Audioscrobbler: Received UPTODATE message 09/juil./2009 11:52:21 Synergy[692] Audioscrobbler: Received notification from iTunes 09/juil./2009 11:52:21 Synergy[692] Audioscrobbler: Current track cannot be submitted because it is not a regular file 09/juil./2009 11:52:21 Synergy[692] Audioscrobbler: Cancelling previously existing submission timer, if any
-
Greg Hurrell
So what's the "current track" in this example? It says it's not a "regular file"; it works this way because the Audioscrobbler protocol requires us to only submit info for "real files", not for stuff coming from other sources (like Internet radio, or shared playlists over the network etc).
Have you tried quitting Synergy and restarting it? And trying with different tracks?
Reply
This topic is now closed.


Track Revenue
Mar - Aug, 2016
6 months
Worked on a new upcoming platform, aliased YD to develop a single page, user-based web application that manages multiple online marketing entities.
Worked with Python, Django, Javascript, and AngularJS.
Associate Software Engineer
May - August, 2016
-
Developed a testing platform for YD using behave and selenium.
-
Created a settings page that works with permissions and includes global, system-wide settings using django-constance.
-
Implemented conversions page, which permits a manager or superuser to add, remove, or delete conversions. Worked with Amazon Redshift backend.
Software Engineering Intern
Mar - May, 2016
-
Developed the model, view, and directives for the offers, advertisers, affiliates and campaigns tabs.
-
Developed permissions syntax and permissions for the above entities.
College Track
Feb - Aug, 2016
3 months
Worked and collaborated with College Track to improve their admin page so that it allowed group-filtering and saved-filtering for salesforce email queries.
Worked in an Agile environment, using Ruby on Rails and Cucumber
Consultant, Programmer
-
Created groups page, which allowed admins to save their email-filtering queries to their user profile.
-
Improved admin-page loading times by caching information retrieved by salesforce.
Lawrence Berkeley National Labs
May - Dec, 2014
8 Months
Created single page application for iOS fusion energy project ICEE, facilitating the observation of images taken from Korea's KSTAR fusion energy reactor.
While working as a C programmer, I worked on key calculations involving atmospheric rivers, which account for 80% of severe weather changes in the bay area.
Software Engineer Intern,
C
Sept - Dec, 2014
-
Improved the accuracy of atmospheric river dimension calculation by over 25%
-
Created algorithms in C to calculate geodesic width and height by using polymorphic interpolation
-
Handled cutting-edge technology, including the Lawrence Berkeley National Labs supercomputer
Software Engineer Intern,
iOS
May - Sept, 2014
-
Created the entire front end of the application, which includes a side panel specifying the folder structure, a main display, and a button that grabs the images generated by KSTAR
-
Recreated GNU Plot functionality using Core Graphics in order to adjust coloration and precision of images
-
Created video interface using Core Animation in order to smoothly display image trends


|
Graphitti
A toolkit/software architecture to ease creating high-performance neural network simulators
|
The model of the activity dependent neurite outgrowth. More...
#include "ConnGrowth.h"
#include "ParseParamError.h"
#include "AllEdges.h"
#include "XmlGrowthRecorder.h"
#include "AllSpikingNeurons.h"
#include "Matrix/CompleteMatrix.h"
#include "Matrix/Matrix.h"
#include "Matrix/VectorMatrix.h"
#include "ParameterManager.h"
#include "OperationManager.h"
Go to the source code of this file.
The model of the activity dependent neurite outgrowth.
/
Below all of the resources for the various connections are instantiated and initialized. All of the allocation for memory is done in the constructor’s parameters and not in the body of the function. Once all memory has been allocated the constructor fills in known information into “radii” and “rates”.
ERROR terminate called after throwing an instance of 'std::bad_alloc' what(): St9bad_alloc CAUSE As simulations expand in size the number of neurons in total increases exponentially. When using a MATRIX_TYPE = “complete” the amount of used memory increases by another order of magnitude. Once enough memory is used no more memory can be allocated and a “bsd_alloc” will be thrown. The following members of the connection constructor consume equally vast amounts of memory as the simulation sizes grow:
Definition in file ConnGrowth.cpp.


{# # Main Layout # --------------- # If you are not happy with - modify it :) #} {# Include Macros for your #} {% import '_macros/my-macro.html' as _ %} {# Critical CSS if you dont want is disable it #} {% set criticalCSS = true %} {# Include the Document Header #} {% include '_parts/document-header.html' with { criticalCSS: criticalCSS } %}
{# Add Progressloader#} {% include '_components/progressLoader.html' %} {# Add OffCanvas Layer #} {% include '_components/offCanvas.html' %}


Conditional Formatting
The GridControl allows you to apply conditional formatting and change the appearance of individual cells based on specific conditions. This powerful option helps highlight critical information and describe trends within cells by using data bars, color scales or built-in icon sets.
You can change a conditional format applied to the Total column by selecting the desired item from the popup list below the grid.
Resources to Learn:


Note: only boards for the logged in user, that have Sprint in the name will appear here.
Content (incl background image) is © 2016 Smithsoft


- before I started at Cogent, I was consulting at the unnamed electricity company
- we had a problem, that might be familiar to a lot of you
Services
Components
the solution
monolith + shared libraries + each new feature in its own repo
monolith links to new features, new features use shared libraries
(maybe join them with different kinds of lines)
The problem
Setting up a new project is hard
Automating project setup with Angular schematics
Angular schematics
@ngrx/schematics
@igniteui/angular-schematics
what are schematics?
these schematics are used in situations where you already have a repository and
you want to add some functionality to it
igniteui CLI with Damyan & Viktor on Friday
our situation is going to be slightly different, because we want our schematic to
create the repo for us, but the principles are the same
gives access to the `schematics` CLI
(you can use npx schematics, but this is going to save typing npx a lot)
schematics schematicblank --name=create-project
schematics --list-schematics
blank
schematic
schematics --help
schematics [CollectionName:]SchematicName [options, ...]
By default, if the collection name is not specified,
use the internal collection provided by the Schematics CLI.
Options:
--debug Debug mode. This is true by default if the collection is a relative
path (in that case, turn off with --debug=false).
--allow-private Allow private schematics to be run from the command line. Default to
false.
--dry-run Do not output anything, but instead just show what actions would be
performed. Default to true if debug is also true.
--force Force overwriting files that would otherwise be an error.
--list-schematics List all schematics from the collection, by name. A collection name
should be suffixed by a colon. Example: '@schematics/schematics:'.
--verbose Show more information.
--help Show this message.
Any additional option is passed to the Schematics depending on
schematics CLI can generate new schematics, as well as running for purposes of testing
blank - generate a single blank schematic
schematic - generate a collection of schematics
if you forget the options, you can use list schematics
and if it all gets too much, you can run schematics help to get a list of options
LIVECODE: schematics blank --name=create-project (point out that we get create-project/index.ts & create-project/index_spec.ts)
LIVECODE: schematics schematic --name=test --dryRun (point out we get a heap of schematics files)
important files for us are collection.json & create-project/index.ts
contains metadata on all schematics
for each schematic
- the name you're going to use to invoke it
- a description that you need to fill in
- the location of the actual code: file name & function name
if you change filename/function name, remember to change it here too!
need to rename schema to ng-new
Setting up a new project
run ng new to generate project
add static config files
update package.json
remove favicon
static config files:
- .prettierrc
- .npmrc
- tslint.json
- karma.conf.js
package.json: dependencies, git hooks and CI scripts
Step 1: run ng-new
Requirements
Name must start with cust-
Always use SCSS
Routing?
start by creating a new project, which we're going to do by running ng new
but we have some restrictions
1. name must start with cust- - check and throw error
2. ng new asks what kind of stylesheets you want to use. we're always going to use SCSS, so we don't need to ask.
3. we're going to allow a user to specify that they want to setup a routing module, but if they don't specify it, we'll just default to not adding it
need to get the name and whether or not they want routing from user
want it to work similar to the way ng new works
you can specify all the options as arguments
LIVECODE: ng new my-application --routing --style=scss --dryRun
or, you can be asked
LIVECODE: ng new
argument are available via the options object
LIVECODE: console.log(_options)
can set this up via schema.json
LIVECODE: create src/create-project/schema.json
LIVECODE: copy/paste
{
"$schema": "http://json-schema.org/schema",
"id": "CreateProjectSchematic",
"title": "create project options schema",
"type": "object",
"description": "Initialise a new project",
"properties": {
}
}
first, let's add our two parameters
LIVECODE:
"name": {
"type": "string",
"description": "The name of the project to be created, must start with 'cust-'"
},
"routing": {
"type": "boolean",
"description": "Include the routing flag to setup a routing module for the project"
}
we need to tell collections.json about our schema
LIVECODE: "schema": "./create-project/schema.json"
and now, the values of the arguments will be available on the _options argument in our typescript
LIVECODE: console.log(_options)
DON'T FORGET TO BUILD
LIVECODE: schematics .:create-project --name=my-project --routing
This is good, but we can do better. eg ng new lets you leave off the name flag and just specify the
name as the first argument. we can do that too.
LIVECODE:
"$default": {
"$source": "argv",
"index": 0
}
RUN BUILD
LIVECODE: schematics .:create-project my-project
(could also default routing to false, but i don't think we need to)
finally, ng new also has the nifty feature where it asks us if we've left anything out, that we
saw earlier. we can do that too
LIVECODE: "x-prompt": "Project name:"
RUN BUILD
LIVECODE: schematics .:create-project
ok, now we've got all our arguments being passed in, it's time to look at our requirements again
LIVECODE:
destructure name from _options
if (!name.startsWith('cust-')) {
throw new Error("Name must start with cust-")
}
BUILD
RUN
ok, that's all the checks we need to do. next we want to call ng-new and pass in the
name (which we've verified is allowed), SCSS styling & whether or not we want routing
LIVECODE:
don't need tree or context arguments, so ditch them
return externalSchematic('@schematics/angular', 'ng-new', {
name,
version: '9.0.0',
routing: !!routing,
style: 'scss',
})
version is mandatory, which is handy if you want everything to be on the same version,
bit of a pain if you just want the latest
we didn't set a default value for routing, so need to handle it being undefined
great, we've met our requirements & called ng new!
one problem though
LIVECODE: ls
all those files it said it created, aren't really there
by default, your schematic is going to run in debug mode, any time you call it using the relative path
we can change that by setting the debug flag to false
let's not do that in the current directory though, because we're going to end up with a mess if we
start generating projects inside our current project
LIVECODE: open new terminal
LIVECODE: ls show where our project is
LIVECODE: schematics ./create-project:create-project cust-project --debug=false
need to have ./ - you can see it's installing the packages this time, will take a few minutes
LIVECODE: ls
LIVECODE: ls create-project
(assuming npm install doesn't take too long, show we've got a real Angular project)
npm publish
npm install -g create-project
ng new --collections=create-project cust-payments
at this point, we actually have something which provides a bit of value, so let's make
it available to our users, so we can be super agile and start getting feedback
publish it just like any other npm package
available via the name specified in package.json
this name is fine if we're just publishing it to an internal repo, probably want namespaceing
if it's going somewhere public
need to install with the -g flag, because it's going to be called outside a project
using it is a bit cumbersome, but you only have to do it once per project
just put clear instructions in your README
Setting up a new project
run ng new to generate project
add static config files
update package.json
remove favicon
Step 2: Add static config files
.prettierrc
.npmrc
tslint.json
karma.conf.js
add these files to our schematics project, then the schematic can copy them into new projects
LIVECODE: refactor external schematic into runNgNew function
LIVECODE: copy static files into new files directory
LIVECODE: const templateSource = apply(url('./files'), []) -- do source = url('./files') to start with. use apply later
(fetch files from ./files, and apply all the rules in the list, which is none)
LIVECODE: const merged = mergeWith(templateSource, MergeStrategy.Overwrite)
(create a rule which merges the files in the templateSource with the input tree, overwriting tree)
So, now we have a rule to create a tree (because externalSchematic returns a Rule), and one to add the files, we need a way to join them
together into a new rule: chain
LIVECODE: const rule = chain([createTree, mergeFiles])
Finally, we need to return the result of running our composite rule
LIVECODE: return rule(tree, _context)
LIVECODE: build & run, file gets copied over, but it's not in the right directory
Tree
Just like the meaning of tree in git
Important difference - it's a copy of the real file system, represented in memory
when schematic is run, it makes changes to this internal representation, then writes
the changes once the schematic has finished
kind of like react's virtual dom
Rule
export function createProject({ name }: any): Rule {
...
return (tree: Tree, _context: SchematicContext) => {
return tree;
};
}
our schematic returns a rule, which receives a tree and returns the same tree, unchanged
what we're going to do instead is call ng new - which is going to create a tree - and then
return that tree
Placeholders
Filenames: __variableName__
Inside files: <% variableName %>
LIVECODE: create __name__ folder
second argument of apply is a list of rules to apply to the files
LIVECODE: [template({..._options})] (array passed to apply when creating templateSource)
make sure template gets imported from @angular-devkit/schematics, not core
Setting up a new project
run ng new to generate project
add static config files
update package.json
remove favicon
Update package.json
Add dev dependencies: prettier & husky
Add husky hook
Add CI scripts
husky hook runs prettier on commit
LIVECODE: create updatePackageJson rule function that just returns tree
needs to return a rule (ie a function that takes in a tree and returns a tree)
LIVECODE: add updatePackageJson to chain list, so we don't forget
first, we need the location of our package.json file, which is going to be under name/package.json
so we need to pass in the name to our function
LIVECODE: function updatePackageJson(name: string)
LIVECODE: updatePackageJson(name) in chain list
LIVECODE: const path = `${name}/package.json`
now, we can read the contents of the package.json
LIVECODE: const file = tree.read(path)
and, because it's a JSON file, we can easily parse it to an object
LIVECODE: const json = JSON.parse(file!.toString()) (do it without the bang and show error)
now we can add our extra dev dependencies
LIVECODE: json.devDependencies.prettier = '^2.0.0';
LIVECODE: json.devDependencies.husky = '^4.2.0';
if we wanted to, we could go fetch the latest version of these libraries and add those, but that's a bit beyond the scope of this talk
we can also add our husky script
LIVECODE: json.husky = {
'hooks': {
'pre-commit': 'pretty-quick --staged --pattern \"apps/**/**/*.{ts,scss,html}\"'
}
}
and our additional CI scripts
LIVECODE: json.scripts = {
...json.scripts,
'build:prod': 'ng build --prod',
'test:ci': 'ng test --no-watch --code-coverage'
}
finally, we can write these changes back to the tree
LIVECODE: tree.overwrite(path, JSON.stringify(json, null, 2))
LIVECODE: build & run, stop it installing
Setting up a new project
run ng new to generate project
add static config files
update package.json
remove favicon
Remove favicon
LIVECODE: create removeFavicon rule function & add to chain list
LIVECODE: const path = `${name}/src/favicon.ico' (add name to function parameters and function call)
LIVECODE: tree.delete(path)
LIVECODE: run & build


Hospitality professional with over 11 years of guest relations and municipal experience turned full-stack Web Developer. Proven ability to effortlessly adapt to new environments, people, and situations in international and diverse work settings. Self-motivated yet thrives in team environments and high-pressure settings. Experienced as a supervisor and mentor, implemented strategies to improve empathy and teamwork. Is very teachable and appreciative of constructive feedback. Enjoys debugging and the creative, problem-solving aspects of Web Development. Passionate about creating smooth, beautiful user experiences while developing clean, modular code. Never accepts the status quo, always looking for ways to learn and improve.
Bachelor of Arts, Psychology
Diploma in International Business
in Hotel & Design Management
Diploma in Web Development
10 week intensive and immersive full-stack development bootcamp that focuses on JavaScript, HTML5, CSS3, Ruby, NodeJS, React, React Native, Express, EJS, JQuery, Ajax, Ruby on Rails, ActiveRecord, PostgreSQL, Knex, and MongoDB.
Continuously Learning - Lifelong Learner!
Senior Lifeguard/Instructor
& Front Desk Attendant
Senior Lifeguard/Instructor
Guest Relations Professional
Guest Hospitality Ambassador


Small library of iterator-related utility functions for JavaScript.
Annotated source files
./src/index.js


This pane contains control flow graph of the method: vertices are blocks and edges are branches between them.
|
|
CFG block with label B1 . Hovering over a block shows IR it contains. Clicking jumps into its IR in the IR pane.
|
|
|
Control flow edge between blocks. Red color is used to mark loops' backedges.
|
|
|
Block that contains an unconditional deoptimization instruction. Such blocks always deoptimize when executed. Usually inserted when building IR for the parts of function that were never executed and thus have no type feedback to speculate upon.
|
|
|
Block that was marked as unreachable. No code will be generated from it.
|
|
|
Block that contains an instruction that has unknown arbitrary side-effects (marked with changes[*] ).
|
|
|
Fill color denotes hotness of the block: the more intense the hotter. If perf annotate profile is loaded the hotness is computed based on the number of ticks. Otherwise it is approximated from loop nesting - color is more intense inside nested loops.
|


NOTE: In recent (version greater than 13.3) versions of macOS, Apple has enhanced their security policies such that it is more difficult to install open source software like eprinttools. To allow software like eprinttools on your Mac you need to author installation of unsigned software when using the Mac Terminal application.  You should see the Terminal listed. Set the setting so you are allowed to install unsigned software in the Terminal. You can switch this back off after run the software installed installed.
cd
doi2eprintxml
and click “Open” in the dialogSteps 2 through 5
cd
curl https://caltechlibrary.github.io/eprinttools/installer.sh | sh
open bin
Step 6 switch to the finder window. Right click on the
doi2eprintxml
program, then click “open” in the dialog
box.
Step 7 close the Terminal window and reopen it. You should now be
ready to use doi2eprintxml
.
You can test by running the command
doi2eprintxml -version
.
The tool doi2eprintxml
is a command line program, it is
normally run from the terminal’s command prompt. The purpose of the
program is to take a list of DOI contact CrossRef or DataCite and
generate what is called an EPrint XML document. The EPrint XML document
is used to import records into EPrints (e.g. CaltechAUTHORS) via the
“import” button under “Manage Deposits” page.
The typical workflow is to create a plain text file (UTF-8 encoded)
using a text editor such as VSCode or Zed with one DOI per line. The
doi2eprintxml
program can then read the list and generate
an EPrint XML document for importing into EPrints. Follow the following
steps to generate a file called eprint.xml based on a
list of of DOI in a file called doi.txt. In the example
below code
is the VS code editor, replace that line with
your favorite text editor.
cd ~/Desktop
code doi.txt
doi2eprintxml -i doi.txt >eprints.xml
In this example the DOI is “10.1021/acsami.7b15651”.
doi2eprintxml "10.1021/acsami.7b15651" > article.xml
For details of using doi2eprintxml
see the manual
page


First thing is the groups, where each team will have three other teams against which they will have to compete in order to make it past the first round. Here are the list of groups: Group A: Russia, Saudi Arabia, Egypt, Uruguay. Group B Portugal, Spain, Morocco, Iran.
| Russia | |
| Saudi Arabia |