Archive
All historic prototype designs are below, sorted by GDS phase (e.g. alpha) and then sprint.
- Redundant version created to ensure handover notes on versioning were accurate
- Redundant version created to ensure handover notes on versioning were accurate
- DfE Sign-in work instigated and part-completed until dual-auth halt
- Sign-in dashboard revised and redesigned
- LA Recoupment statements completed
- Pupil premium journey structured and tested
- LA, MAT and Single-School Pupil Premium statements completed with a few secondary elements (like payments) outstanding
Beta
Kanban (baselined-june-2021)- Radio Buttons and SPI versions tested and finalised
- NMSS & SPI changes rolled back to FE, Academy, SSF, LA, 14-6 where applicable
- Initiated indicative statement initial prototyping
- NMSS & SPI versions updated, checked and tidied
- Residual testing for a few outstanding elements on the two to still occur
- Initial concepting on how to signpost to different variants (radiotest) is included but commented out
- Ash Henry to Max Sutcliffe Handover (NMSS)
- Ash Henry to Max Sutcliffe Handover (SPI)
- Reworking of NMSS statement type
- Reworking of SPI statement type
- Creation of Special post 16 statement variant (login as spi)
- Creation of NMSS variant statement (log in as nmss)
- Copy of 118 baselined for development
- Further iterations of designs and content for the 16 to 19 allocation statements (child) user journeys, including:
- Reordering of the 14-16 variant to allow for additional clarity
- Amends to 16-19 variants in line with feedback from user feedback, Rounds 4 and 5 as seen here
- Creation of an alternative format (14-16 CSV) for users of their funding.
- Prototype handed over to new Interaction Designer
- Further iterations of designs and content for the 16 to 19 allocation statements (child) user journeys, including:
- Updated content to include reference to student payment premium.
- The introduction of an accordion pattern for 16-19 FE statement.
- Creation of an alternative format (CSV) for users of their funding.
- Iterations of designs and content for the 16 to 19 allocation statements (child) user journeys, including:
- New designs and content to address pain points for users during the last round of usability testing.
- Updated all funding breakdown navigation to the most suitable design partially ratified during the last round of usability testing (version B - the GOV.UK contents style).
- Expanded variance and associated dummy data and across the 14 to 16 and 16 to 19 variants of funding.
- Creation of an alternative format (CSV) for users of their funding.
- Iterations of designs and content for the 16 to 19 allocation statements (child) user journeys, including:
- Agreed a new way of separating the different statement types - by provider type. Used this to create all 16 to 19 statement variant templates.
- First completed draft of all designs for the core 16 to 19 statement variant - FE provider.
- First draft of content across the core 16 to 19 statement variant - FE provider.
- Created the NMSS and 14 to 16 statement variants.
- Finished creating the parent view for MATs, plus added an LA journey within the child structure.
- Creation of new designs and content for the 16 to 19 allocation statements (child and parent) user journeys.
- Added final design and content changes to the GAG allocation statements (child and parent) user journeys, based on business feedback and product sign-off.
- Updated the component library based on all new designs in GAG.
- Iterations of designs and content for the GAG allocation statements (child and parent) user journeys, including:
- Finished adding remaining designs for all other scenarios of a GAG statement.
- Refined the now user chosen parent view (MAT) for allocation statements.
- Updated use of the tag component (e.g. "NEW" and "UPDATED") as part of the in service notifications.
- Refined the design for the print view of the GAG statement.
- Wrote email content as part of the out of service notifications.
- Created a csv file format for users.
- Iterations of designs and content for the GAG allocation statements (child and parent) user journeys, including:
- Global table redesign to address responsive and scalable situations.
- New MFG designs of content and sections.
- Introduction of better, dynamic guidance plus links to more guidane.
- Improved parent journey A/B testing designs.
- First iterations to the NFF public sub service in its next phase.
- Creation of the first designs and content for the GAG allocation statements (child and parent) user journeys.
- Created the MYESF component library which contains all tried and tested designs across all areas of the service.
- Versioned all features in MYESF so that we can more easily reference a single stable version of each feature when needed.
- Added the required MYESF live service design changes to accommodate the DfE Sign-in onboarding in March 2020.
- Added business requested content to the NFF journeys.
-
Final designs and content for the NFF public sub service. These changes included:
- GOV.UK card design component adopted for the new design of the funding breakdown
- removal of the spreadsheet
- removal of the GOV.UK alpha phase banner
- some of the requested content changes made by the business policy team
- changes to no results page based on requested content changes made by the business policy team
- added breadcrumb in as requested by business
- Created a new public sub service called View national funding formula for schools. This user journey has been scoped initially at school level, plus was based on various designs and components to meet a business need.
- Removed all traces of the dynamic glossary component based on inconclusive user research and government recommendations.
- Added final content across all VLF journeys based on an end to end review.
- Replaced all traces of IDAMS with DfE Sign-in as the future authentication service for MYESF.
- Redesigned all DfE Sign-in pages across all MYESF user journeys so the full end to end journey will make sense to users post go live.
- Added and iterated dynamic glossary component by replacing the expandable link with an accessible tooltip alternative.
- Added the full draft content for the glossary of funding terms to the master page and across each page where a match is found.
-
Addressed VLF journey user pain points, identified as part of usability testing in the final round of UR. These included:
- redesigned how we offer links to the other publicly viewable funding types (e.g. pupil premium)
- created a CSS (print.css) so users can more accessibly access funding breakdowns in the formats they need (e.g. printed, PDF)
- iterated on the glossary component
- added missing error handling to the find an organisation page
- Added new content across all VLF journeys.
- Addressed VLF journey user pain points, identified as part of usability testing in the last round of UR. These included:
- adding a journey so that schools and academies can view historic funding in the single funding statement journey (at individual organisation level)
- redesigning the download design component
- adding the download component to appear earlier in the single funding statement journey
- finalising (agreed) content for the how to view funding choice page
- adding a new tag design
- Added new content across all VLF journeys.
- More design and content changes to the view latest funding sub service, including:
- rolled back all new ESFA guidance designs so that we now link directly to the most relelvant guidance
- created a new glossary of terms for users
- created a new support mechanism so users can get dynamic definitions to terms from the glossary plus a link to the ESFA contact form
- extended the design for allocation history and historic funding
- Made the required changes (requested by the ESFA) to the ESFA banner design across the view your funding sub service.
- More design and content changes to the view latest funding sub service, including:
- new content and business terminology across all pages
- ESFA banner
- new ESFA guidance pages
- Requested BAU design changes to the allocation statements (adults) live MYESF pages, to address:
- funding breakdown changes to the ESFA funded adult education budget type statements
- redesign of all statement breakdown pages to get around showing funding by date and type
- Start of the beta phase designs (view latest funding) including new designs and content based on the learnings from the final alpha UR sessions. This includes:
- versioning for the DSG
- refined single funding statement
- new content across the entire public funding information (DSG and PE and sport) user journeys
- redesigned PE and sport breakdown
- Final confirmed content for the public funding information (DSG and PE and sport) user journeys, based on an end to end 2i content review of the sub service.
- Iterations to the public funding information (DSG and PE and sport) user journeys including merged lower level DSG tabs, changed external link behaviour and hiding of the sections with null data in.
- Final design iterations (minus content) for the public funding information (DSG and PE and sport) user journeys, based on end user usability testing findings.
- Iterated the designs and content, for the public funding information (DSG and PE and sport) user journeys, based on end user usability testing findings.
- Added a 5th funding deductions block to the DSG lower level view ("2019-20_HN_places_&_deductions").
- Made design changes to the public funding information (DSG and PE and sport) user journeys, based on suggestions received during a UX Design Critiques collaborative session.
- Reviewed and updated content (part 1/2) of the public funding information (DSG and PE and sport) user journeys.
- Adapted the public funding information (single funding statement) user journeys for viewing the DSG and PE and sport funding allocations.
- Added a new branch to the public funding information (DSG and PE and sport) user journeys so users can choose whether to view by organisation or download the spreadsheets.
- Expanded on the public funding information DSG user journey so users can view lower level detail.
- Updated the content (part 1/2) of the public funding information (DSG and PE and sport) user journeys.
- Creation of the first designs and content for the single funding statement (DSG and PE and sport) user journeys.
- Added the multiple spreadsheets for download design to PE and sport (April release).
- Agreed design and content changes to the document exchange (external) parent view (LA & MAT) user journeys following a review with the development team.
- Added the PE and sport feature to the prototype.
- New designs and content for the PE and sport April release.
- Final agreed designs to the document exchange (external) parent view (LA & MAT) user journeys.
- Design and content changes to the document exchange (external) parent view (LA & MAT) user journeys.
- Addition of new content, from the business, to the allocation statements (adults) user journey to include the new funding stream name - ESFA funded adult education budget.
- Fixes and changes to the prototype so that is works more realistically for future usability testing sessions.
- Design and content changes to the document exchange (external) parent view (LA & MAT) user journeys.
- Last minute changes to design and content prior to going live (MVP into beta) with allocation statements (adults), external child view (academy & school) and PE and sport.
- Design and content changes to the document exchange (external) parent view (LA & MAT) user journeys.
- Fixes to all accessibility issues (AA, AA, and AAA) identified in the team's second DAC report (17.01.19).
- Changes to the allocation statements (adults) user journeys prior to go live.
- Creation of the first designs and content for the document exchange (external) parent view (LA & MAT) user journeys.
- Fixes to all accessibility issues (AA, AA, and AAA) identified in the team's first DAC report (19.12.18).
- Final agreed designs to the allocation statements (adults) so that it can be baselined.
- Final agreed designs to the document exchange (external) so that it can be baselined.
- Final agreed designs to the document exchange (internal) so that it can be baselined.
- Added the correct GOV.UK phase banners (beta) across all user journeys, in the correct places.
- Further agreed changes to the document exchange (external) so it can be baselined.
- Iterations to the document exchange (internal) based on user research findings and ESFA design critiques.
- Iterations to the document exchange (external) based on user research findings.
- Iterations to the document exchange (internal) based on user research findings and ESFA design critiques.
- Archiving of all historic designs and user journeys.
- New versioning system applied across the prototype and reviewed with the SFS team.
- Iterations to the document exchange (external) based on user research findings.
- Creation of the first pages for the document exchange (internal) user journeys.
- Major global fixes to the prototype.
- Iterations on the designs for the allocation statements (adults) user journeys with a design A and design B added for some A/B testing.
- Iterations on the designs for the allocation statements (adults) user journeys with a design A and design B added for some A/B testing.
- Completed all user journeys for PE and sport (public) including adding designs for search scenarios.
- Iterations on the E2E user journeys for PE and sport (public) including start points on GOV.UK.
- First designs for the PE and sport (public) find an organisation user journey.
- Live service design work completed as part of the skills funding service (live) Funding Claims (16-19 addition to adults).
- Iterations on the designs for the allocation statements (adults) user journeys (3 streams).
- Completed all of the E2E user journeys for PE and sport (public) including the GOV.UK page, search results and a page for Greta.
- Additional designs for the allocation statements (adults) user journeys to include 3 streams and the full split of the funding streams.
- First designs and screens for the announcements and messaging for the skills funding service (live).
- Iterations on the designs for the allocation statements (adults) user journeys.
- Completed all of the E2E user journeys (MAT & SAT) for the document exchange (external).
- Iterations on the designs for the 'documents to publish' document exchange (internal) user journey.
- First designs for the allocation statements (adults) user journeys from David and Mel.
- Version 2 of the dashboard design and 'documents to publish' document exchange (internal) user journeys.
- First designs and screens for the PE and sport (public) user journeys.
Alpha
Sprint 3 (alpha-v3.0.0)- Iterations on the designs for the allocation statements (GAG & 16-19) user journeys.
- First designs and screens for the document exchange (external) user journeys (MAT & SAT).
- Iterations on the designs for the allocation statements (GAG) user journeys.
- New designs and screens for the allocation statements (16-19) user journeys (academies SATs).
- First designs and screens for the allocation statements (GAG) user journeys (academies SATs).
- Creation of a new dashboard for the document exchange (external).
Legacy
You can still view all remaining and unsorted designs on the legacy page, which were organised prior to versioning (started on 09 October 2018).
Most of these designs are deemed redundant since they have been superseded by the versioned designs in the archive (kept for assessment and audit purposes).


|
Connected Home over IP
672cf7684
|
Determines what query records should be included in a response. More...
#include <lib/mdns/minimal/responders/QueryResponder.h>
Public Member Functions | |
| QueryResponderRecordFilter () | |
| Default contstructor accepts everything that is not null. More... | |
| QueryResponderRecordFilter (const QueryResponderRecordFilter &other)=default | |
| QueryResponderRecordFilter & | operator= (const QueryResponderRecordFilter &other)=default |
| QueryResponderRecordFilter & | SetIncludeAdditionalRepliesOnly (bool includeAdditionalRepliesOnly) |
| Set if to include only items marked as 'additional reply' or everything. More... | |
| QueryResponderRecordFilter & | SetReplyFilter (ReplyFilter *replyFilter) |
| Filter out anything rejected by the given reply filter. More... | |
| QueryResponderRecordFilter & | SetIncludeOnlyMulticastBeforeMS (uint64_t ms) |
| Filter out anything that was multicast past ms. More... | |
| bool | Accept (Internal::QueryResponderInfo *record) const |
Determines what query records should be included in a response.
Provides an 'Accept' method to determine if a reply is to be sent or not.
|
inline |
Default contstructor accepts everything that is not null.
|
default |
|
inline |
|
default |
|
inline |
Set if to include only items marked as 'additional reply' or everything.
|
inline |
Filter out anything that was multicast past ms.
If ms is 0, no filtering is done
|
inline |
Filter out anything rejected by the given reply filter.
If replyFilter is nullptr, no such filtering is applied.


Locations
Mega Gargantuan Kingdom
56
Mega Gargantuan Kingdom
Microverse
Replacement Dimension
['https://rickandmortyapi.com/api/character/269']


The payoff of the strategy is
$$ \begin{array}{rcll} C^{K}_T & = & (S_T - K)^{+}\\ P_T & = & (S_T - S_0 + C^{K}_0 - C^{K}_T)\times m - fee \end{array} $$ $$ \begin{array}{rcll} \textrm{where} & C^{K}_T & = & \textrm{Call value at time T}\\ & S_T & = & \textrm{Underlying asset price at time T}\\ & K & = & \textrm{Call strike price}\\ & P_T & = & \textrm{Payout total at time T}\\ & S_0 & = & \textrm{Underlying asset price when the trade opened}\\ & C^{K}_0 & = & \textrm{Call price when the trade opened (credit received)}\\ & m & = & \textrm{Contract multiplier}\\ & T & = & \textrm{Time of expiration} \end{array} $$The following chart shows the payoff at expiration:
The maximum profit is $K - S_T + C^{K}_0$, which occurs when the underlying price is at or above the strike price of the call at expiration.
The maximum loss is $S_0 - C^{K}_0$, which ocurrs when the underlying price drops.
If the Option is American Option, there is risk of early assignment on the sold contract.


Thanks for reading, and please leave some feedback if you have the time.
Follow @{{ site.github_username }} on Github.


|
Imperx Tools SDK
<IP_ADDRESS>
|
Defines for TS ISO Panchromatic channel parameters. More...
Macros | |
| #define | TS_ISO_PANSLOPE_0 "ISOPanSlope_0" |
| #define | TS_ISO_PANSLOPE_1 "ISOPanSlope_1" |
| #define | TS_ISO_PANSLOPE_2 "ISOPanSlope_2" |
| #define | TS_ISO_PANSLOPE_3 "ISOPanSlope_3" |
| #define | TS_ISO_PANSLOPE_4 "ISOPanSlope_4" |
| #define | TS_ISO_PANINTERCEPT_0 "ISOPanIntercept_0" |
| #define | TS_ISO_PANINTERCEPT_1 "ISOPanIntercept_1" |
| #define | TS_ISO_PANINTERCEPT_2 "ISOPanIntercept_2" |
| #define | TS_ISO_PANINTERCEPT_3 "ISOPanIntercept_3" |
| #define | TS_ISO_PANINTERCEPT_4 "ISOPanIntercept_4" |
Defines for TS ISO Panchromatic channel parameters.
| Macro | Parameter Name | Type | Description |
|---|---|---|---|
| TS_ISO_PANSLOPE_0 | "ISOPanSlope_0" | [float: DBL_MIN-DBL_MAX] | Noise variation slope of panchromatic channel at typical sensor gains |
| TS_ISO_PANSLOPE_1 | "ISOPanSlope_1" | [float: DBL_MIN-DBL_MAX] | Noise variation slope of panchromatic channel at typical sensor gains |
| TS_ISO_PANSLOPE_2 | "ISOPanSlope_2" | [float: DBL_MIN-DBL_MAX] | Noise variation slope of panchromatic channel at typical sensor gains |
| TS_ISO_PANSLOPE_3 | "ISOPanSlope_3" | [float: DBL_MIN-DBL_MAX] | Noise variation slope of panchromatic channel at typical sensor gains |
| TS_ISO_PANSLOPE_4 | "ISOPanSlope_4" | [float: DBL_MIN-DBL_MAX] | Noise variation slope of panchromatic channel at typical sensor gains |
| TS_ISO_PANINTERCEPT_0 | "ISOPanSlope_0" | [float: DBL_MIN-DBL_MAX] | Noise variation intercept of panchromatic channel at typical sensor gains |
| TS_ISO_PANINTERCEPT_1 | "ISOPanSlope_1" | [float: DBL_MIN-DBL_MAX] | Noise variation intercept of panchromatic channel at typical sensor gains |
| TS_ISO_PANINTERCEPT_2 | "ISOPanSlope_2" | [float: DBL_MIN-DBL_MAX] | Noise variation intercept of panchromatic channel at typical sensor gains |
| TS_ISO_PANINTERCEPT_3 | "ISOPanSlope_3" | [float: DBL_MIN-DBL_MAX] | Noise variation intercept of panchromatic channel at typical sensor gains |
| TS_ISO_PANINTERCEPT_4 | "ISOPanSlope_4" | [float: DBL_MIN-DBL_MAX] | Noise variation intercept of panchromatic channel at typical sensor gains |
| #define TS_ISO_PANSLOPE_0 "ISOPanSlope_0" |
Noise variation slope of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANSLOPE_1 "ISOPanSlope_1" |
Noise variation slope of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANSLOPE_2 "ISOPanSlope_2" |
Noise variation slope of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANSLOPE_3 "ISOPanSlope_3" |
Noise variation slope of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANSLOPE_4 "ISOPanSlope_4" |
Noise variation slope of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANINTERCEPT_0 "ISOPanIntercept_0" |
Noise variation intercept of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANINTERCEPT_1 "ISOPanIntercept_1" |
Noise variation intercept of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANINTERCEPT_2 "ISOPanIntercept_2" |
Noise variation intercept of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANINTERCEPT_3 "ISOPanIntercept_3" |
Noise variation intercept of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]
| #define TS_ISO_PANINTERCEPT_4 "ISOPanIntercept_4" |
Noise variation intercept of panchromatic channel at typical sensor gains
Type/Range [float: DBL_MIN-DBL_MAX]


Live your life, watch in ours
Homepage
Top Charts
Browse
Search
About
News
Goodfellas is now available at Movies Crawler!
12 Angry Men is now available at Movies Crawler!
New Delivery Hours: From 5:00pm Till 11:00pm
Movies Crawler is recruiting! Click
here
to see available positions.
Featured Movies


iOS Fonts
A Place for Happy Typography
Every font. Every iOS version.
Loading all fonts for iOS
70 %


Home
Menu
Gallery
Book a Shoot
Contact
Mitchell Barnes Photography
Passionate
Professional
Photographer
for hire
Previous
Next
Previous
Next
Previous
Next
Propose project :-)
Send
Address
10352 AUGUSTINE HERMAN HWY CHESTERTOWN, MD 21620
Email
<EMAIL_ADDRESS>Phone
720-378-1505


Over
Clocked
Not just any clock on the internet
Mobile Device
Device in portrait mode. This website works best in landscape mode. Go Landscape?
OK
Go Landscape?
This website works best in landscape mode. Go Landscape?
OK


A quick trip to Memphis Ten-A-Key where we visit the Hypnotize Minds.
YouTube
Stream/Download Hour 1 (the archives are now defunct)
Stream/Download Hour 2 (the archives are now defunct)
Spotify*
* Spotify Playlist is missing songs: #4 Juicy J - Smoked Out Dabbed Out, #10 La' Chat - Yeah I Rob, #11 Project Pat - You Scared?, #23 La' Chat - U Don't Want None, #24 La' Chat - Salt Shakers, #25 Juicy J - Like A Pimp (featuring La' Chat), #26 Juicy J - Riley, #29 Juicy J - Who Da Neighbor? & #30 Juicy J - Pills, Weed, & Pussy (featuring Project Pat)


Each database is represented by a set of files stored in a directory. There are several different types of files as documented below:
A log file (*.log) stores a sequence of recent updates. Each update is appended to the current log file. When the log file reaches a pre-determined size (approximately 4MB by default), it is converted to a sorted table (see below) and a new log file is created for future updates.
A copy of the current log file is kept in an in-memory structure (the
memtable
). This copy is consulted on every read so that read
operations reflect all logged updates.
A sorted table (*.sst) stores a sequence of entries sorted by key. Each entry is either a value for the key, or a deletion marker for the key. (Deletion markers are kept around to hide obsolete values present in older sorted tables).
The set of sorted tables are organized into a sequence of levels. The
sorted table generated from a log file is placed in a special young
level (also called level-0). When the number of young files exceeds a
certain threshold (currently four), all of the young files are merged
together with all of the overlapping level-1 files to produce a
sequence of new level-1 files (we create a new level-1 file for every
2MB of data.)
Files in the young level may contain overlapping keys. However files in other levels have distinct non-overlapping key ranges. Consider level number L where L >= 1. When the combined size of files in level-L exceeds (10^L) MB (i.e., 10MB for level-1, 100MB for level-2, ...), one file in level-L, and all of the overlapping files in level-(L+1) are merged to form a set of new files for level-(L+1). These merges have the effect of gradually migrating new updates from the young level to the largest level using only bulk reads and writes (i.e., minimizing expensive seeks).
A MANIFEST file lists the set of sorted tables that make up each level, the corresponding key ranges, and other important metadata. A new MANIFEST file (with a new number embedded in the file name) is created whenever the database is reopened. The MANIFEST file is formatted as a log, and changes made to the serving state (as files are added or removed) are appended to this log.
CURRENT is a simple text file that contains the name of the latest MANIFEST file.
Informational messages are printed to files named LOG and LOG.old.
Other files used for miscellaneous purposes may also be present (LOCK, *.dbtmp).
When the size of level L exceeds its limit, we compact it in a background thread. The compaction picks a file from level L and all overlapping files from the next level L+1. Note that if a level-L file overlaps only part of a level-(L+1) file, the entire file at level-(L+1) is used as an input to the compaction and will be discarded after the compaction. Aside: because level-0 is special (files in it may overlap each other), we treat compactions from level-0 to level-1 specially: a level-0 compaction may pick more than one level-0 file in case some of these files overlap each other.
A compaction merges the contents of the picked files to produce a sequence of level-(L+1) files. We switch to producing a new level-(L+1) file after the current output file has reached the target file size (2MB). We also switch to a new output file when the key range of the current output file has grown enough to overlap more then ten level-(L+2) files. This last rule ensures that a later compaction of a level-(L+1) file will not pick up too much data from level-(L+2).
The old files are discarded and the new files are added to the serving state.
Compactions for a particular level rotate through the key space. In more detail, for each level L, we remember the ending key of the last compaction at level L. The next compaction for level L will pick the first file that starts after this key (wrapping around to the beginning of the key space if there is no such file).
Compactions drop overwritten values. They also drop deletion markers if there are no higher numbered levels that contain a file whose range overlaps the current key.
Other than the special level-0 compactions, we will pick one 2MB file from level L. In the worst case, this will overlap ~ 12 files from level L+1 (10 because level-(L+1) is ten times the size of level-L, and another two at the boundaries since the file ranges at level-L will usually not be aligned with the file ranges at level-L+1). The compaction will therefore read 26MB and write 26MB. Assuming a disk IO rate of 100MB/s (ballpark range for modern drives), the worst compaction cost will be approximately 0.5 second.
If we throttle the background writing to something small, say 10% of the full 100MB/s speed, a compaction may take up to 5 seconds. If the user is writing at 10MB/s, we might build up lots of level-0 files (~50 to hold the 5*10MB). This may signficantly increase the cost of reads due to the overhead of merging more files together on every read.
Solution 1: To reduce this problem, we might want to increase the log switching threshold when the number of level-0 files is large. Though the downside is that the larger this threshold, the more memory we will need to hold the corresponding memtable.
Solution 2: We might want to decrease write rate artificially when the number of level-0 files goes up.
Solution 3: We work on reducing the cost of very wide merges. Perhaps most of the level-0 files will have their blocks sitting uncompressed in the cache and we will only need to worry about the O(N) complexity in the merging iterator.
An experiment on an ext3
filesystem on Feb 04, 2011 shows
the following timings to do 100K file opens in directories with
varying number of files:
| Files in directory | Microseconds to open a file |
|---|---|
| 1000 | 9 |
| 10000 | 10 |
| 100000 | 16 |
DeleteObsoleteFiles()
is called at the end of every
compaction and at the end of recovery. It finds the names of all
files in the database. It deletes all log files that are not the
current log file. It deletes all table files that are not referenced
from some level and are not the output of an active compaction.


About
I am a Creative person who enjoys learning new things.
I have a background in web design, photography and marketing from college, my previous jobs and some classes outside of school. I would consider myself entry/junior level and I'm in the process of designing a few cool projects to add to my portfolio.


Self-contained template for monitoring disk statistics on Linux systems. Source: https://github.com/frei-style/zabbix-linux-diskstats-template
This is a self-contained monitoring template to get I/O statistics of block devices on Linux systems.
Manuel Frei
There are no macros links in this template.
There are no template links in this template.
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| Discover Block Devices |
-
 | Dependent item |
linux.diskstats.discovery
Update: 0
 |
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| diskstats (master) |
-
 | Zabbix agent (active) |
vfs.file.contents[/proc/diskstats]
Update: 30s
 |
| {#DEVICE_NAME}: discards completed |
This is the total number of discards completed successfully. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},discardsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent discarding |
This is the total number of milliseconds spent by all discards (as measured from __make_request() to end_that_request_last()). Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentDiscarding]
Update: 0

LLD
 |
| {#DEVICE_NAME}: writes completed |
This is the total number of writes completed successfully per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},writesCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: weighted time spent doing I/Os |
This is the numer per second of each of this actions: I/O start, I/O completion, I/O merge, or read. This can provide an easy measure of both I/O completion time and the backlog that may be accumulating.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},weightedTimeSpentDoingIOs]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent writing |
This is the total number of milliseconds spent by all writes (as measured from __make_request() to end_that_request_last()).
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentWriting]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent reading |
This is the total number of milliseconds spent by all reads (as measured from __make_request() to end_that_request_last()).
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentReading]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent flushing |
This is the total number of milliseconds spent by all discards (as measured from __make_request() to end_that_request_last()). Linux 5.5+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentFlushing]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent doing I/Os |
Number of milliseconds spent doing I/Os. Since Linux 5.0 this field counts jiffies when at least one request was started or completed. If request runs more than 2 jiffies then some I/O time might be not accounted in case of concurrent requests.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentDoingIOs]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors written |
This is the total number of sectors written successfully per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsWritten]
Update: 0

LLD
 |
| {#DEVICE_NAME}: discards merged |
Discards which are adjacent to each other may be merged for efficiency. Thus two 4K reads may become one 8K read before it is ultimately handed to the disk, and so it will be counted (and queued) as only one I/O. This field lets you know how often this was done. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},discardsMerged]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors read |
Number of sectors read per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsRead]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors discarded |
This is the total number of sectors discarded successfully. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsDiscarded]
Update: 0

LLD
 |
| {#DEVICE_NAME}: reads merged |
Number of reads merged per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},readsMerged]
Update: 0

LLD
 |
| {#DEVICE_NAME}: reads completed |
This is the total number of reads completed successfully.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},readsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: I/Os currently in progress |
Number of I/Os currently in progress.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},iOsCurrentlyInProgress]
Update: 0

LLD
 |
| {#DEVICE_NAME}: flush requests completed |
This is the number of flush requests completed successfully per second. Block layer combines flush requests and executes at most one at a time. This counts flush requests executed by disk. Not tracked for partitions. Linux 5.5+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},flushRequestsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: writes merged |
This is the total number of writes merged per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},writesMerged]
Update: 0

LLD
 |
There are no triggers in this template.
Self-contained template for monitoring disk statistics on Linux systems. Source: https://github.com/frei-style/zabbix-linux-diskstats-template
This is a self-contained monitoring template to get I/O statistics of block devices on Linux systems.
Manuel Frei
There are no macros links in this template.
There are no template links in this template.
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| Discover Block Devices |
-
 | Dependent item |
linux.diskstats.discovery
Update: 0
 |
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| diskstats (master) |
-
 | Zabbix agent (active) |
vfs.file.contents[/proc/diskstats]
Update: 30s
 |
| {#DEVICE_NAME}: discards completed |
This is the total number of discards completed successfully. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},discardsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent discarding |
This is the total number of milliseconds spent by all discards (as measured from __make_request() to end_that_request_last()). Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentDiscarding]
Update: 0

LLD
 |
| {#DEVICE_NAME}: writes completed |
This is the total number of writes completed successfully per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},writesCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: weighted time spent doing I/Os |
This is the numer per second of each of this actions: I/O start, I/O completion, I/O merge, or read. This can provide an easy measure of both I/O completion time and the backlog that may be accumulating.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},weightedTimeSpentDoingIOs]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent writing |
This is the total number of milliseconds spent by all writes (as measured from __make_request() to end_that_request_last()).
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentWriting]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent reading |
This is the total number of milliseconds spent by all reads (as measured from __make_request() to end_that_request_last()).
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentReading]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent flushing |
This is the total number of milliseconds spent by all discards (as measured from __make_request() to end_that_request_last()). Linux 5.5+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentFlushing]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent doing I/Os |
Number of milliseconds spent doing I/Os. Since Linux 5.0 this field counts jiffies when at least one request was started or completed. If request runs more than 2 jiffies then some I/O time might be not accounted in case of concurrent requests.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentDoingIOs]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors written |
This is the total number of sectors written successfully per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsWritten]
Update: 0

LLD
 |
| {#DEVICE_NAME}: discards merged |
Discards which are adjacent to each other may be merged for efficiency. Thus two 4K reads may become one 8K read before it is ultimately handed to the disk, and so it will be counted (and queued) as only one I/O. This field lets you know how often this was done. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},discardsMerged]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors read |
Number of sectors read per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsRead]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors discarded |
This is the total number of sectors discarded successfully. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsDiscarded]
Update: 0

LLD
 |
| {#DEVICE_NAME}: reads merged |
Number of reads merged per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},readsMerged]
Update: 0

LLD
 |
| {#DEVICE_NAME}: reads completed |
This is the total number of reads completed successfully.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},readsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: I/Os currently in progress |
Number of I/Os currently in progress.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},iOsCurrentlyInProgress]
Update: 0

LLD
 |
| {#DEVICE_NAME}: flush requests completed |
This is the number of flush requests completed successfully per second. Block layer combines flush requests and executes at most one at a time. This counts flush requests executed by disk. Not tracked for partitions. Linux 5.5+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},flushRequestsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: writes merged |
This is the total number of writes merged per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},writesMerged]
Update: 0

LLD
 |
There are no triggers in this template.
Self-contained template for monitoring disk statistics on Linux systems. Source: https://github.com/frei-style/zabbix-linux-diskstats-template
This is a self-contained monitoring template to get I/O statistics of block devices on Linux systems.
Manuel Frei
There are no macros links in this template.
There are no template links in this template.
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| Discover Block Devices |
-
 | Dependent item |
linux.diskstats.discovery
Update: 0
 |
| Name | Description | Type | Key and additional info |
|---|---|---|---|
| diskstats (master) |
-
 | Zabbix agent (active) |
vfs.file.contents[/proc/diskstats]
Update: 30s
 |
| {#DEVICE_NAME}: discards completed |
This is the total number of discards completed successfully. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},discardsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent discarding |
This is the total number of milliseconds spent by all discards (as measured from __make_request() to end_that_request_last()). Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentDiscarding]
Update: 0

LLD
 |
| {#DEVICE_NAME}: writes completed |
This is the total number of writes completed successfully per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},writesCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: weighted time spent doing I/Os |
This is the numer per second of each of this actions: I/O start, I/O completion, I/O merge, or read. This can provide an easy measure of both I/O completion time and the backlog that may be accumulating.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},weightedTimeSpentDoingIOs]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent writing |
This is the total number of milliseconds spent by all writes (as measured from __make_request() to end_that_request_last()).
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentWriting]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent reading |
This is the total number of milliseconds spent by all reads (as measured from __make_request() to end_that_request_last()).
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentReading]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent flushing |
This is the total number of milliseconds spent by all discards (as measured from __make_request() to end_that_request_last()). Linux 5.5+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentFlushing]
Update: 0

LLD
 |
| {#DEVICE_NAME}: time spent doing I/Os |
Number of milliseconds spent doing I/Os. Since Linux 5.0 this field counts jiffies when at least one request was started or completed. If request runs more than 2 jiffies then some I/O time might be not accounted in case of concurrent requests.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},timeSpentDoingIOs]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors written |
This is the total number of sectors written successfully per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsWritten]
Update: 0

LLD
 |
| {#DEVICE_NAME}: discards merged |
Discards which are adjacent to each other may be merged for efficiency. Thus two 4K reads may become one 8K read before it is ultimately handed to the disk, and so it will be counted (and queued) as only one I/O. This field lets you know how often this was done. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},discardsMerged]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors read |
Number of sectors read per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsRead]
Update: 0

LLD
 |
| {#DEVICE_NAME}: sectors discarded |
This is the total number of sectors discarded successfully. Linux 4.18+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},sectorsDiscarded]
Update: 0

LLD
 |
| {#DEVICE_NAME}: reads merged |
Number of reads merged per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},readsMerged]
Update: 0

LLD
 |
| {#DEVICE_NAME}: reads completed |
This is the total number of reads completed successfully.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},readsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: I/Os currently in progress |
Number of I/Os currently in progress.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},iOsCurrentlyInProgress]
Update: 0

LLD
 |
| {#DEVICE_NAME}: flush requests completed |
This is the number of flush requests completed successfully per second. Block layer combines flush requests and executes at most one at a time. This counts flush requests executed by disk. Not tracked for partitions. Linux 5.5+
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},flushRequestsCompleted]
Update: 0

LLD
 |
| {#DEVICE_NAME}: writes merged |
This is the total number of writes merged per second.
 | Dependent item |
linux.diskstats[{#DEVICE_NAME},writesMerged]
Update: 0

LLD
 |
There are no triggers in this template.


Creator of CraftX. Software developer, photography enthusiast, aspiring educator.
Kingdom Advisors, Inc.
Minnesota, USA 🇺🇸
<EMAIL_ADDRESS>https://selvinortiz.com


DISCLAIMER: The following is a subjective description of what happened to me after smoking Salvia divinorum. It is by no means comprehensive, i.e. much of what happened and what was felt / thought afterwards can probably not be conveyed.
BACKGROUND: Over the past 10 years I have experimented with different kinds of psychoactive substances. Drawn into the realm of drugs by a fascination with nervous systems in general and the human brain in particular, it always intrigued me that psychopharmacological intervention can induce or reveal a fragility that seems to be inherent to the mind as we perceive it in everyday life. From subtle manipulations to ego-shattering experiences – I always felt there is so much out there waiting to be discovered, and that there is more to reality and personality than I have hitherto acknowledged. Some of my experiences were glowing and beautiful so as to never be forgotten, others were painful and left scars, but there are no regrets in my vita and every trip held a lesson to be learnt.
The first and last time I tried Salvia divinorum were about seven years ago. Of the couple of attempts to break into the realm of Ska Pastora, only two were really successful and impressive. Being eager to repeat my experiment and to thrust deeper into what I remembered as being a strange and somewhat frightening universe, I ordered 6x and 10x extracts off the internet and prepared for a session at home. I decided to start by smoking about 1/8 of a gram of 6x extract through an ice-cooled water bong. Being somewhat anxious and expecting rapid onset effects, I inhaled a lungful. Then another. This seemed to finish the dose, there was no more fume entering the bong’s corpus.
The lights of the candle in front of me flickering, I closed my eyes while I exhaled. Seconds after that mild effects set in. To me, Salvia always conveys a sense of forest, a wooden, green, plant-like presence. Feelings of serpentine shivers crawled up my spine, stretching me so that I could hear my intervertebral discs clacking as they snapped into position. Vivid thoughts crossed my mind and revealed some interesting aspects and ideas – but nothing more happened.
Wiping off the sweat from my forehead I decided to take another load, roughly equal in size to the previous hit. Number two induced a similar sense of vivid thoughts, but effects were short-lasting and there was nothing particularly remarkable, leaving me a little woozy and somewhat affected in the motor department of my brain’s routine functions. Cleaning my bong I realized that I had not burned (and thus not inhaled) the entire dose intended, so it appeared reasonable to repeat the experiment. But not until the next day.
Before trying to convey some of the impressions derived from the second day of summoning Salvia I have to quickly introduce the reader to my mindset at that particular time. Work dominated my daily routines and my thought processes heavily, I was faced with problems I had not myself created over the course of several weeks, and I needed to be more assertive and authoritative in professional terms than I ever was before. One can say that I was going through a challenge and was somewhat stressed. Nevertheless I felt something good coming out of all this already, so it was not the kind of troubled situation in which fooling around with psychoactives would be highly inappropriate. I felt ready.
Together with three Italian friends I had a rich Chinese dinner at home that Saturday night accompanied by two bottles of beer (I drink beer quite regularly). As Salvia had turned out to be a substance sensitive to set and setting I waited for everyone to go to bed before I lit two candles in my room and prepared my bong again. I grabbed a piece of paper from my bedroom floor to spread and measure the 6x extract and – waddya know! – it turned out to be a print of a scientific article about Salvia! I had printed the article months before but never read it, and found this to be an interesting coincidence.
Approximately 1/7 grams of extract were loaded and I was determined to burn it all this time. None of the precious material was to be wasted. One deep preparatory breath. Ignition. The first lungful of characteristic smoke hits my alveoles, followed by a slight pre-sensation. Do not waste, get it all in! Two more deep drags and my task is accomplished. I can feel something coming. It is difficult in retrospect to reference any time points, but by the time I exhaled the last drag I was beyond the point of no return (onset within seconds).
I do not remember putting down the bong. Pulled towards the floor by multiple times normal gravitation I stretched out fully on the bedroom floor and (probably? maybe?) closed my eyes. Damage was done. What had happened can only be described as somebody / something pulling the power plug from my ego’s energy source. I was no more. I had lost all sense of being, literally. No body, no here or there, no vision.
How long this persisted I can not tell, but at some point I snapped back into at least some sort of visually perceiving state, seeing my room and some of it’s interior. Yet I was not really back. Visual effects were absent or at least not appreciated. Something pulled me towards my bed and it was not me who made it up there. It was a wooden, crawling, ant-like pulling force field sensation that, in a laterally drifting motion, heaved me onto my mattress. I was conscious enough to know my name and to hear the front door of my house slamming shut (my French roommate returned) but I was clearly not in control of the events.
A moment of panic set in: I tried to pick up the Salvia from the paper I had spread it on and pour it back into its source container, but to no avail. Somehow I managed to hide the bong in my closet. Back on my bed (I did not “decide” to go there, it just happened) I thought “sleep it over” but surely felt that this was not an option. The force field started dragging me through my bed. Wow. Almost too much. Flicking the light switch (that had turned off most of the effects in my trips years ago) and going to the bathroom (not a voluntary action in the common sense either) I searched for relief. But it was still there, they were still there – whatever it was that was pulling me.
Consciousness was recovered sufficiently to allow for turning on the computer and putting on ear phones. The music (progressive house, techno) banging through my ears slowly dampened the effects and after (maybe) 20-25 minutes I knew I was on my way back to baseline. After listening to some tunes that I have known for many years, further strengthening my sense of reality, I went to bed. I could not fall asleep and had to get up several times to write down hastily some of my thoughts / feelings. Finally I nodded off, still exuding the familiar Salvia sweat.
After about 5 ½ hours I woke up feeling very refreshed. Knowing that the night had generated a lot of insights and aspects (most of which are somewhat unspeakable) I stepped outside my house (approximately 10:00 AM) and had a glass of grapefruit juice. Sun shining, birds in the trees, a soft breeze blowing through my quiet neighbourhood – the world felt fresh, and I had a rejuvenated sense of being here.
…
In summary I have to say that this was one of the most powerful experiences I have ever had. As a neuroscientist of almost thirty years of age I have academic as well as personal experience with different psychoactives, i.e. I know many a molecular mechanism of drug action (“how drugs work”) as well as the subjective effects (“how drugs feel”). Nothing ever hit me like this. The “reset” button was pushed on my personality, my ego was dissolved, and the resultant loss of control was slightly disturbing if not frightening. Yet after the system had rebooted, I felt stronger than before and equipped with plenty of useful things to think about.
Given the rapid onset and short time course of Salvia’s effects on my brain I am impressed by the plethora of things I can know integrate and use in future endeavours. Salvia pointed out very clearly, once again, that our minds are fragile constructs subject to a myriad of influences, some of which can severely dissociate and detach one from any common sense of reality, disrupting normal thought patterns as well as extero- and introceptive perspectives. To me it has a unique quality in that, instead of GIVING instantaneously, instead of providing me with add-ons to my common set of sensual modalities, it TAKES my senses away transiently, seizes control, and DEMANDS it mercilessly. It is HER realm, her kingdom, her territory, her rule once I choose to summon her cathartic spirit. Once the Salvia lets go, however, I feel that a lot has been given to me in terms of insight and change.
Similar to other drugs, but more powerfully than any of them, Salvia has provided me with a sense of appreciation for my intact mind and the wide range of interesting substances that can be used (carefully and with good preparation!!!) to manipulate and study how our magnificent nervous system works.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


--- layout: default title: Fridolin Linder ---
I'm a Postdoctoral Associate at New York University in the Social Media and Political Participation Lab at New York University. I received my Phd in Political Science from Penn State University.
I'm studying the application of statistical and machine learning methods to social scientific questions. In most of my research I deal with unstructured text data. How can use better tools to extract scientifically relevant information form text and how can we use insights form social science to improve the tools we are using?
My current research focuses on methods to discover and analyze coordinated campaigns to influence political topics on social media as well as on the development of tools and methodology to allow scientists to to answer questions with social media data.
You can find all my code on GitHub and more details on my research page. Feel free to reach out if you are interested in my work.


expect.promise.any(...)
This method will find all promises in the given structure and return a promise that will be fulfilled when any of the promises in the structure have been fulfilled. If all of the promises are rejected, the resulting promise will be rejected with the errors.
Let's make an asynchronous assertion that we can use for the examples:
expect.addAssertion('to be a number after a short delay', function (expect, subject) {
return expect.promise(function (run) {
setTimeout(run(function () {
expect(subject, 'to be a number');
}), 0);
});
});
See the promise documentation for more details on how expect.promise works.
The following code snippet creates a promise that will be fulfilled when any of the promises in the nested structure has been fulfilled.
return expect.promise.any({
foo: [
expect('42', 'to be a number after a short delay')
],
bar: expect([0, 1, 2], 'to have items satisfying',
expect.it('to be a number after a short delay')),
baz: expect({ a: '1', b: 2 }, 'to have values satisfying',
'to be a number after a short delay')
});
The following code snippet create a promise that will rejected when all of the promises in the nested structure have been rejected:
return expect.promise.any({
foo: [
expect('42', 'to be a number after a short delay')
],
bar: expect([0, '1', 2], 'to have items satisfying',
expect.it('to be a number after a short delay')),
baz: expect({ a: '0', b: 1 }, 'to have values satisfying',
'to be a number after a short delay')
}).caught(function (aggregateError) {
// Let's reformat the error a bit
expect.fail(function (output) {
output.error(aggregateError.message);
var errors = [];
for (var i = 0; i < aggregateError.length; i += 1) {
errors.push(aggregateError[i]);
}
errors.sort(function (a, b) { // Make the output stable
if (a.message < b.message) return -1;
if (a.message > b.message) return 1;
return 0;
});
output.indentLines();
errors.forEach(function (e, i) {
output.nl().i().text(i + ': ').block(e.getErrorMessage({ output: output }));
});
});
});
aggregate error
0:
expected '42' to be a number after a short delay
1:
expected [ 0, '1', 2 ]
to have items satisfying expect.it('to be a number after a short delay')
[
0,
'1',
//
should be a number after a short delay
2
]
2:
expected { a: '0', b: 1 }
to have values satisfying to be a number after a short delay
{
a:
'0',
//
should be a number after a short delay
b: 1
}


Sunday
Monday
Tuesday
Wednesday
Thrusday
Friday
Saturday
January
February
March
April
May
June
July
August
September
October
Novemver
December


{% extends "base_project.html" %} {% load compress humanize static hc_extras %} {% block title %} {% if is_new %} Add Webhook Integration - {% site_name %} {% else %} Webhook Settings - {% site_name %} {% endif %} {% endblock %} {% block content %}
Executes an HTTP request to your specified URL when a check goes up or down. You can use placeholders $NAME, $STATUS and others in webhook URLs, request body and header values (available placeholders).
Webhook retry policy: {% site_name %} retries failed webhook calls up to 2 additional times. {% site_name %} considers a HTTP request failed if:


$def with (query) $:{TITLE("Users You Follow", "Settings", "/control")}
There are no followed users to display.


{{ define "main" }} {{ partial "jumbotron" (dict "imageUrl" "/img/about-bg.jpg" "title" "About" "fade" "true") }}


Label
login
☰
Page1
Page2
Page3
Title
Image container
Image container
Image container
Image container
Title
Image container
Image container
title
titles
titles
titles
titles
title
titles
titles
titles
titles
title
titles
titles
titles
titles
title
titles
titles
titles
titles
Footer


Welcome to JPetStore 6 web service (REST)
Test Account service
insert Account
get Account
update Account
Test Catalog service
get Category by Id
get all Categories
get Product by Id
get Products by Category
search for Products
get Item by Id
get Items by Product Id
check Item in stock
Test Order service
get Order by Id
get Orders of username
insert Order
Copyright www.mybatis.org


Text boxes allow the user to input a simple text value. A text box only allows for a single line of input.
Input masks
Input masks ensure that the user understands the input format required, in addition to making input less error-prone by potentially restricting the number or types of characters that can be entered.
Example uses https://github.com/RobinHerbots/jquery.inputmask for demo purposes.
Text area
Purpose
Users need to input an extended, potentially multi-line text value.
Description
Text areas allow the user to input extended, multi-line text values.
Sizing and resizing
Text areas can either
have a fixed, static height
automatically grow/shrink based on the input, from a minimum number of lines (e.g., 3) to a maxmimum number of lines (e.g., 10) to ensure that space is optimally used
have a resize handle, allowing for manual vertical and/or horizontal resizing
Radio buttons
Purpose
Users must choose between two or more mutually exclusive options.
Description
Radio buttons come in a group of two or more mutually exclusive options
A radio button is either checked or unchecked
There can only be one radio button checked in a group
Radio button labels should use sentence casing
Use concise labels
Provide an initially checked option when the field is not required and/or there is a sane default
Align vertically when possible
Align in shorter columns if there are many options
Ensure there is adequate spacing between adjacent fields and radio/checkbox groups
Vertical
Inline
Checkboxes
Purpose
Users need to specify which option(s) from a set are applicable/valid/true based on a label.
Description
A set of checkboxes are used when a user is able to select none, one, or multiple options
A single checkbox is used when a user is able to select or not select an option
When clicked, a checkbox’s state toggles between unchecked and checked
Checkboxes can have an indeterminate state that is set based on external interactions (e.g., indicating that some but not all items in a collection are selected)
Checkbox labels should use sentence casing
Use concise labels
Align vertically when possible
Align in shorter columns if there are many options
The selected state of a checkbox should ideally indicate something ‘positive’ and may require the rephrasing of the label (e.g., Send me weekly reminders, vs. Do not send me weekly reminders)
Ensure there is adequate spacing between adjacent fields and radio/checkbox groups
Vertical
Inline
Toggle switches
Purpose
Users need to toggle an option between on/off or yes/no.
Description
Use a toggle switch for a binary option where the change occurs immediately. Use a checkbox instead if the user has to perform other actions for the change to be effective (e.g., pressing Save or Submit).
Select
Purpose
The user needs to choose an option from a predefined set.
Description
A select, sometimes referred to as a combo box, provides functionality for choosing an option from a set
It is similar to dropdown button but facilitates item selection, filtering, and reflects the currently selected value
When clicked, the user is shown all available options and can make a selection
When a selection is made, the dropdown closes and the select control updates to reflect the current selection
If there are 5 or more options, the list should allow for filtering via a text field
For empty selects, use a placeholder in the format of Select a [type]... or Select...
Example uses https://github.com/ivaynberg/select2 for demo purposes.
Multi-select
Multi-select with select2
Date picker
Depending on the JS library used for the date picker, functionality may vary.
Date pickers can provide:
Navigating years and months via previous/next arrows and/or other dropdowns
Multi-calendar views
Range highlighting
Min and max allowable dates
Highlighting/disabling of days/rows/columns (e.g., disable weekends or highlight bi-week)
Ability to type date as well as use a calendar dropdown
Example uses jQuery UI for demo purposes.
Time picker
Depending on the JS library used for the time picker, functionality may vary.
Time pickers can provide:
Up/down keyboard selection
Incremental time selection (example: 10min/15min/30min/45min)
Depending on the JS library used for the slider, functionality may vary.
Sliders can provide:
Min and max allowable values
Visible ticks (or pips)
Step increments
Multi-handle range
Example uses https://github.com/leongersen/noUiSlider for demo purposes.
Rich text editor
The rich text editor allows for text input with additional formatting and inline images/links. Only include the functionality/buttons/tools necessary for the specific purpose.


Florida State vs. Alabama State: Game Time, Spread, Channel, Announcers
by Tzvi MachlinThe Florida State Seminoles will look to get that coveted sixth win of the season when they take on the Alabama State Hornets.
To say that the 2019 season has been a disaster for Florida State might almost be an insult to disasters. And yet, despite firing head coach Willie Taggart, dealing with a multitude of injuries and troubles at quarterback, the Seminoles need just one win to secure bowl eligibility.
Alabama State have been a rather average FCS team this year. They lost their only other game against an FBS team, in their season opener against UAB. Though they’re 4-4 with a respectable offense, it’s hard to imagine the Hornets pulling off an FCS over FBS upset.
Given how often Power Five teams crush their FCS opposition, the ‘Noles have been listed as massive favorites over the Hornets. They’ll be favored by nearly six touchdowns at home.
Here are the details for the game:
Game Time: 12:00 PM ET
Channel: ACC RSNs
Spread: Florida State -41.5
Over/Under: 54.5
Announcers: Tom Werme, James Bates, Kelsey Wingert
The game will undoubtedly have massive implications for interim head coach Odell Haggins.
A win over Alabama State combined with a competitive game against Florida next week would make a huge case for him being named to the position full time. It’s certainly something the players seem to want.


Boilerplate Marionette application to help you get started with the best tools and best practices
Part of the BoilerplateMVC suite.


|
Perl Weekly
Issue #150 - 2014-06-09 - Hot? Cold? Exotic? Urban? Don't Worry: We Have a Conference For You
latest | archive | by Yanick Champoux
|
|
If you are looking for conferences to attend, this week's edition of the Perl Weekly will make you very happy indeed. In addition of reports of conferences that just ended (and will be back next year), we have announcements for quite a few conferences and workshops happening this summer and fall: Florida, Switzerland, Grenada, Austria, the buffet is as varied as it is appetizing. ~ Yanick
|
|
|
|
Sponsors
|
|
|
GitTip profile of the week
GitTip allows you to give a regular weekly monetary gift to people in order to encourage them to do more of the awesome stuff they have been doing. The gifts can be as low as 1 cent a week. In this section every week you will see a different Perl developer we recommend you support. Oh, and the Perl Weekly itself also has a GitTip account.
|
chromatic, author of Modern Perl
chromatic is the author of Modern Perl, a book that for the last few years fills the niche of presenting Perl via the lense of its modern best practices. The electronic versions of the book (pdf, ePub, mobi) are available for free, and the raw source of the book itself is available on GitHub.
|
|
Announcements
|
|
|
|
|
Swiss Perl Workshop has ROOM
Hunting for conferences that are not in exotic, incredibly warm places? The Swiss Perl Workshop now has rented its locale.
|
|
II Does Training
Infinity Interactive's list of YAPC::NA courses. Yes, there is still time to register for these!
|
|
|
|
Granada Perl Workshop
Hankering for conferences in exotic locations? The Granada Perl Workshop is going to take place on Friday, June the 27th, Salvador Fandino reminds us.
|
|
Articles
|
|
|
What I learned in college because I had to use mainframes
As a follow-up to Andy Lester's article of last week, Joe McMahon reminesces about the days where computers's weight (in tons) and storage capacity (in megs) were roughly equivalent, and how that wildly different paradigm shaped his skills.
|
|
|
|
Perl in a Developing Country
This entry is the first of a series, where Kasek Galgal plans to explore the role and potential of Perl in developing countries.
|
|
|
|
Code
|
Removing Perl Boilerplate with Import::Into
Perl 5.20 gives us a few more shiny tools to play with, but enabling them usually requires a line or two more of boilerplate code at the top of your files. Mike Friedman wants the former very much, but isn't too keen on the latter.
|
|
List::Util additions in Perl 5.20
List::Util and List::MoreUtils are a cornucopia of useful functions. LeoNerd tells us about the latest changes that come to them for, and in the wake of, the 5.20.0 release.
|
|
Cleaning up your DarkPAN
Steven Haryanto shares a few more tools useful for the scrubbing and clean-up the old releases of one's CPAN account.
|
|
Etsy's skyline port to perl
The original skyline uses Python's numpy and scipy. Here we have a port of its algorithms in Perl's own PDL.
|
|
|
|
Fun
|
playing with Cairo
Dmitry Karasik is porting a First-Person engine in Perl using Cairo. Good news, the coding was smooth sailing. Bad news, performance is not quite the zippiest.
|
|
Video
|
|
|
CSV Less complicated
In direct from NLPW::2014, Merijin Band (Tux) presents "CSV Less complicated". (40 min)
|
|
|
|
|
|
Weekly collections
|
|
|
|
|
Perl Maven Tutorials
|
|
|
Events
|
Perl-related events
In the following cities: Paris (FR), St. Petersburg (Ru), Orlando (FL/USA), Granada (ES), Sofia (BG), Tokyo (JP), Flörli Olten (CH), Salzburg (AT)
|
|
You know, you could get the Perl Weekly right in your mailbox. Every Week. Free of charge!
|


Usage: docker events [OPTIONS]
Get real time events from the server
Options:
-f,
--filter filter Filter output based on conditions provided
--format
string Format the output using the given Go template
--since
string Show all events created since timestamp
--until
string Stream events until this timestamp


Welcome to the OpenPSE website. If you continue to browse and use this website, you are agreeing to comply with and be bound by the following terms and conditions of use. This governs OpenPSE's relationship with you in relation to this website. If you disagree with any part of these terms and conditions, please do not use our website.
The term 'OpenPSE' or 'us' or 'we' refers to the owner of the website. The term 'you' refers to the user or viewer of our website.
The use of this website is subject to the following terms of use:
-
The content of the pages of this website is for your general information and use only. It is subject to change without notice.
-
Neither we nor any third parties provide any warranty or guarantee as to the accuracy, timeliness, performance, completeness or suitability of the information and materials found or offered on this website for any particular purpose. You acknowledge that such information and materials may contain inaccuracies or errors and we expressly exclude liability for any such inaccuracies or errors to the fullest extent permitted by law
-
Your use of any information or materials on this website is entirely at your own risk, for which we shall not be liable. It shall be your own responsibility to ensure that any products, services or information available through this website meet your specific requirements.
-
From time to time, this website may also include links to other websites. These links are provided for your convenience to provide further information. They do not signify that we endorse the website(s). We have no responsibility for the content of the linked website(s).


ddl.ExportSymbol
Authors:
Eric Anderton
License:
BSD Derivative (see source for details)
struct ExportSymbol;
Defines a symbol within a DynamicModule.
- SymbolType type;
- The type of the symbol.
- void* address;
- The address of the symbol.
In some very rare cases, this may be a $B(null) value. It is reccomended that the developer test
against ExportSymbol.init if they wish to determine if an ExportSymbol has been set/defined.
- char[] name;
- The name of the symbol.
Invariably, this string will contain the "mangled" name that the compiler generates for
the symbol. For D Modules, this will contain a properly mangled D symbol, per the D ABI.
C symbols are usually exported as an underscore followed by the identifier as it reads in
the source-code. For C++, ASM and other languages, the results are much more varied and are usually
compiler dependent. It is not reccomended to code against these types of symbols literally
if it can be at all avoided.
- bool isResolved();
- Returns the resolution status of this symbol.
- static ExportSymbol NONE;
- Can be used as an empty symbol, e.g.
return ExportSymbol.NONE;
- char[] getTypeName();
- Returns a friendly name for the type of symbol, based on it's 'type' member.


Inherits IEquatable< Vector3 >.
|
|
static Vector3 | Add (Vector3 value1, Vector3 value2) |
| |
|
static void | Add (ref Vector3 value1, ref Vector3 value2, out Vector3 result) |
| |
|
static Vector3 | Barycentric (Vector3 value1, Vector3 value2, Vector3 value3, float amount1, float amount2) |
| |
|
static void | Barycentric (ref Vector3 value1, ref Vector3 value2, ref Vector3 value3, float amount1, float amount2, out Vector3 result) |
| |
|
static Vector3 | CatmullRom (Vector3 value1, Vector3 value2, Vector3 value3, Vector3 value4, float amount) |
| |
|
static void | CatmullRom (ref Vector3 value1, ref Vector3 value2, ref Vector3 value3, ref Vector3 value4, float amount, out Vector3 result) |
| |
|
static Vector3 | Clamp (Vector3 value1, Vector3 min, Vector3 max) |
| |
|
static void | Clamp (ref Vector3 value1, ref Vector3 min, ref Vector3 max, out Vector3 result) |
| |
|
static Vector3 | Cross (Vector3 vector1, Vector3 vector2) |
| |
|
static void | Cross (ref Vector3 vector1, ref Vector3 vector2, out Vector3 result) |
| |
|
static float | Distance (Vector3 vector1, Vector3 vector2) |
| |
|
static void | Distance (ref Vector3 value1, ref Vector3 value2, out float result) |
| |
|
static float | DistanceSquared (Vector3 value1, Vector3 value2) |
| |
|
static void | DistanceSquared (ref Vector3 value1, ref Vector3 value2, out float result) |
| |
|
static Vector3 | Divide (Vector3 value1, Vector3 value2) |
| |
|
static Vector3 | Divide (Vector3 value1, float value2) |
| |
|
static void | Divide (ref Vector3 value1, float divisor, out Vector3 result) |
| |
|
static void | Divide (ref Vector3 value1, ref Vector3 value2, out Vector3 result) |
| |
|
static float | Dot (Vector3 vector1, Vector3 vector2) |
| |
|
static void | Dot (ref Vector3 vector1, ref Vector3 vector2, out float result) |
| |
|
static Vector3 | Hermite (Vector3 value1, Vector3 tangent1, Vector3 value2, Vector3 tangent2, float amount) |
| |
|
static void | Hermite (ref Vector3 value1, ref Vector3 tangent1, ref Vector3 value2, ref Vector3 tangent2, float amount, out Vector3 result) |
| |
|
static Vector3 | Lerp (Vector3 value1, Vector3 value2, float amount) |
| |
|
static void | Lerp (ref Vector3 value1, ref Vector3 value2, float amount, out Vector3 result) |
| |
|
static Vector3 | Max (Vector3 value1, Vector3 value2) |
| |
|
static void | Max (ref Vector3 value1, ref Vector3 value2, out Vector3 result) |
| |
|
static Vector3 | Min (Vector3 value1, Vector3 value2) |
| |
|
static void | Min (ref Vector3 value1, ref Vector3 value2, out Vector3 result) |
| |
|
static Vector3 | Multiply (Vector3 value1, Vector3 value2) |
| |
|
static Vector3 | Multiply (Vector3 value1, float scaleFactor) |
| |
|
static void | Multiply (ref Vector3 value1, float scaleFactor, out Vector3 result) |
| |
|
static void | Multiply (ref Vector3 value1, ref Vector3 value2, out Vector3 result) |
| |
|
static Vector3 | Negate (Vector3 value) |
| |
|
static void | Negate (ref Vector3 value, out Vector3 result) |
| |
|
static Vector3 | Normalize (Vector3 vector) |
| |
|
static void | Normalize (ref Vector3 value, out Vector3 result) |
| |
|
static Vector3 | Reflect (Vector3 vector, Vector3 normal) |
| |
|
static void | Reflect (ref Vector3 vector, ref Vector3 normal, out Vector3 result) |
| |
|
static Vector3 | SmoothStep (Vector3 value1, Vector3 value2, float amount) |
| |
|
static void | SmoothStep (ref Vector3 value1, ref Vector3 value2, float amount, out Vector3 result) |
| |
|
static Vector3 | Subtract (Vector3 value1, Vector3 value2) |
| |
|
static void | Subtract (ref Vector3 value1, ref Vector3 value2, out Vector3 result) |
| |
|
static Vector3 | Transform (Vector3 position, Matrix matrix) |
| |
|
static void | Transform (ref Vector3 position, ref Matrix matrix, out Vector3 result) |
| |
|
static void | Transform (Vector3[] sourceArray, ref Matrix matrix, Vector3[] destinationArray) |
| |
|
static void | Transform (Vector3[] sourceArray, int sourceIndex, ref Matrix matrix, Vector3[] destinationArray, int destinationIndex, int length) |
| |
| static Vector3 | Transform (Vector3 vec, Quaternion quat) |
| | Transforms a vector by a quaternion rotation. More...
|
| |
| static void | Transform (ref Vector3 value, ref Quaternion rotation, out Vector3 result) |
| | Transforms a vector by a quaternion rotation. More...
|
| |
| static void | Transform (Vector3[] sourceArray, ref Quaternion rotation, Vector3[] destinationArray) |
| | Transforms an array of vectors by a quaternion rotation. More...
|
| |
| static void | Transform (Vector3[] sourceArray, int sourceIndex, ref Quaternion rotation, Vector3[] destinationArray, int destinationIndex, int length) |
| | Transforms an array of vectors within a given range by a quaternion rotation. More...
|
| |
|
static Vector3 | TransformNormal (Vector3 normal, Matrix matrix) |
| |
|
static void | TransformNormal (ref Vector3 normal, ref Matrix matrix, out Vector3 result) |
| |
|
static bool | operator== (Vector3 value1, Vector3 value2) |
| |
|
static bool | operator!= (Vector3 value1, Vector3 value2) |
| |
|
static Vector3 | operator+ (Vector3 value1, Vector3 value2) |
| |
|
static Vector3 | operator- (Vector3 value) |
| |
|
static Vector3 | operator- (Vector3 value1, Vector3 value2) |
| |
|
static Vector3 | operator* (Vector3 value1, Vector3 value2) |
| |
|
static Vector3 | operator* (Vector3 value, float scaleFactor) |
| |
|
static Vector3 | operator* (float scaleFactor, Vector3 value) |
| |
|
static Vector3 | operator/ (Vector3 value1, Vector3 value2) |
| |
|
static Vector3 | operator/ (Vector3 value, float divider) |
| |
|
static | operator SFML.System.Vector3f (Vector3 vector) |
| |
|
static | operator Vector3 (SFML.System.Vector3f vector) |
| |
Struct for representing a Vector3.


We love sharing and discovering music and videos with people from around the world. We believe that listening to music and watching videos chosen by real people - just like you - creates a far more interesting journey. That is why we created lounger.


Cloud
Cloud computing is the on-demand availability of computer system resources, especially data storage and computing power, without direct active management by the user. The term is generally used to describe data centers available to many users over the Internet.
Working Outline (John - Thursday Aug 15 - actively working on this heavily this weekend)
- Module 1 – Into the Cloud - The story of getting to the Cloud
What are the business drivers and technologies that have led to the Digital Transformation that is driving us to the Cloud. We follow the rise of the internet and the contributions of Sir Tim in developing the World Wide Web that triggered IoT and the tidal wave of data. He wanted to make the data from CERN visible to others across the world. By devising HTML the markup languate and HTTP the protocol layered on TCP he made this widely successful. In the early 2000s the rise of IoT, invented here at MIT allowed not only passive access to data already in storage but access to "live" data generated by IoT devices.
-
Module 2 Big Data, Open Source Software and the Cloud (Bread Machine on Steriods)
The story of IoT is one of devices that gather data and connect to servers that aggregate that data into powerful data stores. We trace the rise of the Browser as a data integrator that allows us to scale our systems across the world.
At the same time we trace the affect of Open Source Software as a driver of rapid innovation. In particular we look at Node.js, JavaScript and NPM (Node Package Manager) in allowing companies to build powerful web platforms. In our exercises we look the importance of Web Servers, URLs and Routes that allow us to connect to and control devices across the world. Using these we can control a camera in our home or in Hong Kong with the same ease - physical distance being no problem
-
Module 3 - Containers and Orchestration
Containers, such as Docker allow users to run images that are independent of operating system. We will use Docker to download an image that already exists in DockerHub and run it in a Docker container on our laptop.
-
Module 4 – DevOps (lots of material on this)
-
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. Quote by C.A.R. Hoare, 1980 ACM Turing Award Lecture
Today software development has moved from designers throwing their software "over-the-wall" to testers and the testers repeating the process with software operations. Now these roles are disappearing and there are just software engineers who design, test and deploy their software.
In order to simplify the complexity of the product designers strip it down to the Minimal Viable Product. They don’t put in any feature that is not absolutely necessary.
-
Module 5 – DevOpsTest, DevOpsSec (the story of Microsoft, Level 1, Level 2,…)
-
Module 6 – Serverless
Flows on from loosely coupled architectures of Modules 4,5
-
Module 7 - The Agile Corporation
For the last hundred years companies have been applying optimization techniques to improve their "core" business. Today over 50% of the FT 500 companies from 2000 are gone. Will your company be next? Remember size is no defense. General Electric is stumbling, BlackBerry is gone as is Nokia, a $150 billion corporation.
One major insight is that data is the new "gold". Every company needs data about its products, and how they perform. Every company needs data about its customers.
As we saw in the bread making exercise, product design is not just about the physical entity, its also about the embedded chips which monitor the product and send data back to the manufacturer. Its about understanding how your customer uses your product and how they would like your product to perform.
In order for a company to compete it must be agile - we call it the New Agile Corporation. Here we discuss what it means to be agile.
-
Module 8 - Cloud Native Computing- Latest Developments Kubernetes etc
Module 1 - Into the Cloud
The story of getting to the Cloud
What are the business drivers and technologies that have led to the Digital Transformation that is driving us to the Cloud. We follow the rise of the internet and the contributions of Sir Tim in developing the World Wide Web that triggered IoT and the tidal wave of data. He wanted to make the data from CERN visible to others across the world. By devising HTML the markup languate and HTTP the protocol layered on TCP he made this widely successful.
In the early 2000s the rise of IoT, invented here at MIT allowed not only passive access to data already in storage but access to "live" data generated by IoT devices. Slides - WWW-->IoT-->Big Data--> Machine Learning--> Cloud
Slides by Eric Terrell
Video - Getting ahead in the cloud (Eric Terrell, Public Cloud Practice Manager, AHEAD)
there are some good slides on the problem of keeping local data center busy.
The idea here is a before vs after comparison. Students should spend about 20-30mins designing the bread making machine. They should not yet have heard about the power of collecting data about the device performance (IoT) or data on the customer.
Video - Build a Web Site in GitHub
What are the business drivers and technologies that have led to the Digital Transformation that is driving us to the Cloud. We follow the rise of the internet and the contributions of Sir Tim in developing the World Wide Web that triggered IoT and the tidal wave of data. He wanted to make the data from CERN visible to others across the world. By devising HTML the markup languate and HTTP the protocol layered on TCP he made this widely successful.
In the early 2000s the rise of IoT, invented here at MIT allowed not only passive access to data already in storage but access to "live" data generated by IoT devices. Slides - WWW-->IoT-->Big Data--> Machine Learning--> Cloud
Journey to the Cloud
Why do companies move from a private data center to using the public cloud?Slides by Eric Terrell
Video - Getting ahead in the cloud (Eric Terrell, Public Cloud Practice Manager, AHEAD)
there are some good slides on the problem of keeping local data center busy.
Exercise 1 - Design a Bread Maker
Design a Bread Making MachineThe idea here is a before vs after comparison. Students should spend about 20-30mins designing the bread making machine. They should not yet have heard about the power of collecting data about the device performance (IoT) or data on the customer.
Exercise - Build a Web Site in GitHub
Build a Web Site in GitHubVideo - Build a Web Site in GitHub
Module 2 - Big Data, Open Source Software and the Cloud
Web Servers and Web Sites
The story of IoT is one of devices that gather data and connect to servers that aggregate that data into powerful data stores. We trace the rise of the Browser as a data integrator that allows us to scale our systems across the world.We show how to gather data from hundreds or thousands of sensors or to control those sensors just using a Web Servers.
At the same time we trace the effect of Open Source Software as a driver of rapid innovation. In particular we look at Node.js, JavaScript and NPM (Node Package Manager) in allowing companies to build powerful web platforms.
In our exercises we look the importance of Web Servers, URLs and Routes that allow us to connect to and control devices across the world. Using these we can control a camera in our home or in Hong Kong with the same ease - physical distance being no problem.
We also look at two standards for communication, namely HTTP and Web Sockets. HTTP is a simple protocol, which is so small it can be written on a business card. It is the standard for communicating with a Browser to a Web Server. Its "header" contains information about the browser, the machine IP and port address that its sent from and the machine IP and port address of its destination. For security HTTPS also includes a mechanism for encryption, which makes communication more secure. The downside of HTTP and HTTPS is that its a fairly bulky header and therefore we often switch to Web Sockets once communication has been "set-up".
In the exercise below we show how to set up a simple message server which can send messages to a group of people who only can communicate via their browser.
Exercise
Video - Now Go Build a Roti Maker (We now show the this video and ask them to redesign their bread making machine. Hopefully they have a hah-ha moment)Now you understand the importance of data - ReDesign your Bread Making Machine
Exercise - Express Web Server for collecting Data
Video of PacMan Exercise
Exercise - Chat Server using Web Sockets (fix this)
Video of Chat Server (fix this)
Module 3 - Containers and Orchestration
Containers, such as Docker allow users to run images that are independent of operating system. We will use Docker to download an image that already exists in DockerHub and run it in a Docker container on our laptop. This means that anyone can now distribute their code by creating a Docker image. This image can run on any operating system because it will run in a standardized Docker container.
Now suppose I want to set up several docker containers (lets say 3 containers called A, B and C) on my laptop all running the same code and I want them to all communicate, say on port 3000. If you think about it, this raises a problem. The message header from any container will contain the machine name and the port number. But my machine only has one port 3000 so how does it know which container is its correct destination? The answer is that each container can map its port 3000 to different machine level ports. So container A port 3000 --> 8001, B port 3000 --> 8002, and C port 3000 --> 8003. So a message address to IP X:8002 will go to container B port 3000. This mapping is done in the Dockerfile and its a very powerful mechanism for testing code. (maybe an Exercise on this would be good).
Overview of Docker Containers
NodeJS
NodeJS + Mongo
Python + Mongo
Create and publish a Docker Image
Run the Ghost Blog Server in a Docker Container on your Laptop
Now suppose I want to set up several docker containers (lets say 3 containers called A, B and C) on my laptop all running the same code and I want them to all communicate, say on port 3000. If you think about it, this raises a problem. The message header from any container will contain the machine name and the port number. But my machine only has one port 3000 so how does it know which container is its correct destination? The answer is that each container can map its port 3000 to different machine level ports. So container A port 3000 --> 8001, B port 3000 --> 8002, and C port 3000 --> 8003. So a message address to IP X:8002 will go to container B port 3000. This mapping is done in the Dockerfile and its a very powerful mechanism for testing code. (maybe an Exercise on this would be good).
Overview of Docker Containers
Why do we care about containers?
Docker FundamentalsShould everyone care about containers?
Fundamental Building Blocks of Modern SystemsDocker Commands
Useful docker commandsDocker on Local Machine
Loading Docker and Provisioning a Node/Express in a Docker ContainerMore Docker Examples
NginxNodeJS
NodeJS + Mongo
Python + Mongo
Create and publish a Docker Image
Exercise
Run Ghost Blog in a Docker Container. Close from GitHub then run "docker-compose up" in a command window.Run the Ghost Blog Server in a Docker Container on your Laptop
Module 4 - DevOps
There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. Quote by C.A.R. Hoare, 1980 ACM Turing Award Lecture
Today software development has moved from designers throwing their software "over-the-wall" to testers and the testers repeating the process with software operations. Now these roles are disappearing and there are just software engineers who design, test and deploy their software.
In order to simplify the complexity of the product designers strip it down to the Minimal Viable Product. They don’t put in any feature that is not absolutely necessary.
Repeated operations are systematized and optimized and decisions are driven by actual data gleened from testing and actual deployment.
The history of DevOps has its roots in manufacturing, going back to the Toyota Production System, Theory of Constraints, and Lean Engineering. Below we trace this history and explain how DevOps has transformed software.
Moving to the Cloud, Case Study of Microsoft TFS
Microsoft TFS Case Study
DevOps and its Origins - Toyota Production System, Theory of Constraints, Lean Engineering, Agile Software Development
Software Architecting Principles (Roger Sessions and Loose Coupling Architectures)
Today software development has moved from designers throwing their software "over-the-wall" to testers and the testers repeating the process with software operations. Now these roles are disappearing and there are just software engineers who design, test and deploy their software.
In order to simplify the complexity of the product designers strip it down to the Minimal Viable Product. They don’t put in any feature that is not absolutely necessary.
Repeated operations are systematized and optimized and decisions are driven by actual data gleened from testing and actual deployment.
The history of DevOps has its roots in manufacturing, going back to the Toyota Production System, Theory of Constraints, and Lean Engineering. Below we trace this history and explain how DevOps has transformed software.
Moving to the Cloud, Case Study of Microsoft TFS
Microsoft TFS Case Study
DevOps and its Origins - Toyota Production System, Theory of Constraints, Lean Engineering, Agile Software Development
Software Architecting Principles (Roger Sessions and Loose Coupling Architectures)
Module 5 – DevOpsTest, DevOpsSec (the story of Microsoft, Level 1, Level 2,…)
How do we test in the cloud? How do we test in containers in the cloud?
Case Study of Microsoft Testing in the Cloud
Microsoft Testing Case Study
Case Study of Microsoft Testing in the Cloud
Microsoft Testing Case Study
Exercise Circle CI Push to GitHug and use Circle CI to test
Module 6 - Serverless
This show how to use Serverless Lambda functions on AWS to read and write (CRUD) to the DynamoDB.Module 7 - The Agile Corporation
For the last hundred years companies have been applying optimization techniques to improve their "core" business. Today over 50% of the FT 500 companies from 2000 are gone. Will your company be next? Remember size is no defense. General Electric is stumbling, BlackBerry is gone as is Nokia, a $150 billion corporation.
One major insight is that data is the new "gold". Every company needs data about its products, and how they perform. Every company needs data about its customers.
As we saw in the bread making exercise, product design is not just about the physical entity, its also about the embedded chips which monitor the product and send data back to the manufacturer. Its about understanding how your customer uses your product and how they would like your product to perform.
In order for a company to compete it must be agile - we call it the New Agile Corporation. Here we discuss what it means to be agile.
Agile Corporation
One major insight is that data is the new "gold". Every company needs data about its products, and how they perform. Every company needs data about its customers.
As we saw in the bread making exercise, product design is not just about the physical entity, its also about the embedded chips which monitor the product and send data back to the manufacturer. Its about understanding how your customer uses your product and how they would like your product to perform.
In order for a company to compete it must be agile - we call it the New Agile Corporation. Here we discuss what it means to be agile.
Agile Corporation
Module 8 - Cloud Native Computing
Kubernetes, Monitoring in the Cloud, The Microsoft Testing Story, Quality Software, Sample Cloud Architectures
Exercise
Cost out your own Data CenterExercise
AWS Kubernetes VideoAWS Exercises
This is putting up a web page on AWS S3 storage. This is a static web site. It would be a good follow on to using GitHub to host a static web site.
Static Web Site from AWS S3 storage
Video AWS -S3 Static Web Site
This puts an Express web server on load balanced machines. It provisions the machines from DockerHub image. So part one generates the image and puts it on DockerHub (good intro to Docker images) and part two uses the image on a cluster of EC2 machines
Express Web Server Docker Image Generation
Express Web Server - load docker image from DockerHub
Video AWS -S3 Static Web Site
This adds a DynamoDB database to an Express Web Server and follows on from the previous example. AWS DynamoDB example
Video AWS DynamoDB
Static Web Site from AWS S3 storage
Video AWS -S3 Static Web Site
This puts an Express web server on load balanced machines. It provisions the machines from DockerHub image. So part one generates the image and puts it on DockerHub (good intro to Docker images) and part two uses the image on a cluster of EC2 machines
Express Web Server Docker Image Generation
Express Web Server - load docker image from DockerHub
Video AWS -S3 Static Web Site
This adds a DynamoDB database to an Express Web Server and follows on from the previous example. AWS DynamoDB example
Video AWS DynamoDB


Lesson
Plan Title: How to
Perform Http Splitting
Concept /
Topic To Teach:
This lesson
teaches how to perform HTTP Splitting attacks.
How the
attacks works:
The attacker
passes malicious code to the web server together with normal input. A victim
application will not be checking for CR (carriage return, also given by %0d or
\r) and LF (line feed, also given by %0a or \n)characters. These characters not
only give attackers control of the remaining headers and body of the response
the application intends to send, but also allows them to create additional
responses entirely under their control.
The effect of an HTTP Splitting attack is maximized when accompanied with a
Cache Poisoning. The goal of Cache Poisoning attack is to poison the cache of
the victim by fooling the cache to believe that the page hijacked using the
HTTP splitting is a good one and it is indeed the server's copy.
The attack happens using the HTTP Splitting attack plus adding the Last-Modified:
header and setting it to a future date. This will force the browser to send If-Modified-Since
request header, which gives the attacker the chance to intercept the server's
reply and replace it with a '304 Not Modified' reply. A sample of a 304 response
is:
HTTP/1.1 304 Not Modified
Date: Fri, 30 Dec 2005 17:32:47 GMT
General
Goal(s):
This lesson has two stages. Stage 1 teaches you how to do HTTP Splitting attacks while
stage 2 builds on that to teach you how to elevate HTTP Splitting to Cache Poisoning.
Enter a language for the system to search by. You will notice that the
application is redirecting your request to another resource on the server. You
should be able to use the CR (%0d) and LF (%0a) to exploit the attack. Your
exercise should be to force the server to send a 200 OK. If the screen changed
as an effect to your attack, just go back to the homepage and after stage 2 is
exploited successfully you will find the green check in the left menu.
Solution:
Please note that this solution is written for Windows. If you use Linux you have to alter it.
Windows uses a CR and LF for new Line. Linux uses only LF.
So all the %0d%0a have to be replaced by %0a if you are using Linux.
Because the
input is not validated you can inject any HTTP syntax, carriage returns and
line-feed you want.
Enter a
language to examine what's going on. You do have WebScarab intercepting HTTP
requests and responses?
Figure 1 Language en
Figure 2 HTTP Request
Figure 3 First HTTP Response
Figure 4 Second HTTP Request
Now inject
for the language en%0d%0a%0d%0a%0d%0a
Figure 5 First HTTP Request
Figure 6 First HTTP Response
The
Content-Length: 0 will tell the server that the first request is over.
A 200 OK
message looks like this: HTTP/1.1 200 OK
Lets see what
you can do with: foobar%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2047%0d%0a%0d%0aHacked
J
Figure 7 HTTP Splitting attack
Figure 8 HTTP Response
Figure 9 Second HTTP Request
Figure 10 Second HTTP Response
Figure 11 Hacked!
Hit the "Back"
button of your browser.
Figure 12 Stage 1 completed
Now you know
how to do HTTP Splitting. You can abuse this technique to do a cache poisoning
attack.
Cache
poisoning requires manipulating the Last-Modified header. This must be changed
to a date in the future.
Inject: foobar%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aLast-Modified:%20Mon,%2027%20Oct%202003%2014:50:18%20GMT%0d%0aContent-Length:%2047%0d%0a%0d%0aHacked
J
Figure 13 Inject cache poisoning
| Solution by Erwin Geirnaert |


Defines a top-level container for all the elements necessary to describe a C++ namespace.
The <cxxNamespace> topic type contains elements to specify the name of the namespace and to describe the variables and functions within the namespace.
The cxxNamespace topic contains the following elements:


This is the homepage test.
This controller returns a stub HtmlResponse, which gets written into the Psr 7 response by the Slim Auryn Invoker library.