About Me
Hello, my name is Konstantin Koschke and I am a senior software/IT consultant. I was molded in critical environments and numerous meetings with management, always keeping business value and high quality in mind. If allowed, I let new technologies try their best.
Experience
Developing models in the field of statistical physics and conducting numerical calculations using molecular dynamics simulations turns out to be a solid basis for correct and performant software engineering.
Education
Johannes Gutenberg University
Diploma in Physics
2004 - 2010
University of California, Berkeley
Physics, Year Abroad
2005 - 2006
Grateful for the scholarship from the Evangelisches Studienwerk Villigst e.V.
TU Kaiserslautern
Distance Learning Mathematics and Physics
2003 - 2004
During the mandatory community service
A Little More About Me
Keeping up-to-date with technology leaves little time for other interests and hobbies - nevertheless, these are:
- Biking (street, mountain)
- Hiking
- Coffee


The purpose of this site is to analyze the quality of gallery modules. See more information about modules here: http://yuilibrary.com/gallery/
The full source code for this tool is available on my GitHub account


In order to gain a good understanding of the design of register machines, we must test the machines we design to see if they perform as expected. One way to test a design is to hand-simulate the operation of the controller, as in exercise \ref{ex:hand-sim}. But this is extremely tedious for all but the simplest machines. In this section we construct a simulator for machines described in the register-machine language. The simulator is a Source program with four interface functions. The first uses a description of a register machine to construct a model of the machine (a data structure whose parts correspond to the parts of the machine to be simulated), and the other three allow us to simulate the machine by manipulating the model:
As an example of how these functions are used, we can define gcd_machine() to be a model of the GCD machine of section \ref{sec:register-machine-language} as follows:
a % b)), list("=", binary_function((a, b) => a === b))), list("test-b", test(op("="), reg("b"), constant(0)), \end{JavaScriptClickable} \end{lrbox} \begin{JavaScriptClickable} /*!\href{https://sourceacademy.nus.edu.sg/playground#chap=5&prgrm=GYVwdgxgLglg9mABAcwgEwPoFsCGEAWMYApgBQCUiA3gFCL2IBOxUIjSuA1sdnoSaQA2MAM5RSAIhwSANIgkAjWfKgTyMugy3ad24WKGjxE5lmUKiORgE8MoSLASlSOOQsoBeAHyIciAKSI7uqaumHhDPrGHuaWNnbg0PBgzq5Bnj5+Htnp5CERBZFGklDEYgC0ShqFNVqlBnAADpIx6kzEyJJKbRAIYjhg4gAMedW1tQqMAwRCOArEgpKoaOVoCMRq+eM1OCIiMMgpEqpyUaRNkqZqcsydUtftd92jodsRu-uHktKnxbddmy2b3eewORyqiDO-2OgLGwPCyDgGCgcFm80WxzKUEqmzh8N0EmWq3WmwA3DQAL5AA}{\usebox\lstbox}!*/ branch(label("gcd-done")), assign("t", list(op("rem"), reg("a"), reg("b"))), assign("a", list(reg("b"))), assign("b", list(reg("t"))), go_to(label("test-b")), "gcd-done")); } \end{JavaScriptClickable}


We're sorry but Mindexer doesn't work properly without JavaScript enabled. Please enable it to continue.


About {$Think.session.config.website_ename}
This is an ordinary website, made by an ordinary person. The original intention of the production is to let those who are surrounded by loneliness in life feel a little warmth online.
May you and me be treated with tenderness in life. (∩_∩)


{% load static %} {% load humanize %}
A mini trade that offers you the easiest way to buy what you want


Insights are metrics generated based upon tagged and rated data.
They're generated by calculating the average rating you give media with the given tag. This data is then used to generate recommendations (see 'Sort By' in Search).
The data in these tabs will show the average ratings calculated. This can give Insight into the things you like and dislike.
Note that before rating a good amount of media this section (and sorting by recommended will not be very useful).
| Tag | Average Rating | Media Count |
|---|---|---|
| {{ tag.name }} | {{ (tag.average * 2 + 3).toFixed(2) }} | {{ tag.count }} |
| Actor | Average Rating | Media Count |
|---|---|---|
| {{ actor.name }} | {{ (actor.average * 2 + 3).toFixed(2) }} | {{ actor.count }} |
| Artist | Average Rating | Media Count |
|---|---|---|
| {{ artist.name }} | {{ (artist.average * 2 + 3).toFixed(2) }} | {{ artist.count }} |


November 13 - December 29
Christmas at the Zoo
Experience the atmospheric evening with exciting animals and activities in Aalborg zoo. Watch polar bears and
reindeer´s cubs play, meet Santa Claus and enjoy a sensational dinner just a few meters away.
The program is created for all, it doesn't matter if you come with your partner, whole family or alone, there is
enough fun for everyone.
Strolling our fairytale alleys you can for example come across Denmark's only underground christmas shop
among other places where tropical jungle meets Alaskan wilderness. However, not to spoil everything, for the
rest of the surprises you are invited to visit us during this holiday season.
Due to covid-19 restrictions, it is required to pre-purchase tickets to avoid jams. You can do so by clicking the “Buy ticket” button. Also, if you already have an annual card, free ticket or other form of ticket you can “Reserve access” without additional payment, but you cannot enter without reservation.


This database seeks to allow people to track and catalog various pieces of malware currently in use. Please use this website as a way to learn more about malware and to add malware that you find.
| MD5 | Symantec | McAfee | Kaspersky | Date Added |
|---|---|---|---|---|
| {{ vir.MD5 }} | {{ vir.av_scans.Symantec }} | {{ vir.av_scans.McAfee }} | {{ vir.av_scans.Kaspersky }} | {{ vir.time_stamp }} |
|
No Virus Information Found |


Creative, detail-oriented, and motivated to help you understand your business data with comprehensive reports that are done in a timely manner. Well rounded analytical skill from a Bachelor’s in Computer Engineering and a Udacity Deep Learning Nanodegree.
• Generated neural networks without a framework to analyze bike-sharing data and generate sales predictions.
• Designed and developed neural network models with PyTorch to classify the sentiment of IMDB film reviews.
• Deployed an endpoint on AWS API Gateway to receive user data and sends it to AWS Lambda to process user data and sends it to a deployed model ‘s endpoint on AWS Sagemaker. The model classifies a user’s review as positive or negative
• Created opportunities for student-athletes to improve their technique, communication, collaboration, and time management skills.
• Organized and managed the boys program including player development, coaching staff, and advertising.
• Developed, launched, and managed 3 sites with corresponding company brands.
• Setup and monitored internal networks to optimize and secure our data management workflow for 6 departments.
• Developed dashboards and ETF workflow to process our KPIs such as CPA, CPC along with A/B testing results.
• Managed website hosting as well as our development, test, and production deployment pipeline with Heroku.
• Managed all internal emails and other Google tools as our Google admin.
• Collected and labeled location data for various projects to allow Google Engineers to construct improved models for map tools.
• Performed post-processing on geo datasets to organize and properly format satellite data.
• Developed an internal tool that analyzed network traffic in order to generate security reports.
• Trained international colleagues to operate the network analyzer and how to read and gain insights from the generated reports.
• Developing Genomic Data Engine with the Matchmaker Exchange API to sync to the GA4GH’s databases.
• Converting Matchmakers Exchanges JSON objects to MySQL to optimize data store.
• Configuring Seagate’s Kinetic drives using DHCP to access drives over a private network.
• Designing object-oriented database with Seagate’s Kinetic API to organize and store genomic data.
• Taught younger undergraduate students unfamiliar programming concepts in C, Python, and Java.
• Scheduled lesson plans to hold smooth, understandable tutor session.
• Graded with a greater understanding of the material than the students to give out advice and comments along with a grade.
• Collaborated with colleagues outside the technology services to enhance existing applications using C# with ASP .NET and MS SQL Server Management Studios.
• Documented other workflow applications that outsourced contractors wrote for the bank.


|
| Local Properties | ||
| Managed Object Types | Data Object Types | All Properties | All Methods |
Properties
| Name | Type | Description |
|---|---|---|
| configVersion | xsd:string |
The version string of the configuration.
|
| description* | xsd:string |
A description string of the port.
|
| name* | xsd:string |
The name of the port.
|
| scope* | ManagedObjectReference[]
to a ManagedEntity[] | Deprecated.
as of vSphere API 5.5
The eligible entities that can connect to the port. If unset, there
is no restriction on which entity can connect to the port. If set,
only the entities in the specified list or their child entities are
allowed to connect to the port. If scopes are defined at both port
and portgroup level, they are taken as an "AND" relationship. If such
a relationship doesn't make sense, the reconfigure operation will
raise an exception.
|
| setting* | DVPortSetting |
The network configuration of the port.
|
| Properties inherited from DynamicData | ||
| None |
| Top of page | Local Properties | ||
| Managed Object Types | Data Object Types | All Properties | All Methods |


lwIP code documentation
Main Page
|
Alphabetical List
|
Data Structures
|
File List
|
Data Fields
|
Globals
|
Related Pages
chpms.h File Reference
Go to the source code of this file.
Defines
#define
MAX_NT_PASSWORD
256
Functions
void
ChapMS
(
chap_state
*, char *, int, char *, int)
Define Documentation
#define MAX_NT_PASSWORD 256
Definition at line
60
of file
chpms.h
.
Function Documentation
void ChapMS
(
chap_state
*
,
char *
,
int
,
char *
,
int
)
Copyright (c) 2001-2003 Swedish Institute of Computer Science


WITNESS LIST Border and International Affairs Committee February 23, 2005-8:00A HB 775 For: Flores, Rebecca (United Farm Workers/La Union del Pueblo Entero) Prado, Lourdes (La Union del Pueblo Entero/United Farm Workers) On: Jewell, Michael (CPL Retail Energy) Stone, Charlie (Office of Rural Community Affairs) Registering, but not testifying: For: Manley, James (El Paso County Judge Dolores Briones) HB 805 For: Cardoza, James Jay (Self) Cuellar, Jaime (Self) Higgins, Mike (TX State Association of Fire Fighters) Luna, Jesse (Self) Sanchez, Lt. Chris (Self) On: Bavousett, Terry (Department of State Health Services) Registering, but not testifying: For: Sprinkle, G.K. (TX Ambulance Association) Against: Mitchell, Kathy (ACLU Texas/LULAC Texas/Mexican American Legal Defense and Education Fund) HB 925 For: Garcia, Joe (Texas Border Infrastructure Coalition) Registering, but not testifying: For: Kastrin, Deborah (YWCA-El Paso) Martinez, Mario (City of Laredo) Pearson, David (TX Organization of Rural and Community Hospitals) Wardy, Mayor Joe (Self) On: Beverly, Eric (Office of Rural Community Affairs) Cabello, Homero (Department of Housing and Community Affairs) Stone, Charlie (Office of Rural Community Affairs) HB 1099 For: Doggett, Robert (Texas Low Income Housing Information Services) Flores, Rebecca (United Farm Workers/AFL-CIO) Henneberger, John (TX Low Income Housing Information Services/Border Low Income Housing Coalition) On: Briseno, Elias (Department of State Health Services) Carrington, Edwina (Department of Housing and Community Affairs) Irvine, Timothy (Department of Housing and Community Affairs) Registering, but not testifying: For: Kastrin, Deborah (YWCA El Paso) Agency Oversight On: Ward, J. Kevin (Texas Water Development Board)


Click on numbers divisible by 5 to see a hidden pattern! Click on row-headers to toggle row colors. Best viewed on larger screens.


List of freeCodeCamp Projects
laxx.js (mock) documentation
a developer (mock) portfolio
a product (mock) landing page
a survey form
a tribute page


---
layout: chmod-page
title: "chmod x-rx"
description: "Machine Rules! - Prototypes MAC OSX HACKING Processes by Lucas Gatsas"
header-img: ""
---
Update Fr. 8. May 2015 / St. Gallen / Switzerland
Photos by Lucas Gatsas.
Hacking Macintosh HD
SEE HERE THE ARTICLE!
This is my Linux LAB Page - {Linux/ Ubunutu/ Backtrack/ THC - Hydra} - Update the Full Page Soon!
THC HYDRA


Vipers split the weekend
by John LawlessThe Vernon Vipers left this weekend with a split, starting off with a win at home on Friday.
The Vipers narrowly edged the Salmon Arm Silverbacks 2-1 in a shootout. Drew Bennett had the lone regulation goal for the Vipers, and Reilly Herbst made 30 saves. Connor Marritt and Logan Cash were both successful in the shootout.
Game two of their back to back homestand wasn't the same story, as they fell 3-1 to the Langley Rivermen. Connor Sleath scored for the Vipers, and Hunter Donohoe and Matt Kowalski chipped in with the assists.
This weekend has Vernon locked in a tie for fourth place in the tough Interior Division with the Wentachee Wild. They are 10 points back of the Trail Smoke Eaters with three games at hand.
The Vipers will be looking to bounce back on Friday when they welcome the Surrey Eagles to town, who are last place in the Mainland Division.


Argentum is rare, secure, and unique. We believe in scalable, decentralized, censorship-resistant, immutable blockchains.!
Find Out MoreArgentum is rare, secure, and unique. We believe in scalable, decentralized, censorship-resistant, immutable blockchains. Argentum was created in June 2013: Argentum is designed to be a rare commodity that is not only easily and quickly transferable, but gains value over time. The innovation doesn't end there, Argentum is the first crypto-currency to increase transaction processing capabilities over those of Bitcoin. We wanted to create the first cryptographic currency with almost unlimited scalability; Argentum features 10MB max block size. Even more exciting, our latest update will enable Lyra2REv2, Myr-Groestl, Argon2d, and Yescrypt mining for a total of 6 mining algorithms! This will happen around March 13th 2018 at block 2,977,000 We want Argentum to be a long-term stable investment. We will strive to provide an alternative for people who would like diversification into less risky crypto-currency.!
FeaturesArgentum: Uses six cryptographic algorithms; Scrypt with AUXPOW support (Merged Mining) SHA256D with AUXPOW support (Merged Mining) Lyra2REv2 (GPU) Myriad-Groestl (GPU/ASIC) Argon2d (CPU) Yescrypt (CPU/GPU) Max block size 10mb 3 ARG per block
Production: Blocks are discovered every 45 seconds and transactions are fully confirmed every 4.5 minutes. 64 Million total Argentums will be mined. Once this limit is reached, it is increased by 1.1% annually, the rate of human population growth.
Security: Mined blocks mature after 100 confirmations Wallet
With the release of Argentum 4.14.3 you can join P2Pool to mine Lyra2REv2, Myr-Groestl, Argon2d, and Yescrypt: Customized software here LINK
We have a few mining pools supporting Argentum:
You find Argentum for trade here.


AuthleteAuthorizationServerCommand
extends AuthleteCommand
in package
The implementation of the command for "php artisan authlete:authorization-server".
Table of Contents
Properties
- $description : string
- The console command description.
- $signature : string
- The name and signature of the console comand.
Methods
- handle() : mixed
- Execute the console command.
- addApiRoute() : mixed
- Add a route to 'routes/api.php'.
- addWebRoute() : mixed
- Add a route to 'routes/web.php'.
- appendContent() : mixed
- Append a content to a target file.
- copyResourceFile() : mixed
- Copy a file from the resource directoy to the target directory.
- createDirectory() : mixed
- Create a directory if it does not exist.
- getControllerDirectory() : mixed
- Create a directory for controllers ('Http/Controllers/Authlete/') under the application directory.
- getControllerNamespace() : mixed
- Get the name space for the controllers which are created under 'Http/Controllers/Authlete/' directory.
- getCssDirectory() : mixed
- Create a directory for CSS files ('css/authlete/') under the public directory.
- getViewDirectory() : mixed
- Create a directory for views ('views/authlete/') under the resource directory.
- relocateController() : mixed
- Relocate a controller from the resource directory to the controller directory.
Properties
$description
The console command description.
protected
string
$description
= 'Set up for an authorization server and an OpenID provider.'
$signature
The name and signature of the console comand.
protected
string
$signature
= 'authlete:authorization-server'
Methods
handle()
Execute the console command.
public
handle() : mixed
addApiRoute()
Add a route to 'routes/api.php'.
protected
addApiRoute(string $method, string $path, string $controller) : mixed
Parameters
- $method : string
-
An HTTP method such as
post
. - $path : string
-
The path to which the controller is mapped.
- $controller : string
-
The name of a controller.
addWebRoute()
Add a route to 'routes/web.php'.
protected
addWebRoute(string $method, string $path, string $controller) : mixed
Parameters
- $method : string
-
An HTTP method such as
post
. - $path : string
-
The path to which the controller is mapped.
- $controller : string
-
The name of a controller.
appendContent()
Append a content to a target file.
protected
appendContent(string $content, string $targetFile) : mixed
Parameters
- $content : string
-
A content which is appended to the target file.
- $targetFile : string
-
The path of a target file.
copyResourceFile()
Copy a file from the resource directoy to the target directory.
protected
copyResourceFile(string $resourceFile, string $targetDirectory[, bool $overwrite = true ]) : mixed
Parameters
- $resourceFile : string
-
The name of a resource file.
- $targetDirectory : string
-
The path of a target directory.
- $overwrite : bool = true
-
true
to overwrite the target file even if it exists. The default value istrue
.
createDirectory()
Create a directory if it does not exist.
protected
createDirectory(string $path) : mixed
Parameters
- $path : string
-
The path of a directory.
getControllerDirectory()
Create a directory for controllers ('Http/Controllers/Authlete/') under the application directory.
protected
getControllerDirectory() : mixed
getControllerNamespace()
Get the name space for the controllers which are created under 'Http/Controllers/Authlete/' directory.
protected
getControllerNamespace() : mixed
getCssDirectory()
Create a directory for CSS files ('css/authlete/') under the public directory.
protected
getCssDirectory() : mixed
getViewDirectory()
Create a directory for views ('views/authlete/') under the resource directory.
protected
getViewDirectory() : mixed
relocateController()
Relocate a controller from the resource directory to the controller directory.
protected
relocateController(string $controller) : mixed
Parameters
- $controller : string
-
The file name of a controller.


Emergency Management BC (EMBC) will collect your personal information for the purpose of providing you with emergency services in accordance with section 26(c) of the Freedom of Information and Protection of Privacy Act (FoIPPA). EMBC will also collect the information as per section 26(e) of FoIPPA in order to evaluate the ESS program. Should you have any questions about the collection, use, or disclosure of personal information, please contact the ESS Call Centre Manager at PO Box 9201, STN PROV GOVT, Victoria, BC, V8W 9J1 or by phone toll free at 1-800-585-9559.
By submitting your email address, you authorize the Emergency Management BC to communicate with you by email about your registration and to invite you to provide feedback about your experience.
The Collection Notice does not need to be read word-for-word.


EPICS V4 Release 4.7.0
EPICS V4 Release 4.7.0 C++ Bundle Release Notes
- Editors:
- Andrew Johnson, Argonne
Abstract
This EPICS V4 C++ Package version 4.7.0 contains the same set of the EPICS
V4 C++ modules as the full EPICS 7.0.1 release (with the pvaPy Python
bindings added and no copy of EPICS Base), along with a top-level build
system to allow configuring all the modules at once rather than doing each
one individually.
This document contains the Release Notes entries from each individual C++
submodule, describing the changes between the previous bundleCPP version and
this release version. For any future 4.7.x patch releases the information
about the patch changes included will supplement the note entries from this
release.
This release can be built against EPICS Base versions 3.15.x or 3.16.x.
Later versions of EPICS Base are referred to as EPICS 7 and already include
all the necessary V4 modules. EPICS Base versions 3.14.12.x and earlier are
not compatible with the pva2pva module that was added to this package in
this release. The other V4 modules may build and run against EPICS Base
3.14.12.x, but they have not been built or tested against that Base version
recently.
For information about EPICS, please refer to the main
EPICS website.
For more information about EPICS V4, please refer to the
EPICS V4 website.
pvCommonCPP 4.2.3
The mb.h
header has been updated to build properly against EPICS Base
versions prior to <IP_ADDRESS>.
pvDataCPP 7.0.0
Removals
- Remove requester.h, monitor.h, and destroyable.h which were migrated to the pvAccessCPP module.
- Previously deprecated monitorPlugin.h is removed.
- Remove pv/messageQueue.h and epics::pvData::MessageQueue
Deprecations
The following utility classes will be removed in 8.0:
- epics::pvData::Queue
- epics::pvData::Executor
- epics::pvData::TimeFunction
Additions
- Add pv/pvdVersion.h which is included by pv/pvIntrospect.h
- Add epics::pvData::createRequest() function. Alternative to epics::pvData::CreateRequest class which throws on error.
- epics::pvData::FieldBuilder allow Structure defintion to be changed/appended
- Add epics::pvData::ValueBuilder like FieldBuilder also sets initial values.
- Can also be constructed using an existing PVStructure to allow "editing".
- Add debugPtr.h wrapper with reference tracking to assist in troubleshooting shared_ptr related ref. loops.
- Add pvjson utilities
pvAccessCPP 6.0.0
Incompatible changes
- Requires pvDataCPP >=7.0.0 due to headers moved from pvDataCPP into this module: requester.h, destoryable.h, and monitor.h
- Major changes to shared_ptr ownership rules for epics::pvAccess::ChannelProvider and
associated classes.
- Add new library pvAccessIOC for use with PVAClientRegister.dbd and PVAServerRegister.dbd.
Necessary to avoid having pvAccess library depend on all IOC core libraries.
- Added new library pvAccessCA with "ca" provider. Main pvAccess library no longer depends on libca.
Applications needing the "ca" provider must link against pvAccessCA and pvAccess.
See examples/Makefile in the source tree.
The headers associated with this library are: caChannel.h, caProvider.h, and caStatus.h
- A number of headers which were previously installed, but considered "private", are no longer installed.
- epics::pvAccess::ChannelProviderRegistry may no longer be sub-classed.
- Removed access to singleton registry via getChannelProviderRegistry() and registerChannelProviderFactory()
in favor of epics::pvAccess::ChannelProviderRegistry::clients() and epics::pvAccess::ChannelProviderRegistry::servers().
The "pva" and "ca" providers are registered with the clients() singleton.
epics::pvAccess::ServerContext() looks up names with the servers() singleton.
- Removed deprecated epics::pvAccess::Properties
- The data members of epics::pvAccess::MonitorElement become const, preventing these pointers from being re-targeted.
Simplifications
- use of the epics::pvAccess::ChannelRequester interface is optional
and may be omitted when calling createChannel().
Channel state change notifications are deliviered
to individual operations via epics::pvAccess::ChannelBaseRequester::channelDisconnect()
- Default implementions added for the following methods
- epics::pvAccess::Lockable::lock() and epics::pvAccess::Lockable::unlock() which do nothing.
- epics::pvAccess::Channel::getConnectionState() returns CONNECTED
- epics::pvAccess::Channel::isConnected() uses getConnectionState()
- epics::pvAccess::Channel::getField() which errors
- epics::pvAccess::Channel::getAccessRights() which returns rw
- Added epics::pvAccess::SimpleChannelProviderFactory template and
epics::pvAccess::ChannelProviderRegistry::add() avoids need for custom
factory.
- Added epics::pvAccess::MonitorElement::Ref iterator/smart-pointer
to ensure proper handling of calls Monitor::poll() and Monitor::release().
- epics::pvAccess::PipelineMonitor "internal" is collapsed into epics::pvAccess::Monitor.
PipelineMonitor becomes a typedef for Monitor.
- epics::pvAccess::RPCService is now a sub-class of epics::pvAccess::RPCServiceAsync
Additions
- pv/pvAccess.h now provides macros OVERRIDE and FINAL which conditionally expand to the c++11 keywords override and final.
- Deliver disconnect notifications to individual Operations (get/put/rpc/monitor/...) via
new epics::pvAccess::ChannelBaseRequester::channelDisconnect()
- New API for server creation via epics::pvAccess::ServerContext::create() allows direct specification
of configuration and ChannelProvider(s).
- Add epics::pvAccess::ServerContext::getCurrentConfig() to get actual configuration, eg. for use with a client.
- Classes from moved headers requester.h, destoryable.h, and monitor.h added to epics::pvAccess namespace.
Typedefs provided in epics::pvData namespace.
- Added Client API based on pvac::ClientProvider
- pv/pvaVersion.h defines VERSIONINT and PVACCESSVERSION_INT
- epics::pvAccess::RPCClient may be directly constructed.
- epics::pvAccess::RPCServer allows epics::pvAccess::Configuration to be specified and access to ServerContext.
- Added epics::pvAccess::Configuration::keys() to iterate configuration parameters (excluding environment variables).
- Added epics::pvAccess::Destoryable::cleaner
Deprecations
- epics::pvAccess::GUID in favor of epics::pvAccess::ServerGUID due to win32 name conflict.
normativeTypesCPP 5.2.0
This release contains bug fixes and minor source updates needed to build against the latest version of pvData.
pvaClientCPP 4.3.0
Works with pvDataCPP-7.0 and pvAccessCPP-6.0 versions
Will not work with older versions.
destroy methods removed
All the destroy methods are removed since implementation is RAII compliant.
API changes to PvaClientMonitor
The second argument of method
static PvaClientMonitorPtr create(
PvaClientPtr const &pvaClient,
epics::pvAccess::Channel::shared_pointer const & channel,
epics::pvData::PVStructurePtr const &pvRequest
);
Is now changed to
static PvaClientMonitorPtr create(
PvaClientPtr const &pvaClient,
PvaClientChannelPtr const & pvaClientChannel,
epics::pvData::PVStructurePtr const &pvRequest
);
A new method is also implemented
static PvaClientMonitorPtr create(
PvaClientPtr const &pvaClient,
std::string const & channelName,
std::string const & providerName,
std::string const & request,
PvaClientChannelStateChangeRequesterPtr const & stateChangeRequester,
PvaClientMonitorRequesterPtr const & monitorRequester
);
pva2pva 1.0.0
This module replaces the original pvaSrv.
pvDatabaseCPP 4.3.0
This release contains bug fixes and minor source updates needed to build against the latest versions of pvData and pvAccess.
pvaPy
Release 1.0.0 (2018/01/04)
- added build support for python3
- added build support for EPICS7 releases
Release 0.9 (2017/09/17)
- improved support for channel monitors: no monitor startup thread results in
faster initial connections; monitors connect automatically when channels
come online
- fixed support for older EPICS v4 releases (4.4, 4.5 and 4.6)
- added build support for numpy included with boost releases 1.63.0 and later
Release 0.8 (2017/07/17)
- added new Channel monitor() method that can be used instead of
subscribe()/startMonitor() sequence in case when there is only one
subscriber
- enhanced PvaServer functionality: single server instance can serve multiple
channels; channels can be added and removed dynamically; added (optional)
callback for channel writes
Release 0.7 (2017/05/10)
- added initial version of PvaServer class: PvObject exposed via instance of
this class can be retrieved and manipulated using standard PVA command line
tools and APIs
- fixed boolean array conversion to python list
- improved support for builds relying on custom boost installation
bundleCPP 4.7.0
Submodule Changes
In this release the pvaSrv module has been replaced with the newer and more functional pva2pva module. The exampleCPP module was dropped for this release as it hasn't yet been updated to demonstrate the latest pvData and pvAccess API changes.
The top-level Makefile has been modified to try and improve the behaviour of some of the buld targets (e.g. make distclean
shouldn't try to configure any submodules that aren't already configured). In general this Makefile was designed for building the submodules from scratch, not for developers to use while working on the code.


We exchange tables!
- target virtual interfaces
- exploit back-end web services
- syndicate front-end web services
- scale viral relationships
- aggregate dynamic infrastructures
- revolutionize value-added synergies
- syndicate bricks-and-clicks infomediaries
- drive cross-media e-markets
- orchestrate vertical eyeballs


Hi I'm
Arun
but before you go any further - you could try a simple quiz and get to knwo me better or test how much you already know.
My full name is Vethenayagam Arun, but I prefer you call me Arun as like my friends. I'm basically a cybersecurity enthusiast who is pursuing immersive media media diploma at Ngee Ann Polytechnic. Some of my character qualities are I'm very empethatic, patient, adaptable, compassionate and hardworking. I'm not the one to talk straight away to everyone but rather a quiet, observant and talk later kind of a guy. But apart from that once I get familiarised with whom I talking with I'm more cooperative and cool. And one interesting thing about me is that I love to learn, either new things or improve my existing skills and I'm a quick learner. And if be sure to go through the rest of the website and enjoy it.


Trinidad: Two teenagers drown at rain-swollen Argyle Falls
by Trinidad Express(TRINIDAD EXPRESS) — Chief Secretary Kelvin Charles says he is deeply saddened and disturbed by the drowning of two teenagers today, at Argyle Water Fall.
 Not just for the two families and friends affected by this tragedy but for all of Tobago because this could have happened to any one of us or our children. I extend sincere condolences to the families and loved ones of the deceased at this time,” said Charles in a statement issued on Sunday evening.
According to reports from TEMA, at around 2:45 pm today, a group of young persons from Argyle and environs was swept away from the third level of the Argyle Water Fall by the river, owing to the heavy rainfall in the forest.
TEMA reports confirm that fifteen year old Khrisha Thompson of Belle Garden got into difficulty and nineteen year old Chrisson Walters of Argyle attempted to assist her.
They were later pulled from the water unresponsive.
Charles called on all of Tobago to pray, support and comfort the families and loved ones of Khrisha Thompson and Chrisson Walters.
He said: “The next few days, months and even years will not be easy. The THA will lend assistance where possible, especially in the area of counselling and emotional support.”
. Charles also extends sympathy to the affected families on behalf of the Tobago House of Assembly and his family.
More Trinidad and Tobago News Stories
-
Trinidad: Wife wants Life Sport millions in lawsuit over 15-year divorce case November 12, 2019
-
Trinidad: Police officer guilty of forging sick-leave certificate November 12, 2019
-
Trinidad: Sat Maharaj suffers stroke, in critical condition November 12, 2019
-
Tobago remembers war dead November 11, 2019
-
Trinidad: Tunapuna man sacrificed life to save pregnant wife November 11, 2019
-
Trinidad: St James teen killed for bad company November 11, 2019
-
Trinidad: Kamla promises legal ganja November 11, 2019
-
Trinidad: Two people killed in shooting outside bar November 10, 2019
-
Another Trinidad church holds fashion show November 10, 2019


--- title: "Visual journalist, developer, designer" section: portfolio ---
I'm a visual journalist, developer and designer based in Washington, D.C. Currently, I'm a developer at The Marshall Project. I've also worked at NPR and The Washington Post.
Here's some of my work.


Realtime messaging between devices, deployed near you automagically.
Want to deploy it on your network or provider? Fork it!
The only ones that know what is happening between your devices are your devices.
Bastly is born out of a developer itch for having a backend as a service for developers built by developers. Bastly was integrated with FIWARE and won the third place at Impact Hackathon in Madrid.
Bastly was accepted to access the Impact Accelerator Program, and a our budding idea/prototype is becoming a real bussines. We have received research funding from the European Union!
Now it's time to create an awesome service, a great experience, and an excellent product!
Co-founder
Co-founder
Our team is building the product that they would love to use, so you will also love it!


Queens, New York
Indonesian Food Bazaar at St. James Episcopal Church
Once a month, an Indonesian feast appears inside an Elmhurst church hall.
New Yorkers looking for a carousel of Indonesia’s best food don’t need to book a 10,000-mile flight to Jakarta. They can just head to Elmhurst’s St. James Episcopal Church.
Once a month, the church’s parish house hosts the Indonesian Food Bazaar, where homestyle dishes from different regions in Indonesia feed hundreds of visitors. Under one roof, food enthusiasts rest their taste buds on classics such as beef rendang (spiced beef stewed in coconut milk), mie goreng (spiced fried noodles), satay (seasoned skewed meat), nasi kuning (turmeric yellow rice cooked with coconut milk), shrimp crackers dipped in sambal (chili-peppered shrimp paste), and bakso (meatball), possibly the most famous street food in Indonesia.
Felincia “Fefe” Anggono founded the Indonesian Food Bazaar in 2011. A Chinese-Indonesian from the city of Surabaya in East Java, she decided to leave her homeland in 1998 after the country’s ethnic riots against Indonesians of Chinese descent. Her nostalgia for authentic home delicacies led to her monthly food pop-up that features around 12 Indonesian vendors from New York, Virginia, Philadelphia, Connecticut, and sometimes even the Carolinas. A large portion of the funds they collect at the bazaar often go to tsunami and earthquake-hit areas in Indonesia.
Sometimes, the bazaar morphs into a Liwetan feast, a traditional way of eating in rural Indonesian villages. Foods such as tempe goreng (fried fermented soybeans) and tahu bacem (a sweet, spiced soybean cake) are served on banana leaves. If you’re lucky enough to attend the bazaar during one of these events, roll up your sleeves and dig in: In a Liwetan, everything is meant to be eaten with bare hands.
Know Before You Go
Check the Food Bazaar’s Facebook page to find out the latest dates. Regular bazaars are free to enter, and you purchase foods at different vendors. Liwetan feasts charge $25 for entry, and you can devour as much as you'd like at the buffet.
Atlas Obscura Experiences
Oddities Flea Market "Holiday of Wonders" Exclusive VIP Presale Tickets
Brooklyn, New York
$30 per person
Community Discussion
-
No Comments Yet
Start the discussion.
forum Visit our forums.


Defines the phase read mode for the Solidification module.
int jmpSetSolidificationPhaseReadMode (int modeFlag);
modeFlag [input]
Integer that specifies how to obtain the list of phases to include in a solidification calculation. This parameter can take one of the following values:
JMP_READ_DEFAULT |
To read phases from the file inits/jmp.ini . |
JMP_READ_USER_SPECIFIED |
To read phases from a user-defined list. |
JMP_READ_DEFAULT_WITH_EXCLUSIONS |
To read phases from the file inits/jmp.ini , but disregard those present in a given exclusion list. |
JMP_STATUS_OK |
Request has been successfully completed. |
JMP_STATUS_ERROR |
An error has occurred. |
inits/jmp.ini
, otherwise an error will occur when running the calculation.JMP_READ_USER_SPECIFIED
, the list of phases to include in the calculation must be provided, by calling jmpSetSolidificationPhases().JMP_READ_DEFAULT_WITH_EXCLUSIONS
, the list of phases to exclude from the calculation must be provided, by calling jmpExcludeSolidificationPhases().| Headers | jmpcore.h jmpsolidification.h |
| Library | jmpsolidification.lib /jmpsolidification_x64.lib |
| DLL | jmpsolidification.dll /jmpsolidification_x64.dll |


This sink prefixes the output with an ANSI escape sequence color code depending on the severity of the message.
More...
#include <ansicolor_sink.h>
|
|
using | mutex_t = typename ConsoleMutex::mutex_t |
| |
|
|
| ansicolor_sink (const ansicolor_sink &other)=delete |
| |
|
ansicolor_sink & | operator= (const ansicolor_sink &other)=delete |
| |
|
void | set_color (level::level_enum color_level, const std::string &color) |
| |
|
void | log (const details::log_msg &msg) override |
| |
|
void | flush () override |
| |
|
void | set_pattern (const std::string &pattern) final |
| |
|
void | set_formatter (std::unique_ptr< spdlog::formatter > sink_formatter) override |
| |
|
| sink (std::unique_ptr< spdlog::pattern_formatter > formatter) |
| |
|
bool | should_log (level::level_enum msg_level) const |
| |
|
void | set_level (level::level_enum log_level) |
| |
|
level::level_enum | level () const |
| |
|
|
const std::string | reset = "\033[m" |
| | Formatting codes.
|
| |
|
const std::string | bold = "\033[1m" |
| |
|
const std::string | dark = "\033[2m" |
| |
|
const std::string | underline = "\033[4m" |
| |
|
const std::string | blink = "\033[5m" |
| |
|
const std::string | reverse = "\033[7m" |
| |
|
const std::string | concealed = "\033[8m" |
| |
|
const std::string | clear_line = "\033[K" |
| |
|
const std::string | black = "\033[30m" |
| |
|
const std::string | red = "\033[31m" |
| |
|
const std::string | green = "\033[32m" |
| |
|
const std::string | yellow = "\033[33m" |
| |
|
const std::string | blue = "\033[34m" |
| |
|
const std::string | magenta = "\033[35m" |
| |
|
const std::string | cyan = "\033[36m" |
| |
|
const std::string | white = "\033[37m" |
| |
|
const std::string | on_black = "\033[40m" |
| | Background colors.
|
| |
|
const std::string | on_red = "\033[41m" |
| |
|
const std::string | on_green = "\033[42m" |
| |
|
const std::string | on_yellow = "\033[43m" |
| |
|
const std::string | on_blue = "\033[44m" |
| |
|
const std::string | on_magenta = "\033[45m" |
| |
|
const std::string | on_cyan = "\033[46m" |
| |
|
const std::string | on_white = "\033[47m" |
| |
|
|
void | print_ccode_ (const std::string &color_code) |
| |
|
void | print_range_ (const fmt::memory_buffer &formatted, size_t start, size_t end) |
| |
|
|
FILE * | target_file_ |
| |
|
mutex_t & | mutex_ |
| |
|
bool | should_do_colors_ |
| |
|
std::unordered_map< level::level_enum, std::string, level::level_hasher > | colors_ |
| |
template<typename TargetStream, class ConsoleMutex>
class spdlog::sinks::ansicolor_sink< TargetStream, ConsoleMutex >
This sink prefixes the output with an ANSI escape sequence color code depending on the severity of the message.
If no color terminal detected, omit the escape codes.
The documentation for this class was generated from the following file:


Table of Contents
1 Overview
1.1 Design Principles
1.1.1 Build Correctness
1.1.2 Build Flexibility
1.1.3 Build Efficiency
1.1.4 Build Directory
1.2 Getting Started
2 Installation
2.1 Version Control Setup
3 Command-Line Operation
3.1 Configure Operation
3.2 Build Operation
3.3 Clean Operation
3.4 Distclean Operation
3.5 Install Operation
3.6 Uninstall Operation
4 The Build Script
4.1 Configuration Operations
4.1.1 Checking for a Compiler
4.1.2 Checking for a Header File
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :check_cpppath
4.1.3 Checking for a D Import
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :check_d_import_path
4.1.4 Checking for a Library
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :check_libpath
<IP_ADDRESS>.2 :use
4.1.5 Checking for a Program
4.1.6 Checking for a Package Configuration
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :package
<IP_ADDRESS>.2 :program
<IP_ADDRESS>.3 :use
4.1.7 Custom Configuration Checks
4.1.8 Global Configuration Check Options
<IP_ADDRESS> :fail
<IP_ADDRESS> :on_fail
<IP_ADDRESS> :set_define
4.2 Build Operations
4.2.1 Environments
4.2.2 Specifying Source Files: The glob Method
4.2.3 Construction Variables
<IP_ADDRESS> Construction Variable Naming
4.2.4 Builders
<IP_ADDRESS> The Command Builder
<IP_ADDRESS> The CFile Builder
<IP_ADDRESS> The Copy Builder
<IP_ADDRESS> The Directory Builder
<IP_ADDRESS> The Disassemble Builder
<IP_ADDRESS> The Install Builder
<IP_ADDRESS> The InstallDirectory Builder
<IP_ADDRESS> The Library Builder
<IP_ADDRESS> The Object Builder
<IP_ADDRESS> The Preprocess Builder
<IP_ADDRESS> The Program Builder
<IP_ADDRESS>.1 Direct Mode
<IP_ADDRESS> The SharedLibrary Builder
<IP_ADDRESS>.1 Direct Mode
<IP_ADDRESS> The SharedObject Builder
4.2.5 Explicit Dependencies
4.2.6 Build Hooks
4.2.7 Barriers
4.3 Extending Rscons
4.3.1 Adding New Languages
4.3.2 Adding Custom Builders
<IP_ADDRESS> Adding a Custom Builder to an Environment
<IP_ADDRESS> Builder Name
<IP_ADDRESS> Custom Builder Constructor
<IP_ADDRESS> Custom Builder Operation
<IP_ADDRESS>.1 Return Value
<IP_ADDRESS>.2 Printing Build Status
<IP_ADDRESS>.3 Custom Builder Cache Usage - Only Rebuild When Necessary
<IP_ADDRESS>.4 Custom Builder Parallelization
<IP_ADDRESS>.4.1 Using a Ruby Thread to Parallelize a Build Operation
<IP_ADDRESS>.4.2 Executing a Subcommand from a Custom Builder
<IP_ADDRESS> Simple custom builders added with add_builder
5 Appendix
5.1 Default Construction Variables
5.2 Example Build Scripts
5.2.1 Example: Building a C Program
5.2.2 Example: Building a D Program
5.2.3 Example: Cloning an Environment
5.2.4 Example: Custom Builder
5.2.5 Example: Using different compilation flags for some sources
5.2.6 Example: Creating a static library
5.2.7 Example: Creating a C++ parser source from a Yacc/Bison input file
5.3 ./configure && make
5.4 YARD API Documentation
6 License
7 Contributing
8 Change Log
1 Overview
Rscons is an open-source build system for developers.
It supports the following features:
- multi-threaded job execution
- auto-configuration
- built-in builders for several common operations
- out-of-the-box support for C, C++, and D languages
- extensibility for other languages or custom builders
- compatible with Windows, Linux, OS X, and FreeBSD
- colorized output with build progress
- build hooks
At its core, Rscons is mainly an engine to:
- determine the proper order to perform build operations,
- determine whether each build target is up to date or in need of rebuild, and
- schedule those build operations across multiple threads as efficiently as possible.
Along the way, Rscons provides a concise syntax for specifying common types of
build operations, but also provides an extensible framework for performing
custom build operations as well.
Rscons is written in Ruby, and is inspired by SCons and waf.
1.1 Design Principles
1.1.1 Build Correctness
The number one design principle in Rscons is build correctness.
This means that a build operation will be performed when Rscons cannot
determine that a build target is already up-to-date.
A build target will be built whenever:
- the target file has been removed or changed since it was last built
- the command to build the target file is different from the previous command
used to build it
- any of the target file's dependency files have changed since the last time
the target was built
Importantly, Rscons uses the content of a source (dependency) file to determine
whether a rebuild is necessary, not simply the timestamp of the file.
This is because relying solely on the timestamp of the file can lead to an
incorrect decision being made to not rebuild when a rebuild is necessary.
1.1.2 Build Flexibility
Rscons supports multiple configurations of compilation flags or build options
across multiple environments to build output files in different ways according
to the user's desire.
For example, the same source files can be built into a release executable, but
also compiled with different compilation flags or build options into a test
executable.
Rscons also supports build hooks, which allow the user to further fine-tune the
build system's operation.
A build hook, for example, can be used to set a build option for only source
files coming from a particular source directory.
1.1.3 Build Efficiency
Rscons will automatically determine the number of threads to use based on the
host CPU configuration, and will schedule jobs as efficiently as possible
across the available threads in order to complete the build operation in as
little time as possible.
As development occurs and build operations are executed, Rscons makes use of a
cache file in order to avoid rebuilding a target when it is already up to date.
1.1.4 Build Directory
Rscons was designed to store temporary build artifacts (for example, object
files, dependency files, etc...) in a build directory.
This keeps files generated by the build cleanly separated from user-controlled
source files.
1.2 Getting Started
To use Rscons on your project, you must:
- Install the
rscons script in your project (See Installation).
- Write the
Rsconscript build script for your project (See The Build Script).
- Use the
rscons command in your project (See Command-Line Operation).
2 Installation
Rscons is designed to be distributed as a stand-alone single file script that
can be copied into and versioned in a project's source tree.
The only dependency required to run Rscons is to have a Ruby interpreter
installed.
The latest release can be downloaded from https://github.com/holtrop/rscons/releases.
Simply copy the rscons executable script into the desired location within
the project to be built (typically the root of the repository) and mark it
executable.
2.1 Version Control Setup
The following files should be added to source control:
Add the following contents to .gitignore (or the equivalent thereof for different
version control systems):
3 Command-Line Operation
Rscons is typically invoked from the command-line as ./rscons .
Rscons supports several build operations:
- configure
- build
- clean
- distclean
- install
- uninstall
3.1 Configure Operation
The configure operation will initialize the Rscons cache file and build
directory.
It will also perform any configuration checks requested by the build script.
Such configuration checks can include:
- verifying operation of a compiler
- loading compilation/linker flags from a config program (e.g.
pkg-config )
- verifying presence of a C/C++ header file
- verifying presence of a D import
- verifying presence of a library
- verifying presence of an executable
- any custom user-supplied configuration check
3.2 Build Operation
If a build operation is requested and a configure operation has not yet
been performed, a configure operation will be automatically invoked.
The build operation will execute all builders registered to produce build
targets.
If a build operation fails (e.g. due to a compilation failure), Rscons will
log the failed commands.
By default Rscons does not print the failed commands to the console so that it
is easier for the user to focus on the actual compiler failure messages rather
than the compilation command itself.
However, if the user wishes to see the compilation commands, rscons can be
invoked with the -v command-line option to show all complilation commands
while building, or, alternatively, following a compilation failure, the user
can invoke rscons with the -F option which will not rebuild but will show the
failed command log from the previous build operation.
3.3 Clean Operation
A clean operation will remove all built target files.
It will not remove items installed by an install operation.
It will not remove the cached configuration options.
3.4 Distclean Operation
A distclean operation will remove all built target files and all cached
configuration options.
Generally it will get the project directory back to the state it was in when
unpacked before any configuration or build operations took place.
It will not removed items installed by an install operation.
3.5 Install Operation
An install operation will perform a build (and if necessary, first a
configure as well).
In addition it will execute any Install or InstallDirectory builders to
install items into the specified install directory.
3.6 Uninstall Operation
An uninstall operation will remove any items installed by an install
operation.
It will not remove all built target files, just the installed copies.
4 The Build Script
Rscons looks for instructions for what to build by reading a build script file
called Rsconscript (or Rsconscript.rb ).
Here is a simple example Rsconscript file:
build do
Environment.new do |env|
env.Program("myprog.exe", glob("src/**/*.c"))
end
end
This Rsconscript file would instruct Rscons to produce a Program target
called myprog.exe which is to be built from all C source files found
(recursively) under the src directory.
The Rsconscript file is a Ruby script.
4.1 Configuration Operations
A configure block is optional.
It can be used to perform various checks and setup operations for a project.
Example configure block:
configure do
check_cxx_compiler
check_c_header "getopt.h"
end
4.1.1 Checking for a Compiler
The following methods can be used within a configure block to check for a
working compiler:
check_c_compiler
check_cxx_compiler
check_d_compiler
Each of these methods can take an optional list of compilers to check for.
If such a list is supplied, the compilers are tested in the order listed.
The first compiler option found which passes a compilation test is used.
Here are example calls which also show the default compiler list for each
supported language:
configure do
check_c_compiler "gcc", "clang"
check_cxx_compiler "g++", "clang++"
check_d_compiler "gdc", "ldc2"
end
Global configuration options may be supplied to the compiler checks as well.
Example:
configure do
check_c_compiler "x86_64-elf-gcc", on_fail: "Install x86_64-elf cross toolchain first!"
end
4.1.2 Checking for a Header File
The following methods can be used to check for the presence of a header file:
check_c_header will check for a C header to be present
check_cxx_header will check for a C++ header to be present
Each of these methods take the name of the header file to check for as the
first argument, and take an optional Hash of arguments as the second argument.
Example calls:
configure do
check_c_header "getopt.h", set_define: "HAVE_GETOPT_H"
check_c_header "FreeType2.h"
check_cxx_header "memory"
end
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :check_cpppath
Optionally specifies an array of paths to look for the header file in.
4.1.3 Checking for a D Import
The check_d_import method can be used to check for the presence of D import.
This method takes the name of the import to check for as the first argument.
Example calls:
configure do
check_d_import "std.stdio"
check_d_import "std.numeric"
end
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :check_d_import_path
Optionally specifies an array of paths to look for the module in.
4.1.4 Checking for a Library
The check_lib method can be used to check for the presence of a library.
This method takes the name of the library to check for as the first argument,
and take an optional Hash of arguments as the second argument.
Example calls:
configure do
check_lib "kpty", fail: false, set_define: "HAVE_LIBKPTY"
check_lib "GL"
end
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :check_libpath
Optionally specifies an array of paths to look for the library in.
<IP_ADDRESS>.2 :use
If not set, the library will be used by default in all Environment objects.
If set, the library will only be used in Environment objects that have a
matching :use flag set.
4.1.5 Checking for a Program
The check_program method can check for the existence of an executable in the
host operating system environment.
Example call:
configure do
check_program "xxd"
end
4.1.6 Checking for a Package Configuration
The check_cfg method can be used to check for the existence of a package as
well as import any build options (e.g. include path, defines, libraries to link
against, etc...) required to use the package.
This method takes a Hash of options as its only argument.
Example calls:
configure do
check_cfg package: "zlib"
check_cfg program: "freetype-config", fail: false, set_define: "HAVE_FREETYPE"
end
<IP_ADDRESS> Options
<IP_ADDRESS>.1 :package
If the :package option is set to a value, the pkg-config program will be
used to look for package configuration flags for the specified package.
<IP_ADDRESS>.2 :program
If the :program option is given, the program specified will be used to look
for configuration flags.
<IP_ADDRESS>.3 :use
If not set, the library will be used by default in all Environment objects.
If set, the library will only be used in Environment objects that have a
matching :use flag set.
4.1.7 Custom Configuration Checks
The Rsconscript author can add custom configuration checks to be performed
during the rscons configure operation.
Here is an example from build_tests/configure/custom_config_check.rb showing
a custom configuration check:
configure do
custom_check("Checking 'grep' version") do |op|
stdout, stderr, status = op.log_and_test_command(%w[grep --version])
should_fail = true
if status != 0
fail_message = "error executing grep"
elsif stdout =~ /^grep \(GNU grep\) 1\./
fail_message = "too old!"
status = 1
elsif stdout =~ /^grep \(GNU grep\) 2\./
fail_message = "we'll work with it but you should upgrade"
status = 1
should_fail = false
op.store_merge("CPPDEFINES" => "GREP_WORKAROUND")
else
op.store_append("CPPDEFINES" => "GREP_FULL")
end
op.complete(status, success_message: "good!", fail_message: fail_message, fail: should_fail)
end
custom_check("Checking sed -E flag") do |op|
stdout, stderr, status = op.log_and_test_command(%w[sed -E -e s/ab+/rep/], stdin: "abbbc")
op.complete(stdout =~ /repc/ ? 0 : 1, success_message: "good", fail_message: "fail")
end
end
build do
Environment.new do |env|
puts env["CPPDEFINES"]
end
end
A custom configuration check is created by calling the custom_check method
and passing a block.
The contents of the block should perform the custom configuration checking
logic.
This logic can include executing a test command or other arbitrary operations.
An argument op is passed to the block.
This object is an instance of the ConfigureOp class
class and provides several methods that can be used to aid with the custom
configuration check.
The log_and_test_command
method can be used to execute a test command and retrieve its results.
The command and its output are also logged to the config.log file.
The store_merge ,
store_append ,
and store_parse
methods can be used to store construction variables for Environments created
during the build operation.
Finally, the complete
method can be used to complete the configuration check and indicate a success
or failure.
While performing a custom configuration check, it can sometimes be useful to
be able to construct an Environment to use the set of default construction
variables as defined so far in the configuration block, for example to expand
construction variables to build a test command.
The normal Environment class cannot be used within the configure block,
however the BasicEnvironment class
can be used for such a purpose.
For example, to expand the current ${CCCMD} value:
configure do
custom_check("Checking something to do with CCCMD") do
command = BasicEnvironment.new.expand_varref("${CCCMD}")
end
end
4.1.8 Global Configuration Check Options
<IP_ADDRESS> :fail
If the :fail option is set to false , then the absence of the package or
program requested will not result in the configure option failing.
The :fail option defaults to true if the :set_define option is not
defined, and defaults to false if the :set_define option is defined.
<IP_ADDRESS> :on_fail
The :on_fail option can be set to a String or a Proc object. If the
configuration operation fails (or would fail), the given message is printed
or the Proc is called.
Examples:
configure do
check_c_compiler "special-gcc", on_fail: "First install special gcc!"
end
configure do
package_hint = lambda do
puts "The following packages must be installed to build this project:"
puts "- libsdl2-dev"
puts "- libsdl2-image-dev"
puts "- libsdl2-net-dev"
end
check_lib "SDL2", on_fail: package_hint
check_lib "SDL2_image", on_fail: package_hint
check_lib "SDL2_net", on_fail: package_hint
end
<IP_ADDRESS> :set_define
If set, a build define of the specified String will be added to the
CPPDEFINES construction variable array if the requested package is found.
4.2 Build Operations
The build block is used to create Environments and register build targets.
An Rscons build script would not be very useful without a build block.
Here is an example build block demonstrating how to register a build target:
build do
Environment.new do |env|
env.Program("myprog.exe", glob("src/**/*.c"))
end
end
This Rsconscript would build an executable called myprog.exe from all C
source files found recursively under the src directory.
4.2.1 Environments
An Environment includes:
- a collection of construction variables
- a collection of build hooks
- a collection of user-registered build targets
- a build root
All build targets must be registered within an Environment .
The Environment's build root is a directory created within the top-level
Rscons build directory.
By default it holds all intermediate files generated by Rscons that are needed
to produce a user-specified build target.
For example, for the Rsconscript :
build do
Environment.new do |env|
env.Program("myprog.exe", glob("src/**/*.c"))
end
end
Rscons will place an object file and dependency file corresponding to each C
source file under the Environment's build root.
This keeps the intermediate generated build artifacts separate from the source
files.
4.2.2 Specifying Source Files: The glob Method
The glob method can be
used to find files matching the patterns specified.
It supports a syntax similar to the Ruby Dir.glob method but operates more deterministically.
Example use:
build do
Environment.new do |env|
env.Program("mytests", glob("src/**/*.cc", "test/**/*.cc"))
end
end
This example would build the mytests executable from all .cc source files
found recursively under the src or test directory.
4.2.3 Construction Variables
Construction variables are values assigned to keys within an Environment.
Construction variables are used by Builders to produce output files.
See Default Construction Variables for a reference of all built-in
construction variables.
Example:
build do
Environment.new do |env|
env["CCFLAGS"] += %w[-O2 -Wall]
env["LIBS"] += %w[m]
end
end
This example modifies the CCFLAGS construction variable to add -O2 and
-Wall to the compilation commands used for C and C++ source files.
It also instructs the linker to link against the m library.
<IP_ADDRESS> Construction Variable Naming
- uppercase strings - the default construction variables that Rscons uses
- strings beginning with "_" - set and used internally by builders
- symbols, lowercase strings - reserved as user-defined construction variables
4.2.4 Builders
Rscons uses builder objects to produce target output files from source
input files.
A build target to be built using a builder is registered by calling a method on
the Environment object that matches the builder's name.
For example, a Program build target is registered by calling the
env.Program method.
The general syntax for registering a build target using a builder is:
env.BuilderName(target, sources, vars = {})
The target parameter is the path to the output file or directory.
The sources parameter is the path or paths to the input file(s) to be used
by the builder.
In the target and sources parameters, the user can explicitly refer to a
path within the Environment's build root by beginning the path with "^/".
The vars parameter is an optional Hash which can include construction
variables to be used for this build target.
Any construction variable values specified in this parameter will override
those assigned to the Environment.
There are several default builders that are built-in to Rscons:
Command , which executes a user-defined command to produce the target.
Copy , which copies files or directories to a specified destination.
CFile , which builds a C or C++ source file from a lex or yacc input file.
Directory , which creates a directory.
Disassemble , which disassembles an object file to a disassembly listing.
Install , which installs files or directories to a specified destination.
InstallDirectory , which creates a directory during an install operation.
Library , which collects object files into a static library archive file.
Object , which compiles source files to produce an object file.
Preprocess , which invokes the C/C++ preprocessor on a source file.
Program , which links object files to produce an executable.
SharedLibrary , which links object files to produce a dynamically loadable
library.
SharedObject , which compiles source files to produce an object file, in a
way that is able to be used to create a shared library.
<IP_ADDRESS> The Command Builder
env.Command(target, sources, "CMD" => command)
env.Command("docs.html", "docs.md",
"CMD" => ["pandoc", "-fmarkdown", "-thtml", "-o${_TARGET}", "${_SOURCES}"],
"CMD_DESC" => "PANDOC")
The Command builder executes a user-defined command in order to produce the
desired target file based on the provided source files.
<IP_ADDRESS> The CFile Builder
env.CFile(target, source)
env.CFile("^/parser/parser.c", "parser.y")
The CFile builder will generate a C or C++ source file from a lex (.l, .ll)
or yacc (.y, .yy) input file.
<IP_ADDRESS> The Copy Builder
env.Copy(destination, sources)
env.Copy("mytests", "^/mytests")
env.Copy("^/dist/share", "share")
The Copy builder can copy files or directories to a target location.
<IP_ADDRESS> The Directory Builder
env.Directory(target)
env.Directory("^/tests")
The Directory builder can be used to explicitly create a directory.
This can also disambiguate whether the target for a subsequent builder
(e.g. Copy ) refers to a file path or directory path.
<IP_ADDRESS> The Disassemble Builder
env.Disassemble(target, source)
env.Disassemble("module.dis", "module.o")
The Disassemble builder generates a disassembly listing using objdump from
and object file.
<IP_ADDRESS> The Install Builder
env.Install(destination, sources)
env.Install("${prefix}/bin", "app.exe")
env.Install("${prefix}/share", "share")
The Install builder can install files or directories to their installation
target location.
Install builders are only processed when the user has requested to perform
an install operation from the command line.
<IP_ADDRESS> The InstallDirectory Builder
env.InstallDirectory(target)
env.InstallDirectory("${prefix}/share")
The InstallDirectory builder can be used to explicitly create a directory.
InstallDirectory builders are only processed when the user has requested to
perform an install operation from the command line.
This can also disambiguate whether the target for a subsequent builder
(e.g. Install ) refers to a file path or directory path.
<IP_ADDRESS> The Library Builder
env.Library(target, sources)
env.Library("lib.a", Rscons.glob("src/**/*.c"))
The Library builder creates a static library archive from the given source
files.
<IP_ADDRESS> The Object Builder
env.Object(target, sources)
env.Object("module.o", "module.c")
The Object builder compiles the given sources to an object file.
Although it can be called explicitly, it is more commonly implicitly called by
the Program builder.
<IP_ADDRESS> The Preprocess Builder
env.Preprocess(target, source)
env.Preprocess("module-preprocessed.cc", "module.cc")
The Preprocess builder invokes either ${CC} or ${CXX} (depending on if
the source contains an extension in ${CXXSUFFIX} or not) and writes the
preprocessed output to the target file.
<IP_ADDRESS> The Program Builder
env.Program(target, sources)
env.Program("myprog", Rscons.glob("src/**/*.cc"))
The Program builder compiles and links the given sources to an executable
file.
Object files, static library files, or source files can be given as sources .
A platform-dependent program suffix will be appended to the target name if one
is not specified.
This can be controlled with the PROGSUFFIX construction variable.
<IP_ADDRESS>.1 Direct Mode
The Program builder supports a "direct" mode which is activated by specifying
the :direct option.
In the direct mode, all source files are passed directly to the compiler
together and compiled and linked in one step, rather than being individually
compiled to separate object files first.
This mode allows taking advantage of any multi-file compilation capabilities
of the compiler.
However, it also requires recompiling all source files when any one of them
has changed.
Example use:
env.Program("myprog", Rscons.glob("src/**/*.c"), direct: true)
<IP_ADDRESS> The SharedLibrary Builder
env.SharedLibrary(target, sources)
env.SharedLibrary("mydll", Rscons.glob("src/**/*.cc"))
The SharedLibrary builder compiles and links the given sources to a
dynamically loadable library.
Object files or source files can be given as sources .
A platform-dependent prefix and suffix will be appended to the target name if
they are not specified by the user.
These values can be controlled by overriding the SHLIBPREFIX and
SHLIBSUFFIX construction variables.
<IP_ADDRESS>.1 Direct Mode
The SharedLibrary builder supports a "direct" mode which is activated by
specifying the :direct option.
In the direct mode, all source files are passed directly to the compiler
together and compiled and linked in one step, rather than being individually
compiled to separate object files first.
This mode allows taking advantage of any multi-file compilation capabilities
of the compiler.
However, it also requires recompiling all source files when any one of them
has changed.
Example use:
env.SharedLibrary("mydll", Rscons.glob("src/**/*.c"), direct: true)
<IP_ADDRESS> The SharedObject Builder
env.SharedObject(target, sources)
env.SharedObject("lib_module.o", "lib_module.c")
The SharedObject builder compiles the given sources to an object file.
Any compilation flags necessary to build the object file in a manner that
allows it to be used to create a shared library are added.
Although it can be called explicitly, it is more commonly implicitly called by
the SharedLibrary builder.
4.2.5 Explicit Dependencies
A target can be marked as depending on another file that Rscons would not
otherwise know about via the Environment#depends function. For example,
to force the linker to re-link a Program output when a linker script changes:
env.Program("a.out", "foo.c", "LDFLAGS" => %w[-T linker_script.ld])
env.depends("a.out", "linker_script.ld")
You can pass multiple dependency files to Environment#depends :
env.depends("my_app", "config/link.ld", "README.txt", *glob("assets/**/*"))
4.2.6 Build Hooks
A build hook is a Ruby block that is called whenever Rscons is about to invoke
a builder to produce a build target.
Rscons also supports post-build hooks which are called after the builder has
produced the build target.
A build hook can be used to modify construction variables depending on the
build target or source file names.
Example:
build do
Environment.new do |env|
env["CFLAGS"] << "-Wall"
env.add_build_hook do |builder|
if builder.sources.first =~ %r{src/tests/}
builder.vars["CFLAGS"] -= %w[-Wall]
end
end
env.Program("program.exe", glob("src/**/*.c"))
end
end
This example script would compile all C sources under the src directory with
the -Wall flag except for sources under the src/tests directory.
A post-build hook can be added with env.add_post_build_hook .
Post-build hooks are only invoked if the build operation was a success.
Build hooks and post-build hooks can register new build targets.
4.2.7 Barriers
Normally Rscons will parallelize all builders.
A barrier can be used to separate sets of build targets.
All build targets registered before the barrier is created will be built before
Rscons will schedule any build targets after the barrier.
In other words, build targets are not parallelized across a barrier.
4.3 Extending Rscons
4.3.1 Adding New Languages
The Object and SharedObject builders that ship with Rscons have an API that
allows the user to register extra languages that can be suppored by the
builders.
In fact, the built-in support for assembly, C, C++, and D compilation all make
use of this built-in API.
To see an example of how this API is used, see the
lib/rscons/builders/lang/*.rb files in the Rscons source repository.
For example, here is how the C++ language is registered:
Rscons::Builders::Object.register(command: "${CXXCMD}", direct_command: "${CXXCMD:direct}", suffix: "${CXXSUFFIX}", preferred_ld: "${CXX}")
Rscons::Builders::SharedObject.register(command: "${SHCXXCMD}", direct_command: "${SHCXXCMD:direct}", suffix: "${CXXSUFFIX}", preferred_ld: "${SHCXX}")
There are also default construction variables registered to go along with the
language registration as specified above.
New default construction variables can be registered globally by assigning to
the Rscons::DEFAULT_CONSTRUCTION_VARIABLES Hash.
For example:
Rscons::DEFAULT_CONSTRUCTION_VARIABLES["CXXCMD"] = %w[${CXX} -c -o ${_TARGET} ${CXXDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${CXXFLAGS} ${CCFLAGS} ${_SOURCES}]
4.3.2 Adding Custom Builders
It is also possible to extend Rscons with new builders.
This is the most flexible method to extend Rscons.
Builders can execute a command line program, call another builder, or just use
plain Ruby code to produce an output file.
A builder is a class that inherits from the Rscons::Builder base class.
Rscons provides a Rscons::Builders namespacing module which contains the
built-in builder classes.
User-provided custom builder classes can also reside in the Rscons::Builders
namespacing module, but this is not required.
<IP_ADDRESS> Adding a Custom Builder to an Environment
The user can add a builder class to an Environment with the env.add_builder
method.
For example:
class Rscons::Builders::Mine < Rscons::Builder
end
build do
Environment.new do |env|
env.add_builder(Rscons::Builders::Mine)
end
end
Alternatively, the builder author can add the name of the custom builder to the
Rscons::DEFAULT_BUILDERS array and then Rscons will automatically add the
custom builder to every Environment.
This method only works if the custom builder class is contained within the
Rscons::Builders namespacing module.
For example:
class Rscons::Builders::Special < Rscons::Builder
end
Rscons::DEFAULT_BUILDERS << :Special
load "SpecialBuilder.rb"
build do
Environment.new do |env|
env.Special("target", "source")
end
end
<IP_ADDRESS> Builder Name
By default, the builder name is taken from the last component of the class name.
For example, a class called Rscons::Builders::Mine would be usable in the
Rsconscript with env.Mine() .
A builder author can override the builder name by defining a class method
within the builder class called name .
For example, with the following builder definition:
class Rscons::Builders::MySpecialBuilder < Rscons::Builder
def self.name
"Special"
end
end
This builder would be registered in the Rsconscript with env.Special() .
<IP_ADDRESS> Custom Builder Constructor
It is optional for a custom builder to provide an initialize method.
If an initialize method is provided, it must call super to invoke the
base Rscons::Builder class's constructor.
A single Hash parameter is passed to the builder constructor.
This Hash contains many parameters describing how the build target was
registered by the user.
The base constructor will set several instance attributes within the builder:
@target will contain the path to the build target
@sources will contain the path(s) to the build source(s)
@cache will contain a reference to the Rscons::Cache object used for
the build
@env will contain a reference to the Environment object that registered
the build target using the builder
@vars will contain any user-specified construction variable values that
should be used for the build operation (overriding any Environment-wide
construction variable values)
<IP_ADDRESS> Custom Builder Operation
In order for a builder to perform a build operation, the builder class must
implement a the Builder#run() method.
Generally, the run() method will use the source file(s) to produce the target
file.
Here is an example of a trivial builder:
class Rscons::Builders::Custom < Rscons::Builder
def run(options)
File.open(@target, "w") do |fh|
fh.write("Target file created.")
end
true
end
end
<IP_ADDRESS>.1 Return Value
If the build operation has completed and failed, the run method should return
false .
In this case, generally the command executed or the builder itself would be
expected to output something to $stderr indicating the reason for the build
failure.
If the build operation has completed successfully, the run method should
return true .
If the build operation is not yet complete and is waiting on other operations,
the run method should return the return value from the Builder#wait_for
method.
See Custom Builder Parallelization.
<IP_ADDRESS>.2 Printing Build Status
A builder should print a status line when it produces a build target.
The Builder#print_run_message method can be used to print the builder status
line.
This method supports a limited markup syntax to identify and color code the
build target and/or source(s).
Here is our Custom builder example extended to print its status:
class Rscons::Builders::Custom < Rscons::Builder
def run(options)
print_run_message("Creating <target>#{@target}<reset> from Custom builder", nil)
File.open(@target, "w") do |fh|
fh.write("Target file created.")
end
true
end
end
<IP_ADDRESS>.3 Custom Builder Cache Usage - Only Rebuild When Necessary
Whenever possible, a builder should keep track of information necessary to
know whether the target file(s) need to be rebuilt.
The Rscons::Cache object is the mechanism by which to keep track of this
information.
The Cache object provides two methods: #up_to_date? and #register_build
which can be used to check if a built file is still up-to-date, and to
register build information for a subsequent check.
Here is a Custom builder which combines its source files similar to what the
cat command would do:
class Rscons::Builders::Custom < Rscons::Builder
def run(options)
unless @cache.up_to_date?(@target, nil, @sources, @env)
print_run_message("Combining <source>#{Util.short_format_paths(@sources)}<reset> => <target>#{@target}<reset>", nil)
File.open(@target, "wb") do |fh|
@sources.each do |source|
fh.write(File.read(source, mode: "rb"))
end
end
@cache.register_build(@target, nil, @sources, @env)
end
true
end
end
This builder would rebuild the target file and print its run message if the
target file or any of the source file(s) were changed, but otherwise would be
silent and not re-combine the source files.
Note that generally the same arguments should be passed to
@cache.register_build and @cache.up_to_date? .
<IP_ADDRESS>.4 Custom Builder Parallelization
The Rscons scheduler can parallelize builders to take advantage of multiple
processor cores.
Taking advantage of this ability to parallelize requires the builder author to
author the builder in a particular way.
The #run() method of each builder is called from Rscons in the main program
thread.
However, the builder may execute a subcommand, spawn a thread, or register
other builders to execute as a part of doing its job.
In any of these cases, the builder's run method should make use of
Builder#wait_for to "sleep" until one of the items being waited for has
completed.
<IP_ADDRESS>.4.1 Using a Ruby Thread to Parallelize a Build Operation
Here is an example of using a Ruby thread to parallelize a build operation:
class MyBuilder < Rscons::Builder
def run(options)
if @thread
true
else
print_run_message("#{name} #{target}", nil)
@thread = Thread.new do
sleep 2
FileUtils.touch(@target)
end
wait_for(@thread)
end
end
end
build do
Environment.new do |env|
env.add_builder(MyBuilder)
env.MyBuilder("foo")
end
end
It is up to the author of the thread logic to only perform actions that are
thread-safe.
It is not safe to call other Rscons methods, for example, registering other
builders or using the Cache, from a thread other than the one that calls the
#run() method.
<IP_ADDRESS>.4.2 Executing a Subcommand from a Custom Builder
It is a very common case that a builder will execute a subcommand which
produces the build target.
This is how most of the built-in Rscons builders execute.
A low-level way to handle this is for the builder to construct an instance of
the Rscons::Command class and then wait_for the Command object.
However, this is a common enough case that Rscons provides a few
convenience methods to handle this:
The register_command helper method can be used to create a Command object
and wait for it to complete.
The standard_command helper does the same thing as register_command but
additionally checks the @cache for the target being up to date.
The finalize_command helper can be used in conjunction with either of the
previous helper methods.
The built-in Rscons builders Command and Disassemble show examples of how
to use the standard_command and finalize_command helper methods.
Example (built-in Command builder):
module Rscons
module Builders
class Command < Builder
def run(options)
if @command
finalize_command
else
@vars["_TARGET"] = @target
@vars["_SOURCES"] = @sources
command = @env.build_command("${CMD}", @vars)
cmd_desc = @vars["CMD_DESC"] || "Command"
options = {}
if @vars["CMD_STDOUT"]
options[:stdout] = @env.expand_varref("${CMD_STDOUT}", @vars)
end
standard_command("#{cmd_desc} <target>#{@target}<reset>", command, options)
end
end
end
end
end
Example (built-in Disassemble builder):
module Rscons
module Builders
class Disassemble < Builder
def run(options)
if @command
finalize_command
else
@vars["_SOURCES"] = @sources
command = @env.build_command("${DISASM_CMD}", @vars)
standard_command("Disassembling <source>#{Util.short_format_paths(@sources)}<reset> => <target>#{target}<reset>", command, stdout: @target)
end
end
end
end
end
<IP_ADDRESS> Simple custom builders added with add_builder
The add_builder method of the Environment class optionally allows you to
define and register a builder by providing a name and action block. This can be
useful if the builder you are trying to define is easily expressed as a short
ruby procedure. When add_builder is called in this manner a new builder will
be registered with the environment with the given name. When this builder is
used it will call the provided block in order to build the target.
Example:
build do
Environment.new do |env|
require 'json'
require 'yaml'
env.add_builder(:JsonToYaml) do |params|
unless @cache.up_to_date?(@target, :JsonToYaml, @sources, @env)
print_run_message("JsonToYaml #{@target}", nil)
@cache.mkdir_p(File.dirname(@target))
File.open(@target, 'w') do |f|
f.write(YAML.dump(JSON.load(IO.read(@sources.first))))
end
@cache.register_build(@target, :JsonToYaml, @sources, @env)
end
true
end
env.JsonToYaml('foo.yml', 'foo.json')
end
end
5 Appendix
5.1 Default Construction Variables
module Rscons
on_windows = RUBY_PLATFORM =~ /mingw|msys|cygwin/
pic_flags = on_windows ? [] : %w[-fPIC]
DEFAULT_CONSTRUCTION_VARIABLES = {
"AR" => "ar",
"ARCMD" => %w[${AR} ${ARFLAGS} ${_TARGET} ${_SOURCES}],
"ARFLAGS" => %w[rcs],
"AS" => "${CC}",
"ASCMD" => %w[${AS} -c -o ${_TARGET} ${ASDEPGEN} ${INCPREFIX}${ASPPPATH} ${ASPPFLAGS} ${ASFLAGS} ${_SOURCES}],
"ASCMD:direct" => %w[${AS} -o ${_TARGET} ${ASDEPGEN} ${INCPREFIX}${ASPPPATH} ${ASPPFLAGS} ${ASFLAGS} ${LDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"ASDEPGEN" => %w[-MMD -MF ${_DEPFILE}],
"ASFLAGS" => [],
"ASPPFLAGS" => "${CPPFLAGS}",
"ASPPPATH" => "${CPPPATH}",
"ASSUFFIX" => %w[.S],
"CC" => "gcc",
"CCCMD" => %w[${CC} -c -o ${_TARGET} ${CCDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${CFLAGS} ${CCFLAGS} ${_SOURCES}],
"CCCMD:direct" => %w[${CC} -o ${_TARGET} ${CCDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${CFLAGS} ${CCFLAGS} ${LDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"CCDEPGEN" => %w[-MMD -MF ${_DEPFILE}],
"CCFLAGS" => [],
"CFLAGS" => [],
"CPPDEFINES" => [],
"CPPDEFPREFIX" => "-D",
"CPPFLAGS" => %w[${CPPDEFPREFIX}${CPPDEFINES}],
"CPPPATH" => [],
"CPP_CMD" => %w[${_PREPROCESS_CC} -E ${_PREPROCESS_DEPGEN} -o ${_TARGET} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${_SOURCES}],
"CSUFFIX" => %w[.c],
"CXX" => "g++",
"CXXCMD" => %w[${CXX} -c -o ${_TARGET} ${CXXDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${CXXFLAGS} ${CCFLAGS} ${_SOURCES}],
"CXXCMD:direct" => %w[${CXX} -o ${_TARGET} ${CXXDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${CXXFLAGS} ${CCFLAGS} ${LDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"CXXDEPGEN" => %w[-MMD -MF ${_DEPFILE}],
"CXXFLAGS" => [],
"CXXSUFFIX" => %w[.cc .cpp .cxx .C],
"DC" => "gdc",
"DCCMD" => %w[${DC} -c -o ${_TARGET} ${DDEPGEN} ${INCPREFIX}${D_IMPORT_PATH} ${DFLAGS} ${_SOURCES}],
"DCCMD:direct" => %w[${DC} -o ${_TARGET} ${DDEPGEN} ${INCPREFIX}${D_IMPORT_PATH} ${DFLAGS} ${LDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"DDEPGEN" => %w[-MMD -MF ${_DEPFILE}],
"DEPFILESUFFIX" => ".mf",
"DFLAGS" => [],
"DISASM_CMD" => %w[${OBJDUMP} ${DISASM_FLAGS} ${_SOURCES}],
"DISASM_FLAGS" => %w[--disassemble --source],
"DSUFFIX" => %w[.d],
"D_IMPORT_PATH" => [],
"INCPREFIX" => "-I",
"LD" => nil,
"LDCMD" => %w[${LD} -o ${_TARGET} ${LDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"LDFLAGS" => [],
"LEX" => "flex",
"LEXSUFFIX" => %w[.l .ll],
"LEX_CMD" => %w[${LEX} ${LEX_FLAGS} -o ${_TARGET} ${_SOURCES}],
"LEX_FLAGS" => [],
"LIBDIRPREFIX" => "-L",
"LIBLINKPREFIX" => "-l",
"LIBPATH" => [],
"LIBS" => [],
"LIBSUFFIX" => ".a",
"OBJDUMP" => "objdump",
"OBJSUFFIX" => %w[.o],
"PROGSUFFIX" => on_windows ? ".exe" : "",
"SHCC" => "${CC}",
"SHCCCMD" => %w[${SHCC} -c -o ${_TARGET} ${CCDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${SHCFLAGS} ${SHCCFLAGS} ${_SOURCES}],
"SHCCCMD:direct" => %w[${SHCC} -o ${_TARGET} ${CCDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${SHCFLAGS} ${SHCCFLAGS} ${SHLDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"SHCCFLAGS" => %w[${CCFLAGS}] + pic_flags,
"SHCFLAGS" => %w[${CFLAGS}],
"SHCXX" => "${CXX}",
"SHCXXCMD" => %w[${SHCXX} -c -o ${_TARGET} ${CXXDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${SHCXXFLAGS} ${SHCCFLAGS} ${_SOURCES}],
"SHCXXCMD:direct" => %w[${SHCXX} -o ${_TARGET} ${CXXDEPGEN} ${INCPREFIX}${CPPPATH} ${CPPFLAGS} ${SHCXXFLAGS} ${SHCCFLAGS} ${SHLDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"SHCXXFLAGS" => %w[${CXXFLAGS}],
"SHDC" => "gdc",
"SHDCCMD" => %w[${SHDC} -c -o ${_TARGET} ${INCPREFIX}${D_IMPORT_PATH} ${SHDFLAGS} ${_SOURCES}],
"SHDCCMD:direct" => %w[${SHDC} -o ${_TARGET} ${INCPREFIX}${D_IMPORT_PATH} ${SHDFLAGS} ${SHLDFLAGS} ${_SOURCES} ${LIBDIRPREFIX}${LIBPATH} ${LIBLINKPREFIX}${LIBS}],
"SHDFLAGS" => %w[${DFLAGS}] + pic_flags,
"SHLD" => nil,
"SHLDCMD" => %w[${SHLD} -o ${_TARGET} ${SHLDFLAGS} ${_SOURCES} ${SHLIBDIRPREFIX}${LIBPATH} ${SHLIBLINKPREFIX}${LIBS}],
"SHLDFLAGS" => %w[${LDFLAGS} -shared],
"SHLIBDIRPREFIX" => "-L",
"SHLIBLINKPREFIX" => "-l",
"SHLIBPREFIX" => on_windows ? "" : "lib",
"SHLIBSUFFIX" => on_windows ? ".dll" : ".so",
"YACC" => "bison",
"YACCSUFFIX" => %w[.y .yy],
"YACC_CMD" => %w[${YACC} ${YACC_FLAGS} -o ${_TARGET} ${_SOURCES}],
"YACC_FLAGS" => %w[-d],
}
end
5.2 Example Build Scripts
5.2.1 Example: Building a C Program
build do
Environment.new do |env|
env["CFLAGS"] << "-Wall"
env.Program("program", glob("src/**/*.c"))
end
end
5.2.2 Example: Building a D Program
build do
Environment.new do |env|
env["DFLAGS"] << "-Wall"
env.Program("program", glob("src/**/*.d"))
end
end
5.2.3 Example: Cloning an Environment
build do
main_env = Environment.new do |env|
env["CFLAGS"] = ["-DSOME_DEFINE", "-O3"]
env["LIBS"] = ["SDL"]
env.Program("program", glob("src/**/*.cc"))
end
debug_env = main_env.clone do |env|
env["CFLAGS"] -= ["-O3"]
env["CFLAGS"] += ["-g", "-O0"]
env.Program("program-debug", glob("src/**/*.cc"))
end
end
5.2.4 Example: Custom Builder
class GenerateFoo < Builder
def run(options)
target, cache = options.values_at(:target, :cache)
cache.mkdir_p(File.dirname(target))
File.open(target, "w") do |fh|
fh.puts <<EOF
#define GENERATED 42
EOF
end
target
end
end
build do
Environment.new do |env|
env.add_builder(GenerateFoo)
env.GenerateFoo("foo.h", [])
env.Program("a.out", glob("*.c"))
end
end
5.2.5 Example: Using different compilation flags for some sources
build do
Environment.new do |env|
env["CFLAGS"] = ["-O3", "-Wall"]
env.add_build_hook do |build_op|
if build_op[:target] =~ %r{build/third-party}
build_op[:vars]["CFLAGS"] -= ["-Wall"]
end
end
env.Program("program", glob("**/*.cc"))
end
end
5.2.6 Example: Creating a static library
build do
Environment.new do |env|
env.Library("mylib.a", glob("src/**/*.c"))
end
end
5.2.7 Example: Creating a C++ parser source from a Yacc/Bison input file
build do
Environment.new do |env|
env.CFile("^/parser.tab.cc", "parser.yy")
end
end
5.3 ./configure && make
You can make your Rscons-based project more familiar to users of
autoconf-generated projects by creating a configure script and a Makefile
for the user.
Such users may be used to executing:
to build a project.
To do this, create a configure script with contents similar to the following:
#!/bin/sh
exec "$(dirname "$0")"/rscons configure "$@"
and make it executable with chmod +x configure .
If you want your users to be able to build/clean a project with make but
still make use of Rscons under the hood, you can create a Makefile with
contents something like this:
.PHONY: all
all:
./rscons build
.PHONY: clean
clean:
./rscons clean
5.4 YARD API Documentation
See here for Rscons YARD API Documentation.
6 License
Rscons is licensed under the terms of the MIT License:
Copyright (c) 2013-2019 Josh Holtrop
MIT License
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
7 Contributing
Rscons is developed on github.
Issues may be submitted to https://github.com/holtrop/rscons/issues.
Pull requests may be submitted as well:
- Fork it
- Create your feature branch (
git checkout -b my-new-feature )
- Commit your changes (
git commit -am 'Add some feature' )
- Push to the branch (
git push origin my-new-feature )
- Create new Pull Request
8 Change Log
v2.2.0
New Features
- #120 - improve support for MSYS2
- #119 - add failure messages for failed configuration checks
- #118 - compiler checks should support cross-compilers and freestanding compilers
v2.1.0
New Features
- #117 - ruby 2.7 compatibility
v2.0.2
Fixes
- #113 - distinguish object files built from multiple sources with the same base name but different extensions
v2.0.1
Fixes
- #112 - Install builder cannot replace a currently executing binary on Linux
v2.0.0
- convert rscons from a Ruby gem to a standalone script
- compress rscons distributable script
- add configure operation to detect compilers, check for headers/libraries, etc... (invoked automatically if needed)
- Environments store builder classes instead of instances of builder classes
- use a separate Builder instance for each build operation
- load Rsconscript from Rsconscript/Rsconscript.rb instead of Rsconsfile
- drop support for builder run methods using the old 5 parameter signature
- remove Environment#build_dir
- set Environment build root in configure step
- remove Builder#finalize (now #run called repeatedly until builder completes)
- remove Builder#setup
- remove Builder#features and Builder#produces?
- add functionality to allow builders to wait on Ruby threads or other builders
- add install/uninstall/distclean command-line operations
- preserve makefile dependency files under build directory
- remove a few deprecated methods
- pass a Builder instance to build hooks instead of a build operation Hash
- support a basic markup syntax in builder run messages to colorize target/source files
- hide (but store) failed compilation command by default so the user doesn't have to scroll back as much to see compiler output
- refactor to remove some redundancy among built-in builders
- track object file source language (correctly determine linker when only passed object files previously built by particular toolchains)
- add barriers
- add InstallDirectory builder
- change Install builder to copy files on 'install' operation
- add "prefix" construction variable based on configured installation prefix
- allow passing builder objects as sources to build targets
- differentiate 'build' targets from 'install' targets in cache contents
- add verbose mode
- show build progress as a percentage in builder output messages
- various performance improvements
- wrote a new user guide
- added new website (https://holtrop.github.io/rscons/)
- added new logo
v1.17.0
New Features
- allow construction variable expansion on
true and false values.
- remove makefile target name check when parsing dependencies
v1.16.0
New Features
- Add
Rscons.glob
- Support command-line variables
- improve debuggability of
cache.up_to_date?
- allow passing a VarSet into cache methods
Fixes
- generate dependencies for D builds
v1.15.0
v1.14.0
New Features
- #45 - Add
Rscons::VarSet#values_at
Fixes
- #44 -
Environment#print_builder_run_message should support string commands
v1.13.0
New Features
- #43 - Add ability to record side-effect file production
v1.12.0
New Features
- #40 - env.depends should imply
env.build_after
- #41 - be more colorful
Fixes
- #39 - wait for in-progress subcommands to complete on build failure
- #42 - cloned Environments should inherit
n_threads
v1.11.1
Fixes
- fix the circular build dependency detection logic
v1.11.0
New Features
- Change default Environment :clone option to :all to clone all attributes
- #38 - raise error when circular dependencies are found
- #34 - Allow overriding
n_threads on a per-Environment level
Fixes
- #35 -
env.build_after should expand paths
- #36 -
SHCFLAGS and SHCXXFLAGS should inherit non-SH flags by default
- #37 - Fix non-blocking thread-wait if
Rscons.n_threads is set to 0
v1.10.0
New Features
- #23 - add parallelization - builds are now parallelized by default
- #31 - add LEXSUFFIX, YACCSUFFIX construction variables
- #30 - place object files for absolute source paths under build_root
- #28 - support redirecting standard output using the Command builder
- Always use a build root and default it to "build"
- Add builder features
- #8 - add SharedObject and SharedLibrary builders
Fixes
- expand target and source paths before calling
Builder#create_build_target
- #29 - fix
PROGSUFFIX handling
- #32 - Pre-build hooks do not respect modified key values
v1.9.3
Environment#parse_flags should put -std=XXX flags in CCFLAGS, not CFLAGS
v1.9.2
- allow phony targets in conjunction with build roots
v1.9.1
- change *SUFFIX defaults to arrays
- add various C++ file suffixes
- use ${INCPREFIX} instead of hard-coded "-I" in Preprocess builder
v1.9.0
New Features
- #6 - add Install and Copy builders
- #22 - allow overriding Command builder short description with
CMD_DESC variable
- #24 - add "rscons" executable
- #25 - add support for phony targets given as Symbols instead of Strings
- #26 - support registering multiple build targets with the same target name
- #27 - add Directory builder
Fixes
- #20 - fix variable references that expand to arrays in build target sources
- #21 - rework Preprocess builder to consider deep dependencies
- fix
Rscons.set_suffix to append the given suffix if the filename has none
- remove ${CFLAGS} from default
CPP_CMD
v1.8.1
- fix Environment#dump when construction variables are symbols
v1.8.0
- new Command builder to execute arbitrary user commands
- new SimpleBuilder class
- create new builders quickly by passing a block to
Environment#add_builder
- improved YARD documentation
- add Environment#dump to debug Environment construction variables
v1.7.0
- allow build hooks to register new build targets
- add post-build hooks (register with
Environment#add_post_build_hook )
- clear all build targets after processing an Environment
- allow trailing slashes in arguments to
Environment#build_dir
v1.6.1
- add DEPFILESUFFIX construction variable to override dependency file suffix
- fix Environment#depends to expand its arguments for construction variables
v1.6.0
- support lambdas as construction variable values
v1.5.0
- add "json" as a runtime dependency
- update construction variables to match SCons more closely
- add
CPPDEFPREFIX , INCPREFIX , CPPDEFINES , CCFLAGS , LIBDIRPREFIX , and LIBLINKPREFIX
- add
Environment#shell
- add
Environment#parse_flags , #parse_flags! , #merge_flags
- unbuffer
$stdout by default
- add
PROGSUFFIX construction variable (defaults to .exe on MinGW/Cygwin)
- add
Rscons::BuildTarget and Builder#create_build_target
- update specs to RSpec 3.x and fix to run on MinGW/Cygwin/Linux
- add YARD documentation to get to 100% coverage
v1.4.3
- fix builders properly using construction variable overrides
- expand nil construction variables to empty strings
v1.4.2
- add
Environment#expand_path
- expand construction variable references in builder targets and sources before invoking builder
v1.4.1
- fix invoking a builder with no sources while a build root defined
v1.4.0
- add CFile builder
- add Disassemble builder
- add Preprocess builder
- pass the Environment object to build hooks in the :env key of the build_op parameter
- expand target/source paths beginning with "^/" to be relative to the Environment's build root
- many performance improvements, including:
- use JSON instead of YAML for the cache to improve loading speed (Issue #7)
- store a hash of the build command instead of the full command contents in the cache
- implement copy-on-write semantics for construction variables when cloning Environments
- only load the cache once instead of on each Environment#process
- only write the cache when something has changed
- fix
Cache#mkdir_p to handle relative paths (Issue #5)
- flush the cache to disk if a builder raises an exception (Issue #4)
v1.3.0
- change Environment#execute() options parameter to accept the following options keys:
- :env to pass an environment Hash to Kernel#system
- :options to pass an options Hash to Kernel#system
v1.2.0
- add :clone option to Environment#clone to control exactly which Environment attributes are cloned
- allow nil to be passed in to
Environment#build_root=
v1.1.0
- Change
Cache#up_to_date? and #register_build to accept a single target
file or an array of target file names
|


--- layout: page title: About header-img: "img/about-bg.png" ---
Multi passionate MBA grad on a new journey.


Popular searches
Air Transport
Aviation
Mekaniske Verksted
Port Authority
Sporvei
Bergens Kreditbank
Projects
Images
People
Country
Norway
Turkey
City


|
Fig. 1
|
Observed and CMIP5 relative sea surface temperature (SST) re ... |
|
Fig. 2
|
Central Pacific relative sea surface temperature (SST) respo ... |
|
Fig. 3
|
Equatorial Pacific response following the Pinatubo eruption. ... |
|
Fig. 4
|
Global surface temperature, precipitation and wind patterns ... |
|
Fig. 5
|
Western equatorial Pacific wind stress and relative sea surf ... |
|
Fig. 6
|
Tropical precipitation and wind patterns in response to the ... |
|
Fig. 7
|
Schematic of the mechanism for volcanic El Niño development ... |


Toggle navigation
Menu
Home
Join Us!
Events
Competitions
Social Events
Contact Us
Competitions
|
Social Events
Competitions
Competitions we take part in
IVP
SUNIG
TEST
Name
Competition
Event
Year
Position
1
Chewy
TEST
1500m
2016
1st
Social Events
Halloween
Spooky scary skeletons!
Summer trips
Fun under the sun in Taiwan!


The Xbox is the first Xbox console created by Microsoft, it was released in the early 2000's with it's best selling game being Halo 2 which was released in November 2004. This was Microsofts first home console which it competed with the likes of the Playstation and Gamecube, plus it's the console that first introduced Xbox Live, which is the xbox's subscription-based online service. The xbox live service allowed the players the ability to play their games online with people all around the world. The online service was a great sucess do to features like the buddy list. Although you did have to pay to use online.
The Xbox 360 is the second installment created by Microsoft and the successor of the first Xbox,it was released in November 2005 to compete with the Playstation 3 and the Nintendo Wii.The Xbox 360 expanded on Xbox live service with the ability to stream multimedia content and later the ability to purchase and stream music,televison programs and films by the Xbox music and Xbox video services.It's also the console that introduced the Xbox connect so players could play their games without a controller.
The Xbox One is the third installment for the Xbox consoles created by Microsoft it's the sucessor for the Xbox 360 it has a large number of internet-based feautres, such as youtube. This was microsofts attempt to compete with the playstation 4, like the xbox 360 it also allows gamers to use the kinect to play without a controller,in june 2016 Microsoft updated the console and called it the Xbox one S.


More Information
Events Calendar
Home
Search
Sign Up For Our Newsletter
Ride Against Climate Change!
Sign up today
Help us plan the bike route.
View Event Plan
Volunteer for bike planning
Bring food or other foot items.
View Event Plan
Volunteer for Bringing Food
Help coordinate groups.
View Even Plan
Volunteer for Bringing Food