ToWAs
Table of contents
Abstract
ToWAs, Tourist Web Assistant, is a web application which provides relevant map-related data based on a user's profile. It uses semantic-enabled data from Wikidata, LinkedGeoData, WikiVoyage and Eurostat combined together with a recommendation system in order to generate and display the best itinerary for the user. All of the data needed to create a user profile (user travelling with family, user which travels with a big group of friends, etc.) is retrieved from Facebook, and completed with a couple of forms from the application in case the user doesn't have enough relevant information on his account.
Motivation
The Federal Aviation Administration Air Traffic Organization provides service to more than 43,000 flights and 2.6 million airline passengers across more than 46 million square kilometers of airspace. They state that over 15,8 million of flights are handled yearly, with an average of 43 thousand on a daily basis. On average an airplane has a capacity of 475 passengers, meaning that there are about 7.5 billion passengers yearly, and while some of them travel to go back home, a great majority will travel to foreign places, either be just business or leisure. It is the human nature to explore and find new exciting things to talk about and remember forever. Therefore every passenger travelling to a new place, will search and look for landmarks, museums, restaurants, amusement parks, fancy hotels, that they will enjoy and keep in their minds for a long time. Instead of them planning their itineraries before going somewhere, why not have a smart assistant do that for them?
The solution we propose is ToWAs, the friendly Tourist Web Assistant, which profiles the user thoroughly to create the best travel plan based on his personality and needs. Is the user a student going on holiday to Ibiza with his/her best friends? ToWAs will recommend the best night clubs and beaches from there. Is the user a father of two, travelling together with his family in Paris? ToWAs got their trip already planned beforehand, and marked Disneyland as the first attraction on the list. Our goal is to provide the best experience and create memorable events for every user that uses ToWAs for their next trip.
ToWAs uses the data the user provides throughout his facebook profile and lets him/her complete with any kind of additional information that they consider relevant for their next trip. Afterwards, a travel plan is generated and displayed to the user. Did ToWAs forget or did not consider a landmark or attraction you really wanted to go to? No worries, you can edit your travel plan at any time and the application will adapt to your modifications.
Architecture
Technologies
For the Back-End part, we decided to use C# and .NET Core, since it's easy to configure and it provides a lot of usefull features, and we have some experience with it from other University projects from the past years. We will use ASP .NET Core WebAPI for developing the RESTful API, and .NET RDF for the Semantic part which can handle RDF, RDFS, RDFa, OWL and SPARQL. We didn't consider necessary the use of a database because the login is being done only through Facebook API so that we can gather as much information about the user as possible. All the other data was stored just for the duration of the session because the parameters for the recommandations can change with every request from the user.
For the Front-End part, we aim for a Single Page Application (SPA), using Angular 7 as the main helping library. We will use the latest stable ECMAScript spec (ES8), and Webpack in order to optimize the build and overall performance of the application. As for the styling of the page, ToWAs will have Sass as the main CSS preprocessor. The map will be rendered using OpenLayers and retrieve relevant data about locations from OpenLayers aswell.
Use Case Diagram
Graphical Interface
We opted for a Single-Page Application, which is simplifying the user experience and dynamically loading the data in order to focus on the offered services. When the user launches the application he will be sent to the login page, where he has a small description about the application and a Facebook login button, which will redirect him to a Facebook permission granting page and afterwards to the landing page of ToWAs.
After logging in, he will be presented with the landing page, the dashboard, setting the main focus on the map itself. The first time when the user logs in, the application will get his current position and try to create a general trip plan for it and display points of interest on the map. When he hovers over them, he will have additional data about them, including the name and a brief description. The search bar from the navbar is there for the user to search for a location and see what does ToWAs generate for it. On the top right he has three buttons. The first one is actually his profile picture from Facebook if he has one, and if he clicks it he will have two options: to view his profile with the data he provides ToWAs with and the option to logout.
When the user presses the third button from the navbar, a container will slide from the right, showing a list of all the locations that ToWAs found for him. When he clicks on any of the items, the map will have that location centered and the distances toward the other locations will be calculated again based on the current item. As an addition, a route/itinerary will be generated using all of the recommended points of interest, using the best route from point A to point B.
The second button will launch a modal in which he can describe his next trip for a better recommendation the next time he enters the app.
Data
We wanted to use the data from Facebook as the main source of information for making recommandations, but unfortunately Facebook no longer gives access to fields containing personal information of the user, what he likes, where he travelled, etc because of the new GDPR laws. We are forced to gather most of our information directly from the user's input through a form and make a recommandation using that data.
As for GeoData data, we will have a combination of three semantic-enabled providers: Dbpedia and Wikidata. The geodata will be accessed through SPARQL endpoints provided by each API.
Recommendation System
A recommendation engine, also known as a recommender system, is software that analyzes available data to make suggestions for something that a website user might be interested in, such as a book, a video or a job, among other possibilities. When it comes to recommendation systems, there are three main types of algorithms worth mentioning:
- Content based: if you like an item, then you will also like a similar item
- Collaborative: If a person A has the same interests as the person B, then the two should like the same items
- Hybrid: a combination between the two above mentioned types
For our application we are going to use a Content based approach. We will retrieve all the data that the user fills in our form regarding the next trip and filter exactly the relevant data, then based on his check-ins and likes we can then optimise our result.
Implementation
As we mentioned above, the first problem that we encountered was that we could no longer use Facebook API to get informations about the user because the GDPR prohibits Facebook from sharing the user's personal data with people without the permission of said user.
For the GUI we used OpenLayers to render the map. Upon logging in, the user has to complete a form containing some details about himself. We will use this data to offer him recommendations for places to visit. Upon initiating a new search for places to visit in a certain town, the client application sends the backend the name of the city. Upon response, pins are placed on the map to show the location of the points of interest. The answer usually contains between 5 and 9 points of interest. The user can change his journey's filters at any time to get new recomandations, by pressing the "plus" button on the GUI.


Streamlining your permit and licensing experience.
GreenLight is a demonstration of the potential of trusted digital credentials, showing how government services might independently automate their permit and licensing application process based on better data, while at the same time simplifying cross-jurisdictional processes for businesses.
This new service is a decentralized workflow application - a mapping tool - that helps you navigate the sometimes tricky license and permit process. It uses cutting-edge blockchain technology to show you not only the steps to getting your permit or license, but more importantly, the interdependencies that might be involved. Using a colour-coded flow diagram, GreenLight helps you build up the credentials you need to get the "green light" to operate!
Let's get started!
DID YOU KNOW: GreenLight credential issuers simplify access to permits and licences for more than 400,000 registered corporations in British Columbia. By joining GreenLight, issuers get access to better data, faster, while making it easier for the businesses they serve to get permits and licenses. Everybody wins!


The following is a list of compile dependencies for this project. These dependencies are required to compile and run the application:
| GroupId | ArtifactId | Version | Type | Licenses |
|---|---|---|---|---|
| com.google.code.findbugs | jsr305 | 3.0.1 | jar | The Apache Software License, Version 2.0 |
| junit | junit | 4.12 | jar | Eclipse Public License 1.0 |
| org.apache.commons | commons-lang3 | 3.5 | jar | Apache License, Version 2.0 |
| org.hamcrest | hamcrest-core | 1.3 | jar | New BSD License |
| org.hamcrest | hamcrest-library | 1.3 | jar | New BSD License |
| org.mockito | mockito-core | 1.10.19 | jar | The MIT License |
| org.slf4j | slf4j-api | 1.7.21 | jar | MIT License |
The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:
| GroupId | ArtifactId | Version | Type | Licenses |
|---|---|---|---|---|
| org.assertj | assertj-core | 3.5.2 | jar | Apache License, Version 2.0 |
| org.camunda.bpm.extension | camunda-bpm-assert | 2.0-alpha1 | jar | The Apache Software License, Version 2.0 |
| org.slf4j | jcl-over-slf4j | 1.7.21 | jar | MIT License |
| org.slf4j | slf4j-simple | 1.7.21 | jar | MIT License |
| org.springframework | spring-context | 4.1.7.RELEASE | jar | The Apache Software License, Version 2.0 |
The following is a list of provided dependencies for this project. These dependencies are required to compile the application, but should be provided by default when using the library:
| GroupId | ArtifactId | Version | Type | Licenses |
|---|---|---|---|---|
| com.h2database | h2 | 1.4.190 | jar | MPL 2.0, and EPL 1.0 |
| javax.inject | javax.inject | 1 | jar | The Apache Software License, Version 2.0 |
| org.camunda.bpm | camunda-engine | 7.6.0 | jar | The Apache Software License, Version 2.0 |
The following is a list of transitive dependencies for this project. Transitive dependencies are the dependencies of the project dependencies.
The following is a list of runtime dependencies for this project. These dependencies are required to run the application:
| GroupId | ArtifactId | Version | Type | Licenses |
|---|---|---|---|---|
| org.objenesis | objenesis | 2.1 | jar | Apache 2 |
The following is a list of test dependencies for this project. These dependencies are only required to compile and run unit tests for the application:
| GroupId | ArtifactId | Version | Type | Licenses |
|---|---|---|---|---|
| aopalliance | aopalliance | 1.0 | jar | Public Domain |
| org.springframework | spring-aop | 4.1.7.RELEASE | jar | The Apache Software License, Version 2.0 |
| org.springframework | spring-expression | 4.1.7.RELEASE | jar | The Apache Software License, Version 2.0 |
The following is a list of provided dependencies for this project. These dependencies are required to compile the application, but should be provided by default when using the library:
Apache 2: Joda time, Objenesis
MPL 2.0, and EPL 1.0: H2 Database Engine
Eclipse Public License 1.0: JUnit
The MIT License: Mockito
MIT License: JCL 1.1.1 implemented over SLF4J, SLF4J API Module, SLF4J Simple Binding
Common Development and Distribution License (CDDL) v1.0: JavaBeans Activation Framework (JAF), JavaMail API
Apache License, Version 2.0: Apache Commons Lang, AssertJ fluent assertions
Public Domain: AOP alliance
New BSD License: Hamcrest Core, Hamcrest library
The Apache Software License, Version 2.0: Apache Commons Logging, Commons Email, FindBugs-jsr305, MyBatis, Spring AOP, Spring Context, Spring Core, Spring Expression Language (SpEL), camunda BPM - BPMN Model API, camunda BPM - CMMN Model API, camunda BPM - DMN Model API, camunda BPM - Xml Model API, camunda BPM - engine, camunda Commons - Logging, camunda Commons - Typed Values, camunda Commons - Utils, camunda DMN - engine, camunda DMN - engine FEEL - API, camunda DMN - engine FEEL - JUEL, camunda-bpm-assert, camunda-bpm-mockito, javax.inject, spring-beans
| Filename | Size | Entries | Classes | Packages | Java Version | Debug Information |
|---|---|---|---|---|---|---|
| aopalliance-1.0.jar | 4.5 kB | 15 | 9 | 2 | 1.3 | Yes |
| jsr305-3.0.1.jar | 19.9 kB | 46 | 35 | 3 | 1.5 | Yes |
| h2-1.4.190.jar | 1.7 MB | 640 | 637 | 35 | 1.6 | Yes |
| commons-logging-1.2.jar | 61.8 kB | 42 | 28 | 2 | 1.2 | Yes |
| activation-1.1.jar | 63 kB | 50 | 38 | 3 | 1.4 | Yes |
| javax.inject-1.jar | 2.5 kB | 8 | 6 | 1 | 1.5 | No |
| mail-1.4.1.jar | 447.7 kB | 303 | 279 | 13 | 1.4 | Yes |
| joda-time-2.1.jar | 570.5 kB | 704 | 228 | 7 | 1.5 | Yes |
| junit-4.12.jar | 314.9 kB | 323 | 286 | 30 | 1.5 | Yes |
| commons-email-1.2.jar | 32.3 kB | 23 | 10 | 1 | 1.4 | Yes |
| commons-lang3-3.5.jar | 479.9 kB | 284 | 260 | 12 | 1.6 | Yes |
| assertj-core-3.5.2.jar | 1.1 MB | 852 | 802 | 29 | 1.8 | Yes |
| camunda-engine-7.6.0.jar | 3.4 MB | 2561 | 2195 | 176 | 1.6 | Yes |
| camunda-engine-dmn-7.6.0.jar | 142.8 kB | 147 | 119 | 16 | 1.6 | Yes |
| camunda-engine-feel-api-7.6.0.jar | 4.7 kB | 16 | 3 | 1 | 1.6 | Yes |
| camunda-engine-feel-juel-7.6.0.jar | 182.7 kB | 173 | 142 | 10 | 1.6 | Yes |
| camunda-bpm-assert-2.0-alpha1.jar | 50.5 kB | 41 | 25 | 4 | 1.6 | Yes |
| camunda-bpmn-model-7.6.0.jar | 634.8 kB | 701 | 672 | 13 | 1.6 | Yes |
| camunda-cmmn-model-7.6.0.jar | 286.3 kB | 326 | 300 | 6 | 1.6 | Yes |
| camunda-dmn-model-7.6.0.jar | 221.3 kB | 280 | 263 | 4 | 1.6 | Yes |
| camunda-xml-model-7.6.0.jar | 163.4 kB | 152 | 123 | 18 | 1.6 | Yes |
| camunda-commons-logging-1.4.0.jar | 4.3 kB | 12 | 1 | 1 | 1.6 | Yes |
| camunda-commons-typed-values-1.4.0.jar | 64.8 kB | 90 | 69 | 10 | 1.6 | Yes |
| camunda-commons-utils-1.4.0.jar | 12 kB | 21 | 9 | 2 | 1.6 | Yes |
| hamcrest-core-1.3.jar | 45 kB | 52 | 45 | 3 | 1.5 | Yes |
| hamcrest-library-1.3.jar | 53.1 kB | 46 | 35 | 7 | 1.5 | Yes |
| mockito-core-1.10.19.jar | 1.2 MB | 1138 | 694 | 67 | 1.5 | Yes |
| mybatis-3.2.8.jar | 714.1 kB | 550 | 485 | 51 | 1.6 | Yes |
| objenesis-2.1.jar | 41.8 kB | 52 | 37 | 9 | 1.5 | Yes |
| jcl-over-slf4j-1.7.21.jar | 16.4 kB | 23 | 9 | 2 | 1.5 | Yes |
| slf4j-api-1.7.21.jar | 41.1 kB | 46 | 34 | 4 | 1.5 | Yes |
| slf4j-simple-1.7.21.jar | 10.9 kB | 16 | 6 | 1 | 1.5 | Yes |
| spring-aop-4.1.7.RELEASE.jar | 359.5 kB | 287 | 255 | 15 | 1.6 | Yes |
| spring-beans-3.1.2.RELEASE.jar | 592.2 kB | 398 | 358 | 14 | 1.5 | Yes |
| spring-context-4.1.7.RELEASE.jar | 1 MB | 833 | 721 | 65 | 1.6 | Yes |
| spring-core-4.1.7.RELEASE.jar | 1 MB | 769 | 723 | 40 | 1.6 | Yes |
| spring-expression-4.1.7.RELEASE.jar | 259.2 kB | 153 | 141 | 6 | 1.6 | Yes |
| Total | Size | Entries | Classes | Packages | Java Version | Debug Information |
| 37 | 15.3 MB | 12173 | 10082 | 683 | 1.8 | 36 |
| compile: 7 | compile: 2.1 MB | compile: 1935 | compile: 1389 | compile: 126 | - | compile: 7 |
| test: 8 | test: 2.8 MB | test: 2220 | test: 1968 | test: 124 | - | test: 8 |
| runtime: 1 | runtime: 41.8 kB | runtime: 52 | runtime: 37 | runtime: 9 | - | runtime: 1 |
| provided: 21 | provided: 10.3 MB | provided: 7966 | provided: 6688 | provided: 424 | - | provided: 20 |
| Repo ID | URL | Release | Snapshot | Blacklisted |
|---|---|---|---|---|
| JBoss public | https://repository.jboss.org/nexus/content/groups/public/ | Yes | Yes | No |
| central | https://repo.maven.apache.org/maven2 | Yes | No | No |
| sonatype-nexus-snapshots | https://oss.sonatype.org/content/repositories/snapshots | No | Yes | Yes |
| com.springsource.repository.bundles.external | http://repository.springsource.com/maven/bundles/external | Yes | Yes | Yes |
| jboss-public-repository | http://repository.jboss.org/nexus/content/groups/public | Yes | No | No |
| apache.snapshots | https://repository.apache.org/snapshots | No | Yes | No |
| camunda-bpm-nexus | https://app.camunda.com/nexus/content/groups/public | Yes | Yes | No |
Repository locations for each of the Dependencies.


🪣 📖 Tidytype - a library for legible text
An open source library for making text legible and readable text from digital screens 📱 to physical paper 📰
👋 Introduction to TidyType - the best library for readable text
🏃♂ Movable type
Brussels will set out plans this week to increase taxes on polluting fuels and introduce an EU-wide levy on aviation kerosene for the first time, under measures intended to put it at the forefront of global efforts to reduce carbon emissions.
The European Commission will propose a revamp of its 15-year-old rule book on carbon taxes to provide an incentive for low-emissions fuel and impose levies on heavily polluting energy used in the airline and shipping industry. The measure is one of a dozen policies to be unveiled on Wednesday to ensure the EU can meet a goal of reducing average carbon emissions by 55 per cent by 2030. Others include an extension of the EU’s emissions trading scheme, tougher CO2 rules for cars and a carbon levy on some imports.
A draft legal text of the energy taxation directive, seen by the Financial Times, proposes gradually increasing minimum rates on the most polluting fuels such as petrol, diesel and kerosene used as jet-fuel over a period of 10 years. Zero-emissions fuels, green hydrogen and sustainable aviation fuels will face no levies for a decade under the proposed system.
The “Fit for 55” package puts the EU at the vanguard of decarbonisation efforts but the proposals risk a backlash from some governments and the public.
Portable type
Introducing environmental taxes is likely to be among the most politically sensitive measures in the commission’s plans. Unlike most of Brussels’ new green policies, updating the energy taxation directive will require unanimous backing from the EU’s 27 member states to become a reality.
Paolo Gentiloni, Brussels economics commissioner, has called the reform a “now or never moment”.
“Paradoxically, [the current energy taxation directive] is incentivising fossil fuels and not environmentally friendly fuels. We have to change this”, Gentiloni said at a meeting of G20 finance ministers this weekend.
The EU’s energy taxation rules date back to 2006 and have created a system that “favours fossil fuel use” owing to a series of exemptions and loopholes for dirty energy across different member states, according to the text. The directive is designed to set a series of minimum tax rates for energy products across the bloc.
Scalable type
One of the big changes being proposed is an end to exemptions for heavily polluting fuels such as kerosene used in aviation. The draft says jet fuel used in intra-EU flights should be subject to a new minimum rate of taxation, the details of which have not yet been decided, said officials. The rules should, however, exempt cargo-only flights, and apply lower rates for non-commercial flights, according to the draft.
Although a kerosene tax has been welcomed by many EU countries, it has sparked resistance from the aviation industry. Brussels is also planning to phase out free carbon credits provided to the sector under its ETS. Along with the taxation rules, the phase out of free allowances would significantly increase the pressure on aviation to reduce its emissions or pay for polluting.
The draft says gradually increasing minimum taxes during a ten-year transition would help avoid the problem of “double taxation” for the maritime and aviation industries which risk being subject to two forms of CO2 pricing.
HTML elements for expressing
Airline group A4E has said new carbon taxes for the sector are “ecologically and economically counterproductive” and that market-based carbon pricing should be the only main form of CO2 pricing placed on the industry.
“An intra-EU kerosene tax could lead to a competitive distortion within Europe’s internal market and globally,” said A4E. “A possible kerosene tax that would set minimum tax rates for intra-EU flights is likely to have the most negative impact, as it may open the door to different rates inside the single market.”
You can use strong and bold in text
You can use emphasis, cite and italics in text
You can use the mark tag to highlight text.
This line of text is meant to be treated as deleted text.
This line of text is meant to be treated as no longer accurate.
This line of text is meant to be treated as an addition to the document.
This line of text will render as underlined.
attr
HTML
Scalable type
- This is a list.
- It appears completely unstyled.
- Structurally, it's still a list.
- However, this style only applies to immediate child elements.
- Nested lists:
- are unaffected by this style
- will still show a bullet
- and have appropriate left margin
- This may still come in handy in some situations.
- Description lists
- A description list is perfect for defining terms.
- Term
-
Definition for the term.
And some more placeholder definition text.
- Another term
- This definition is short, so no extra paragraphs or anything.
- Nesting
-
- Nested definition list
- I heard you like definition lists. Let me put a definition list inside your definition list.
| Name | Description | Other | THings |
|---|---|---|---|
| The table footer | |||
| The table body | with two columns | with two columns | with two columns |
| The table body | with two columns | with two columns | with two columns |
| The table body | with two columns | with two columns | with two columns |
| The table body | with two columns | with two columns | with two columns |
| The table body | with two columns | with two columns | with two columns |


General Search:
Search by Type
Search by Region
Search by Date
Nothing Here
{{appoiment.date}}
{{appoiment.starttime}} to {{appoiment.endtime}}
Client {{appoiment.client}} - {{appoiment.region_name}}.
Type of appt: {{appoiment.type}} / Location: {{appoiment.location}} / Location adress: {{appoiment.adress}} / Location phone: {{appoiment.location_phone}}


Harry Morton dead: Lindsay Lohan's ex and Pink Taco founder dies aged 38
The businessman and son of Hard Rock Cafe founder Peter Morton has died after being found unresponsive at his home
by Irishmirror.ieBusinessman Harry Morton, who famously dated Lindsay Lohan, has been found dead at the age of 38.
The Pink Taco founder has died after being found unresponsive at his home by a relative on Saturday, TMZ reports.
Harry was the son of Hard Rock Cafe co-founder Peter Morton.
It's reported that Harry was pronounced dead at his Beverly Hills home.
It's said that foul play is not suspected and an autopsy will be carried out to determine the cause of his death.
Harry founded popular US restaurant chain Pink Taco when he was just 18-years-old.
His grandfather Arnie was also in the restaurant business and co-founded Morton's Steakhouse back in 1978.
Harry famously dated Mean Girls actress Lindsay in the 2000s.
The businessman was also romantically linked to Demi Moore, Britney Spears and Paris Hilton at various stages.
Harry had begun working for his dad at the Hard Rock Cafe before branching out on his own.
He also bought the Viper Room nightclub in 2008.
The Hollywood club is the place where actor River Phoenix infamously died of a drug overdose in 1993.
Harry also owned Elvis Presley's former Beverly Hills estate, but it is not believed that Harry died at that residence.
Harry, who is survived by his parents Petr and Paulene, was recently named Reserve Detective of the Year by the West Hollywood Sheriff's Station.


This module allows you to export disk devices to other systems over the network
using the iSCSI protocol. Configuration is done primarily by creating three
types of objects - Devices to Share, Devices Combinations and Sharing Targets, described below. You can also edit settings that apply
to the entire iSCSI server using the iSCSI Server Options page.
- Devices to Share (extents in the config file)
- Each of these is a partition, RAID device, logical volume or file that
can be fully or partially exported via iSCSI. Shared devices should not be
used for any othe purpose on this system.
- Device Combinations (devices in the config file)
- These allow you to combine multiple Devices to share into a larger
device for export. Devices can either be joined in RAID0-style to add their
sizes together, or mirrored RAID1-style for redundancy and improved read
performance.
- Sharing Targets (target in the config file)
- Each entry in this list exports either a device or device combination to
all systems on a selected network. A share can be either read-only or
read/write.
At the bottom of the module's main page are buttons to stop, start and restart
the iSCSI server. Configuration changes will not be applied until the server
is restarted.


We enhance dogs!
- deploy real-time architectures
- seize dot-com synergies
- iterate cutting-edge web services
- architect back-end markets
- e-enable one-to-one schemas
- synergize cutting-edge networks
- transform collaborative architectures
- mesh integrated relationships
- optimize frictionless web-readiness
- aggregate bleeding-edge initiatives
- reintermediate leading-edge portals


Title of the article The article content goes inside a div. The content could be anything. Rendered markdown, for example.


Querying an Information Model
As a software developer, you undoubtedly have countless questions to ask about your source code. Just like your questions, queries may be simple and straightforward, or much more complicated. Understanding your objectives goes a long way in helping you determine the best approach for your analysis.
The chapter covers the following topics:


| |
Methods defined here:
- __init__(self, file, host, port, username, password, local_path)
- Synopsis:
Constructor for the Connect class
Details:
Tells class to instantiate file, host, port, user, password, and local_path attributes
- connect_to_server(self)
- Synopsis:
Method to connect via SFTP/SSH
Details:
The SSH and SFTP connection are first closed to make sure that they are closed
and then they are open to send data
The SSH connection tells the server to import self.file (JSON file) and closes
The SFTP connection sends self.file and closes
|


Based in Grosse Pointe Woods, MI
I am currently learning C# .Net through Dev.Build 2.0, a program offered by Quicken Loans. I am taking online courses through TeamTreehouse.com and attending classes at Grand Circus in Detroit, MI.
Soon our cohort will complete a final project, where we will build an application from the ground up as a team. Then we will be placed on a Technology Team at Quicken Loans.
Please feel free to contact me at<EMAIL_ADDRESS>or through LinkedIn.


I like playing ball games and swimming. I also enjoy set down to play card games that also let me think of the stragety I need to use.
I follow a number of animes and like to go to different kinds of concert, sometimes I also like learn some music instrument myself.


CSS gives style to raw HTML
CSS stands for Cascading style sheets
CSS is used to give style to our web pages
CSS is used to make websites Responsive
HTML is used to structure a website
CSS takes responsibility to design
1st we write:Selector that means where you wanna put CSS design & its properties in CSS, like this p={color:blue;}
Inline CSS:-CSS is added to the elements directly using style attribute
Internal CSS:-CSS is kept inside the head tags in tags
External CSS:-CSS is kept separately inside a.css style sheet tags


Contact
I post about things I care about on Twitter. I do my open source work mostly on Github. You can find me on
LinkedIn talking
about technology, start-ups, and entrepreneurship. Have something interesting
to discuss? Email me at anirudh@foxish.me


This record stores information about a single metadata type.
Record Data — BIFF8 only
|
Offset |
Name |
Size |
Contents |
|
4 |
rt |
2 |
Record type; this matches the BIFF rt in the first two bytes of the record; =0884h |
|
6 |
grbitFrt |
2 |
FRT cell reference flag; =0 currently |
|
8 |
(Reserved) |
8 |
Currently not used, and set to 0 |
|
16 |
grbit |
4 |
Metadata type flags |
|
20 |
stName |
var |
Metadata type name; string |
The grbit field contains the following metadata type flags:
|
Offset |
Bits |
Mask |
Name |
Contents |
|
0 |
0 |
00000001h |
ghostRow |
=1 if metadata is copied to/from a ghost row |
|
|
1 |
00000002h |
ghostCol |
=1 if metadata is copied to/from a ghost column |
|
|
2 |
00000004h |
edit |
=1 if metadata survives editing of a cell value |
|
|
3 |
00000008h |
delete |
=1 if metadata survives deletion of a cell value |
|
|
4 |
00000010h |
copy |
=1 if metadata is copied with a cell |
|
|
5 |
00000020h |
pasteAll |
=1 if metadata is populated by " Paste Special: All" |
|
|
6 |
00000040h |
pasteFormulas |
=1 if metadata is populated by " Paste Special: Formulas" |
|
|
7 |
00000080h |
pasteValues |
=1 if metadata is populated by " Paste Special: Values" |
|
|
8 |
00000100h |
pasteFormats |
=1 if metadata is populated by " Paste Special: Formats" |
|
|
9 |
00000200h |
pasteComments |
=1 if metadata is populated by " Paste Special: Comments" |
|
|
10 |
00000400h |
pasteDataValidation |
=1 if metadata is populated by " Paste Special: Validation" |
|
|
11 |
00000800h |
pasteBorders |
=1 if metadata is populated with borders |
|
|
12 |
00001000h |
pasteColWidths |
=1 if metadata is populated by " Paste Special: Column widths" |
|
|
13 |
00002000h |
pasteNumberFormats |
=1 if metadata is populated with number formats |
|
|
14 |
00004000h |
merge |
=1 if metadata survives cell merge |
|
|
15 |
00008000h |
splitFirst |
=1 if when a merged cell is split its metadata is copied to the first resulting cell |
|
|
16 |
00010000h |
splitAll |
=1 if when a merged cell is split its metadata is copied to all of the resulting cells |
|
|
17 |
00020000h |
rowColShift |
=1 if metadata survives shifting due to row/column insertion/deletion |
|
|
18 |
00040000h |
clearAll |
=1 if metadata survives " Clear: All" |
|
|
19 |
00080000h |
clearFormats |
=1 if metadata survives " Clear: Formats" |
|
|
20 |
00100000h |
clearContents |
=1 if metadata survives " Clear: Contents" |
|
|
21 |
00200000h |
clearComments |
=1 if metadata survives " Clear: Comments" |
|
|
22 |
00400000h |
assign |
=1 if metadata is propagated by formula assignment operation |
|
|
23-27 |
0F800000h |
(Reserved) |
Currently not used, and set to 0 |
|
|
28 |
10000000h |
coerce |
=1 if value metadata is safe to strip away on coercion |
|
|
29 |
20000000h |
adjust |
=1 if metadata is location-aware: needs adjustment, cannot be shared |
|
|
30 |
40000000h |
cellMeta |
=1 if cell metadata type; |
|
|
31 |
80000000h |
(Reserved) |
Currently not used, and set to 0 |


Model¶
This part contains overview for used model classes. For a more in-depth explanation see Classes
Users¶
The user model consists currently of five classes:
User
is an abstract base class for all usersLibrarian
is a kind of an admin which can manage everything elsePatron
is an abstract base class for all patronsStudentPatron
is a class that represents all student-patronsFacultyPatron
is a class that represents all faculty-patrons
There is a single root user throughout the runtime, which is a librarian. This is done because only a librarian can create new users, and wee need an entry point.
Documents¶
The document model consists currently of five classes:
Document
is an abstract base class for all documents, which contains all common fields.DocumentCopy
is a class for a copy of a document, which is just linked to a loan and a document.- And a class for each document type (
Book
,AVMaterial
,JournalArticle
).
Booking System¶
The Loan
is the single class which represents the booking system.
Each Loan has a status (hexagonal.model.loan.Loan.Status
) - it can be:
requested - user wants this book. Then librarian can push a button and make the loan
approved - which means that it is currently in patron’s possession. Then, finally, user brings the book back,
and it becomes returned, until a librarian approves the return request, and the loan is removed.
This is the whole lifecycle of one Loan.
Priority Queue¶
The QueuedRequest
is the single class responsible for the priority queue.
It uses SQL ORDER BY’s to implement the required behaviour, and contains indices for them to be fast enough.


1. Automate the UI 2. Automate the Service integration 3. Custom Search Fields 4. Result display based on configuration 5. Runtime Graph selection and x,y axis 6. Run time conditional statements 7. Powerfull search criteria 8. Runtime shift to table view


The autocomplete field uses a custom source option which will match results that have accented characters even when the text field doesn't contain accented characters. However if the you type in accented characters in the text field it is smart enough not to show results that aren't accented.
Try typing "Jo" to see "John" and "Jörn", then type "Jö" to see only "Jörn".


class DateRangeSelectorHelper
A helper class to manage user inputs for a start date and end date. The user can each of these dates through a click then dialog, and the other date will update accordingly. |
|
class DateSelectorHelper
A helper class to display the date on a TextInputEditText, and allowing it to be changed through click then dialog. |
|
class DynamicPagerAdapter : PagerAdapter
Class to dynamically populate pages inside of ViewPager. |
|
class GenderRadioButtons
Encapsulates functionality relating to male and female RadioButtons. |
|
abstract class NavigationDrawerActivity : AppCompatActivity
An abstract activity used for implementing navigation drawer behaviour. This should be implemented by activities which contain a navigation drawer. |
|
data class NavigationParameters
Data class to contain details about navigation in a subclass of NavigationDrawerActivity. |
|
class PersonSelectorHelper
A helper class to display a Person on a TextInputEditText, and allowing it to be changed through click then dialog. |


- Description
- creates a new connection interprocess connection.
Tries to connect to an XAcceptor. Behavior is unspecified
if a call to connect is made when another call to connect either has not
yet returned or has returned successfully without raising an exception.
- Parameter sConnectionDescription
- contains the kind of the connection plus a
comma seperated list of attributes,
e.g., socket,host=locahost,port=2345 for a tcpip connection.
- Throws
- ConnectionSetupException
Problems during setting up the connector
on client side, (e.g., Security-reasons, socket already busy .. ),
or the string could not be interpreted correctly.
- Throws
- NoConnectException
Couldn't reach a server (e.g. network failure),
no server is listening
|


The University of Waterloo’s Software Engineering (SE) is an interdisciplinary
program supported by both the Faculty of Mathematics and the Faculty of
Engineering. For 5 years, all 141 graduating students of the class of 2018 spent 8
semesters in school with similar schedules as well as 6 co-ops.
SE is commonly compared to Computer Science, and is often seen as its more-constrained,
engineering-oriented counterpart. Prospective students may wonder whether SE
is the right fit for them, and whether they’ll enjoy the environment. This
profile attempts to showcase who SE 2018 students are, what they've done, and
how university went for students.
The findings in this report were derived from the results of a class survey.
In total, 113 out of 141 (80%) graduating students responded. SE classes
can vary significantly depending on the year, so generalize from this survey
to other classes at your own risk.
Study terms are defined as 1A, 1B, 2A, up to 4B (8 terms). 4 month co-op terms
occur after every study term starting after 1B and ending before 4B.
All analysis involving income is expressed in Canadian dollars (CAD). The exchange
rate used to convert from USD to CAD depends on time and is stated where
relevant. All salaries include monthly housing stipend or the monthly cost of
corporate housing if applicable.
This class profile was inspired from the Systems Design Engineering 2017 Class Profile created
by Joey Loi and Atef Chaudhury.
Companies, locations, salary, factors affecting salary
Gender, ethnicity, high school, family
Grades, attendance, courses, factors affecting grades
Rating, preferred program, paths
Extracurriculars, software discipline, lifestyle
Debt, post-graduation plans


Hello, there. My name is Kirti Vardhan Rathore and I am a Masters student in Computer Science at Dartmouth College.
I enjoy discussing about *nix systems, design patterns, security, Tolkien, education and Full metal alchemist.


Axes are important components of chart areas, and are used to plot data inside
of a chart area.
Charts are plotted using X and Y axes. Y axes are always value axes. X axes are normally categorical, such as months of the year, but can be value axes as well, like in a scatter-type plot.
There are also primary and secondary axis types. Primary axes are located at the bottom and left border of the chart area. The secondary axes are located at the right and top border of the chart area (see the figure below).
The scale of an axis determines its minimum, maximum and interval properties. The interval effects how often points are plotted along that axis.
An axis scale is automatically set by the Chart control by default, and is based on the data that is plotted along that axis. However, this behavior can be overridden by explicitly setting various scale-related properties, such as interval, offset, interval type, and so on.
Default axis labels are automatically generated for all axes using either the axis scale or data point values. The scale is used if data points do not provide label values. These labels can optionally be offset (see the figure below).
In addition, custom labels can be specified, and these custom labels are displayed using label rows (see the figure below).
Data views allow chart readers to view only a subset of the data in the chart. When a view is displayed, the scroll bar is enabled by default, which allows chart readers to scroll through the data points. Range selection and zooming allows a chart reader to select a subset of the chart to view. The figure below shows a view with the scroll bar, range selection, and zooming enabled.
Strip lines are horizontal or vertical lines that are used to highlight specific areas within a chart area.
Strip lines can be:


OUT FOR JUSTICE (1991) A Film Review by Ted Prigge Copyright 1997 Ted Prigge
Director: John Flynn Writer: David Lee Henry Starring: Steven Seagal, William Forsythe, Jo Champa, Jerry Orbach, Gina Gershon, Julliana Marguilles, Shannon Whirry, John Leguiziamo, Athena Massey
It was with a huge lack of something to do that I decided to watch this on good old UPN on sunday afternoon, when the only good things on TV are the second-rate movies they show (some are good: they showed "Total Recall" before this one). If you know me, I think Seagal is probably the most boring action star to ever live. And this includes Keanu Reeves.
What do I hate about Seagal? I hate how he uses one facial expression for every single threatening and non-threatening situation (the squint).  I despise how he never gets a bruise in any of his fights.  I hate his non-satirical messages (in the beginning of this one, he slaps on a quote from Arthur Miller, which has nothing to do with the film, except it's about Brooklyn where this film takes place).  Sure, the guy's probably a nice guy in person (I actually found him very non-threatening when he was on Letterman not too long ago). But the guy makes worse films than Reagan did.
So what's the plot of this shit-terpiece? Well...something about him trying to catch a stupid-ass crook (William Forsythe) who shot and killed his partner in broad daylight. I couldn't believe how bad this scene was - the guy was conveniently with his family so we get the maximum emotional effect (ahem!).  I'm sorry, did anyone ever hear of concealing one's self?
So in comes ex-Brooklynite Seagal, who dedicates his life to catching this guy. And I just wished he had caught him in the beginning, then ended the film.  And Forsythe more than once threatens his family. At one point, he actually comes to their house and stalks them like a non-threatening Nicholson in "The Shining" (complete with them all hiding in the bathroom, but with an added bonus of one girl conveniently loosing her cool and screaming to give them away).
Seagal paints himself as a lovable person, with a son, and a fiancee. He even shows him hanging with his son, checking up on his homework, and then about to take him out for a bit of "catch," when he's conveniently called away on assignment. I dunno about you, but playing "catch" with Seagal was one of my childhood nightmares.  Serves them right.
This film, as some of his do, has an interesting supporting cast of actors who are actually talented, but don't appear to be in this film. I already mentioned Gina Gershon (who's pretty horrible in this one), as well as William Forsythe, who over-acts terribly. I know this guy can act: he was awesome in "Raising Arizona" as Goodman's partner in crime. But he's just awful here. Jerry Orbach gives the only credible performance in the film as the police chief who checks up on Segal after things have gone down. Why is he the only one who gives a good performance? Well, because his role is small enough and sporadic enough to not tarnish his credibility. He seems to be in here just to give it a cool "Law and Order" feeling (even if it's not a "cool" feeling). And in cameos are B-rated erotic-thriller-Cinemax-style stars, Shannon Whirry (as "Terry Malloy," which is more of a bad joke than a clever one) and Athena Massey. Oh! And "ER"'s Julliana Margiulles has two scenes.
"Out for Justice" just proves once again that American action films just suck. I know that there's such a good thing as good action - he's called John Woo. But if you're in the mood for some good old no-brainer, fun-yet-dumb action, don't bother watching this.
MY RATING (out of 4): *
Homepage at: http://www.geocities.com/Hollywood/Hills/8335/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Facial Recognition with Collaborative Representation-Based Classification
The following post assumes some prior background in machine learning, such as familiarity with ordinary least squares (OLS).
Let’s talk about faces…
Collaborative representation-based classification is a neat way to implement ordinary least squares regression (which has continuous output) in order to classify new data points discretely. I am writing about this algorithm because it is elegant, but undertaught.1 I explain the theory and implement the algorithm from scratch below.
We’ll use the YALE face database, consisting of 15 subjects in 11 slightly different poses, for a total of 165 64x64 pixel images, which I downloaded here 2345.
The data points are arranged in the columns of matrix (size 4096x165) so that the first 11 columns correspond to the 11 images for the first face, the next 11 columns to the second face, and so on.
Theory
We begin by implementing ordinary least squares regression on , in which we find to minimize the residual:
We solve the normal equation to get :
The first 11 elements of , which we will call , represent how much of each column of the first face we need to represent a new data point ; the next 11 elements represent how much of each column of the second face we need to represent ; and so on.
Likewise, corresponds to the first 11 columns of , which we will call .
To predict the face for each data point , we take the dot product of and for each face . We calculate the Euclidean distance between and . The face out of that yields the lowest distance will determine the label.
Code
The code for the algorithm is as follows:
def collab_rep(X_train, X_test, Y_train, Y_test):
num_test_samples = X_test.shape[1]
predicted_label = np.zeros((num_test_samples,))
num_classifications = 15
# OLS
X = np.matrix(X_train)
proj = np.linalg.pinv(np.dot(X.T,X)) * (X.T)
# for each new vector
for i in range(0,num_test_samples):
test_ex = np.matrix(X_test[:,i])
p = proj * test_ex.T
# compare the new vector to linear combinations of existing vectors by face
dist = np.zeros((num_classifications,))
num_in_training = int(X_train.shape[1] / num_classifications)
for j in range(0,num_classifications):
X_subset = X_train[:,j*num_in_training:(j+1)*num_in_training]
w_subset = p[j*num_in_training:(j+1)*num_in_training]
reconstructed = np.dot(X_subset, w_subset)
dist[j] = np.linalg.norm(reconstructed - test_ex)
# classify new vector according to minimum distance between the vector and reconstructed
predicted_label[i] = np.argmin(dist) + 1
predicted_label = predicted_label.reshape(-1,1)
# calculate the accuracy
test_err = np.count_nonzero(predicted_label - Y_test)
test_acc = 1-(test_err/100.0)
return test_acc
We can run the code with 8 training and 3 test images per individual with 50 random splits to get a 96.62% accuracy.
Conclusion
In sum, the vectors of each face category “collaborate” via linear combinations in order to classify new faces (i.e., face category with the closest collaboration to the new face “wins”). We can further modify the algorithm to incorporate sparsity or lasso.
Compared to neural nets, collaborative representation-based classification is too inefficient to use practically. Nonetheless, it is an elegant discrete implementation of a continuous algorithm, with a high accuracy.
Full code on Github here.
References
-
You can read about collaborative representation-based classification in papers like this one. ↩
-
Deng Cai, Xiaofei He, Yuxiao Hu, Jiawei Han and Thomas Huang, “Learning a Spatially Smooth Subspace for Face Recognition”, CVPR’07. Bibtex source ↩
-
Deng Cai, Xiaofei He and Jiawei Han, “Spectral Regression for Efficient Regularized Subspace Learning”, ICCV’07. Bibtex source ↩
-
Deng Cai, Xiaofei He, Jiawei Han, and Hong-Jiang Zhang, “Orthogonal Laplacianfaces for Face Recognition”, IEEE TIP 2006. Bibtex source ↩
-
Xiaofei He, Shuicheng Yan, Yuxiao Hu, Partha Niyogi, and Hong-Jiang Zhang, “Face Recognition Using Laplacianfaces”, IEEE TPAMI 2005. Bibtex source ↩


The Co founders are 4 people from diverse background, each having an elaborate experience in event management and productions, who have come together to bring out and deliver the best for client satisfaction.
Tapan Parashar
Management Head
Tapan has a strong and varied background in communications, branding, marketing and production. Tapan's strong understanding of new and emerging trends and reliance on strategic methodologies make every event a success.
Tushar Bhatore
Production Head
Tushar is involved with the Planning, Coordination and Control of the whole Infrastructure and setup. He makes sure that premium level quality goods and services are delivered at feasible cost Tushar makes sincere efforts in supervising the pre- and post- production event.
Shishir Trivedi
Client Representative
Shishir has a diverse background in marketing, communications, information technology, and event management.With over two years of experience Shishir uses all his experience and learned skills to ensure that every event is least flawed and that every client is satisfied to his core.
Supriya Dubey
Creative Head
Supriya brings about creative solutions and marketing expertise to any project she works on.She makes sure that with her prolific ideas, every event is on par with the Supriya is determined to make every event joyous and full of content to the clients by understanding their needs and sentiments.
The social culture has paved way for many social occasions. While, MNCs host corporate events to hold their social status high. For accomplishing these events successfully, you need skillful event managers of भव्य Productions and Event Management.
It is a gathering that is sponsored by a business for its employees, business partners, clients and /or prospective clients.
Only few understand the beauty of moments. We, at bhavy Productions and Management, believe in turning every reason to be happy into a grand fiesta.
Events that hold the attention and interest of an audience or gives pleasure and delight.
The social culture has paved way for many social occasions. While, MNCs host corporate events to hold their social status high. For accomplishing these events successfully, you need skillful event managers of भव्य Productions and Event Management.
Wedding is one of the most important event in not only the lives of the marrying couple but also their families.At भव्य make sure to make it most beautiful by our creative and novel ideas especially for the new age couples who are low on time and unskilled to plan the most important days of their lives.


About the Jetspeed 2.3.1 Release
The Jetspeed 2.3.1 release is a minor release addresses Security CVE issues and bug fixes, with some improvements
About the Jetspeed 2.3.0 Release
The Jetspeed 2.3.0 release is a major release of the Jetspeed-2 portal. Major new features include:
- [JS2-845] - AutoRefresh Feature
- [JS2-1302] - Replace WebContent1 portlets by WebContent2 portlets in demo
- [JS2-1303] - Rewrite j2-admin::SSOIFramePortlet based on webcontent2
- [JS2-1304] - Rewrite j2-admin::SSOReverseProxyIFramePortlet based on webcontent2
- [JS2-1305] - Rewrite j2-admin::SSOWebContentPortlet based on webcontent2
- [JS2-1314] - Responsive Decorators
- [JS2-1315] - Responsive Layouts
- [JS2-1316] - Responsive Profiler Admin Portlet
- [JS2-1317] - Improve Core J2-Admin Portlets to work with responsive layouts
- [JS2-1318] - Second Responsive Menu for Pages Navigations on SmartPhone Breakpoint
- [JS2-1331] - Customization to Responsive Layouts
Improvements including in the 2.3.0 release:
- [JS2-874] - Refactor Jetspeed API to use generics
- [JS2-1274] - Support Tomcat7
- [JS2-1281] - Generalize Security Constraints to support "AND" in addition to "OR" grant specification.
- [JS2-1290] - Upgrade Jar Dependencies
- [JS2-1292] - Set Default Compiler for Jetspeed Build to Java 1.7
- [JS2-1293] - Improve User Browser to not load all users in memory
- [JS2-1295] - Portlet Pipeline links URLs to wrong pipeline
- [JS2-1301] - Add Derby as Migration Source to Installer
- [JS2-1310] - Upgrade Jetspeed to use recommended Tomcat and Servlet Spec for Java 7
- [JS2-1311] - Running in Tomcat Securely fails to generate secure links
- [JS2-1324] - Security Cache Performance Improvements
- [JS2-1325] - Preferences Caching Performance Improvements
- [JS2-1330] - Improve Security Interceptors Examples and Documentation
- [JS2-1332] - Upgrade to Portlet API 2.1.0
Previous Versions
The Jetspeed 2.2.0 release is a major release of the Jetspeed-2 portal and is the first release of Jetspeed that is fully compliant with the Java Portlet Specification 2.0.
With this new version of Jetspeed, we also are co-releasing a new sub-project at Apache Portals: Apache Portals Applications
New Features in Version 2.2.0
- Portlet API 2.0 Support and Compliance
- Passes Java Portlet 2.0 Test Compatibility Kit test suite
- Inter-Portlet Communication via Events
- New High Speed Preferences Database Storage
- New Extensible Security Model with LDAP Synchronization
- Improved Documentation including 5 New Guides (Users Guide, Admin Guide, Developers Guide, Build Guide, Deploy Guide)
- New Improved Administrative Portlets
- New Skins
- New Maven-2 Custom Build
- Updated Tutorial for New Maven-2 Custom Build
- Enterprise (EAR) Deployments for Websphere 6.1
- Multi-facted Authentication with Captcha and Personal Questions
- Integrated with latest Pluto 2.0.0
- Improved Single Signon Architecture (SSO)
New Features in Version 2.1.3
- Big Desktop Performance Improvements
- Complete Desktop Customization with same feature set and configuration as Portal
- Dynamically hide Portlets at request time
- Improved LDAP implementation and documentation for Apache DS 1.0.2
- Full PSML and XML Import / Export Admin Portlet
- Maximize on edit-defaults feature
- New 'Edit Defaults' custom portlet mode
- New 'Config' custom portlet mode
- Parallel rendering on Websphere 6.1
- Preliminary Portlet API 2.0 ResourceURL support allowing full response control
- Provide out-of-the-box Wicket Portlet support
- Support for Pocket PC
New Features in Version 2.1.2
- Virtual Portals - Subsites by Hostname
- PSML and XML Import / Export Admin Portlet
- Audit logs for administrative actions
- Support for JSP based decorators (experimental)
New Features in Version 2.1
- Jetspeed Desktop - Web 2.0 client-side JSR-168 portlet aggregation.
- Multithreaded Aggregator - multithreaded portlet aggregator with portlet timeout tracking, removal of slow rendering portlets.
- Jetspeed Distributed Cluster - support for distributed deployments of the portal on multiple application server platforms
- JSR 168 Caching - full caching support of JSR 168 portlet specification, distributed cache invalidation
- TCK Compliant as of 2.1 (2.0 was compliant as well)
- New and Improved Administrative and Security Portlets
- XML Schemas for PSML, jetspeed-portlet.xml, and Jetspeed XML (seed data)
- Installation choice of either Demo Portal or Minimal Starter Portal
- New Jetspeed Tutorial
- Maven-2 Build as well as Maven-1
- Remote Portal Application Deployer - deploy portlet applications from remote locations on the Web
- Improved Customizers, Portal and Desktop Customizers, drag and drop moving of portlets, nested fragment customization
- New Portlet Category Selector
- XML Import/Export of all Jetspeed database data and seed data scripts for backup and restore and data migration
- Improved Security Control - fully swappable Security Constraint or Security Permission support
- Portlet-level Security checks based on Security Constraints or Security Permissions
- Improved Jetspeed AJAX API
- Improved Delegation of Security Support
- New Site Manager


APPS
What3words is about to make millions of car satnavs more accurate and easier to use
by Matthew Beedham 2 hours ago 4
Making a task look easy doesn’t mean it stops being hard
by Matthew Beedham 2 hours ago 4
by Matthew Beedham 2 hours ago 4
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
What words is about to make millions of car satnavs more accurate and easier to use
Matthew Beedham - 2 hours ago
$150 $19.99
$150 $19.99
$150 $19.99
$150 $19.99
$150 $19.99
$150 $19.99
$150 $19.99
$150 $19.99


| Home | Libraries | People | FAQ | More |
This section describes main targets types that Boost.Build
supports out-of-the-box. Unless otherwise noted, all mentioned main
target rules have the common signature, described in the section called “Declaring
Targets”.
这一章讲述 Boost.Build 缺省支持的主目标类型。除非另有说明，否则所有提到的主目标规则都具有公用签名，如 “声明目标”一节 所述。
Programs are created using the exe
rule, which follows the common
syntax. For example:
程序通过 exe
规则来创建，它遵守 公用语法。
例如：
exe hello : hello.cpp some_library.lib /some_project//library
: <threading>multi
;
This will create an executable file from the sources -- in
this case, one C++ file, one library file present in the same
directory, and another library that is created by Boost.Build.
Generally, sources can include C and C++ files, object files and
libraries. Boost.Build will automatically try to convert targets of
other types.
这将从源文件构建一个可执行文件 -- 在此例中，源文件是一个 C++ 文件，一个在同一目录下的库文件，和另外一个由 Boost.Build
创建的库文件。通常，源文件可以包括 C 和 C++ 文件，目标文件和库文件。Boost.Build 会自动尝试转换其它类型的目标。
| Tip 提示 | |
|---|---|
|
On Windows, if an application uses dynamic libraries,
and both the application and the libraries are built by Boost.Build,
its not possible to immediately run the application, because the 在 Windows 上，如果一个应用程序使用了动态库，而且这个应用程序和库都是用 Boost.Build
构建的，那么就不能马上运行该应用程序，因为 |
Libraries are created using the lib
rule, which follows
the common
syntax. For example:
库通过 lib
规则来创建，它遵守 公用语法。
例如：
lib helpers : helpers.cpp : <include>boost : : <include>. ;
In the most common case, the lib
creates a library from the specified sources. Depending on the value of
<link> feature the library will be either static or
shared. There are two other cases. First is when the library is
installed somewhere in compiler's search paths, and should be searched
by the compiler (typically, using the -l
option). The second case is where the library is available as a
prebuilt file and the full path is known.
在多数情况下，lib
从指定的源创建一个库。根据 <link>
特性的值，库被创建为静态或共享的。有两种例外的情形。第一个是，库被安装在编译器的查找路径中的某个位置，并且可被编译器查找到(通常是使用 -l
选项)。第二个情形是，库是作为预构建文件已经存在，并且知道完整的路径。
The syntax for these case is given below:
这种情形下的语法给出如下：
lib z : : <name>z <search>/home/ghost ;
lib compress : : <file>/opt/libs/compress.a ;
The name
property specifies the name that should be passed to the -l
option, and the file
property specifies
the file location. The search
feature specifies paths in which to search for the library. That
feature can be specified several times, or it can be omitted, in which
case only default compiler paths will be searched.
属性 name
指明传递给 -l
选项的名字，而属性 file
则指明文件位置。属性 search
指明在哪些路径查找该库。这个特性可以多次指定，或者省略，省略的话则只查找缺省的编译器路径。
The difference between using the file
feature as opposed to the name
feature together with the search
feature is that file
is more precise. A specific file will be used. On the other hand, the search
feature only adds a
library path, and the name
feature gives the basic name of the library. The search rules are
specific to the linker. For example, given these definition:
使用 file
特性和使用 name
特性加 search
特性的差别在于，file
更加精确。它会使用一个指定的文件。另一方面，search
特性只是增加一个库路径，而 name
特性则给出库的基本名。查找的规则由链接器来定。例如，给出以下定义：
lib a : : <variant>release <file>/pool/release/a.so ;
lib a : : <variant>debug <file>/pool/debug/a.so ;
lib b : : <variant>release <file>/pool/release/b.so ;
lib b : : <variant>debug <file>/pool/debug/b.so ;
It's possible to use release version of a
and debug version of b
. Had we used the name
and search
features, the linker
would always pick either release or debug versions.
这样可以同时使用 a
的发布版本和 b
的调试版本。如果我们使用 name
和 search
特性，则链接器总是使用发布版本或总是使用调试版本。
For convenience, the following syntax is allowed:
为方便起见，以下语法是允许的：
lib z ;
lib gui db aux ;
and is does exactly the same as:
它们与下面的写法是完全一样的：
lib z : : <name>z ;
lib gui : : <name>gui ;
lib db : : <name>db ;
lib aux : : <name>aux ;
When a library uses another library you should put that other
library in the list of sources. This will do the right thing in all
cases. For portability, you should specify library dependencies even
for searched and prebuilt libraries, othewise, static linking on Unix
will not work. For example:
当一个库使用了另一个库时，你应该将另一个库列入源列表中。这在任何情况下都是正确的。为了移植性，你应该对查找的库和预构建的库都指明库的依赖关系，否
则 在 Unix 上静态链接将不能工作。例如：
lib z ;
lib png : z : <name>png ;
| Note 说明 | |
|---|---|
|
When a library (say, 当一个库(称为 |
One feature of Boost.Build that is very important for
libraries is usage requirements. For example, if you write:
Boost.Build 中一个对于库而言非常重要的特性就是使用要求。例如，如果你写了：
lib helpers : helpers.cpp : : : <include>. ;
then the compiler include path for all targets that use helpers
will contain the
directory where the target is defined.path to "helpers.cpp". The user
only needs to add helpers
to the list of sources, and needn't consider the requirements its use
imposes on a dependent target. This feature greatly simplifies Jamfiles.
那么对于所有使用了 helpers
的目标来说，编译器包含路径将包含该目标的定义目录和 "helpers.cpp" 的路径。用户只需要将 helpers
加到源列表中即可，无需考虑由被依赖目标所施加的要求。这一特性极大地简化了 Jamfiles.
| Note 说明 | |
|---|---|
|
If you don't want shared libraries to include all libraries that are specified in sources (especially statically linked ones), you'd need to use the following: 如果你不希望共享库包含在源中指定的所有库(尤其是静态链接的库)，你需要使用以下方法： lib b : a.cpp ; This specifies that |
The alias
rule gives an alternative name to a group of targets. For example, to
give the name core
to
a group of three other targets with the following code:
规则 alias
为一组目标给定一个别名。例如，以下代码为由三个目标组成的组给定名字 core
：
alias core : im reader writer ;
Using core
on the command line, or in the source list of any other target is the
same as explicitly using im
,
reader
, and writer
, but it is just more
convenient.
在命令行或其它目标的源列表中使用 core
，
和使用 im
, reader
, 及 writer
是一样的，只不过更方便些。
Another use of the alias
rule is to change build properties. For example, if you always want
static linking for a specific C++ Boost library, you can write the
following:
alias
规则的另一个用途是改变构建属性。例如，如果你希望对某个特定的 C++ Boost 库总是采用静态链接，你可以这样写：
alias threads : /boost/thread//boost_thread : <link>static ;
and use only the threads
alias in your Jamfiles.
然后在你的 Jamfiles 中只需要用 threads
别名就行了。
You can also specify usage requirements for the alias
target. If you
write the following:
你也可以为 alias
目标指定使用要求。如果你这样写：
alias header_only_library : : : : <include>/usr/include/header_only_library ;
then using header_only_library
in sources will only add an include path. Also note that when an alias
has sources, their usage requirements are propagated as well. For
example:
那么在源文件中使用 header_only_library
只需要加一个包含路径。还要注意，如果一个别名也具有源，则源的使用要求也会被传播。例如：
lib library1 : library1.cpp : : : <include>/library/include1 ;
lib library2 : library2.cpp : : : <include>/library/include2 ;
alias static_libraries : library1 library2 : <link>static ;
exe main : main.cpp static_libraries ;
will compile main.cpp
with additional includes required for using the specified static
libraries.
将以额外的包含要求并使用指定的静态库来编译 main.cpp
。
This section describes various ways to install built target
and arbitrary files.
本节讲述安装构建目标及任意文件的几种方法。
For installing a built target you should use the install
rule, which
follows the common
syntax. For example:
要安装一个构建目标，你要使用 install
规则，它遵守 公用语法。
例如：
install dist : hello helpers ;
will cause the targets hello
and helpers
to
be moved to the dist
directory, relative to Jamfile's directory. The directory can be
changed with the location
property:
将导致目标 hello
和 helpers
被移动至相对于
Jamfile 目录的 dist
目录中。该目录可以用 location
属性来修改：
install dist : hello helpers : <location>/usr/bin ;
While you can achieve the same effect by changing the target
name to /usr/bin
,
using the location
property is better, because it allows you to use a mnemonic target name.
虽然你也可以通过将目标名改为 /usr/bin
来得到相同效果，但是使用 location
属性更好一些，因为它允许你使用更易记的目标名。
The location
property is especially handy when the location is not fixed, but
depends on build variant or environment variables:
当位置不是固定的而是由构建体或环境变量决定时，属性 location
尤其方便：
install dist : hello helpers : <variant>release:<location>dist/release
<variant>debug:<location>dist/debug ;
install dist2 : hello helpers : <location>$(DIST) ;
See also conditional properties
and environment variables
请参见 条件属性 和 环境变量
Specifying the names of all libraries to install can be
boring. The install
allows you to specify only the top-level executable targets to install,
and automatically install all dependencies:
指定要安装的所有库的名字会很令人厌烦。install
允许你只指定要安装的顶层可执行目标，并自动安装所有依赖物：
install dist : hello
: <install-dependencies>on <install-type>EXE
<install-type>LIB
;
will find all targets that hello
depends on, and install all of those which are either executables or
libraries. More specifically, for each target, other targets that were
specified as sources or as dependency properties, will be recursively
found. One exception is that targets referred with the use
feature
are not considered, because that feature is typically used to refer to
header-only libraries. If the set of target types is specified, only
targets of that type will be installed, otherwise, all found target
will be installed.
这将查找 hello
所依赖的所有目标，并安装所有目标的可执行文件或库文件。具体地说，对于每一个目标，被指定为源或依赖属性的其它目标都会被递归查找。一个例外是，那些以
use
特性指定的目标不被考虑，因为这个特性是专门用于指定只含头文件的库的。如果指定了目标类型集，则只有该类型的目标被安装，否则，所有目标都被安装。
By default, the install
rules will stip paths from it's sources. So, if sources include a/b/c.hpp
, the a/b
part will be ignored. To
make the install
rule preserve the directory hierarchy you need to use the install-source-root
feature to specify the root of the hierarchy you are installing.
Relative paths from that root will be preserved. For example, if you
write:
缺省地，install
规则会修改来源的路径。即，如果源中包含有 a/b/c.hpp
，
则 a/b
部分将被忽略。如果要让 install
规则保留目录的层次，你就需要使用
install-source-root
特性来指定你要安装的目录层次的根。从根起的相对路径将被保留。例如，如果你写：
install headers
: a/b/c.h
: <location>/tmp <install-source-root>a
;
the a file named /tmp/b/c.h
will be created.
那么将创建一个名为 /tmp/b/c.h
的文件。
The glob-tree
rule can be used to find all files below a given directory, making it
easy to install entire directory tree.
规则 glob-tree
可以用于查找位于给定目录之下的所有文件，这使得安装整个目录树变得容易。
The alias
rule can
be used when targets must be installed into several directories:
alias
规则可用于将目标安装到多个目录中：
alias install : install-bin install-lib ;
install install-bin : applications : /usr/bin ;
install install-lib : helper : /usr/lib ;
Because the install
rule just copies targets, most free features [8] have no effect
when used in requirements of the install
rule. The only two which matter are dependency
and, on
Unix, dll-path
.
因为 install
规则只是复制目标，在 install
规则的要求中使用的多数自由特性[8]都
是没有作用的。有用的只有两个，dependency
和 Unix
上的 dll-path
.
| Note 说明 | |
|---|---|
|
(Unix specific). On Unix, executables built with
Boost.Build typically contain the list of paths to all used dynamic
libraries. For installing, this is not desired, so Boost.Build relinks
the executable with an empty list of paths. You can also specify
additional paths for installed executables with the |
Boost.Build has convenient support for running unit tests.
The simplest way is the unit-test
rule, which follows the common
syntax. For example:
Boost.Build 对于单元测试的运行有很方便的支持。最简单的方法是 unit-test
规则，它遵守 公用语法。
例如：
unit-test helpers_test : helpers_test.cpp helpers ;
The unit-test
rule behaves like the exe
rule, but after the executable is created it is run. If the executable
returns an error code, the build system will also return an error and
will try running the executable on the next invocation until it runs
successfully. This behaviour ensures that you can't miss a unit test
failure.
unit-test
规则很象 exe
规则，不过在可执行文件创建之后将运行它。如果可执行文件返回一个错误代码，构建系统也将返回一个错误，并且在下一次调用时再尝试运行这个可执行文件，直
至运行成功。这一行为确保了你不可能遗漏任一个单元测试失败。
By default, the executable is run directly. Sometimes, it's
desirable to run the executable using some helper command. You should
use the testing.launcher
property to specify the name of the helper command. For example, if you
write:
缺省地，可执行文件是直接运行的。有时，你会想要用一些辅助命令来运行这个可执行文件。你可以使用 testing.launcher
属性来指定辅助命令的名称。例如，如果你这样写：
unit-test helpers_test
: helpers_test.cpp helpers
: <testing.launcher>valgrind
;
The command used to run the executable will be:
则用于运行可执行文件的命令将是：
valgrind bin/$toolset/debug/helpers_test
There are few specialized testing rules, listed below:
有几个特殊的测试规则，列出如下：
rule compile ( sources : requirements * : target-name ? )
rule compile-fail ( sources : requirements * : target-name ? )
rule link ( sources + : requirements * : target-name ? )
rule link-fail ( sources + : requirements * : target-name ? )
They are are given a list of sources and requirements. If the
target name is not provided, the name of the first source file is used
instead. The compile*
tests try to compile the passed source. The link*
rules try to compile and link an application from all the passed
sources. The compile
and link
rules expect
that compilation/linking succeeds. The compile-fail
and link-fail
rules,
on the opposite, expect that the compilation/linking fails.
它们被给定一个源列表和要求列表。如果目标名未提供，则用第一个源文件的名字代替。compile*
测试会尝试编译传入的源文件。而 link*
规则则尝试从所有传入的源文件编译并链接一个应用程序。compile
规则和 link
规则预期编译/链接可以成功。而 compile-fail
规则和 link-fail
规则则相反，它们预期编译/链接将失败。
There are two specialized rules for running applications,
which are more powerful than the unit-test
rule. The run
rule has the following signature:
还有两个运行应用程序的特殊规则，比 unit-test
规则更强大。run
规则具有以下签名：
rule run ( sources + : args * : input-files * : requirements * : target-name ?
: default-build * )
The rule builds application from the provided sources and
runs it, passing args
and input-files
as
command-line arguments. The args
parameter is passed verbatim and the values of the input-files
parameter are
treated as paths relative to containing Jamfile, and are adjusted if bjam
is invoked from a different directory. The run-fail
rule is
identical to the run
rule, except that it expects that the run fails.
这个规则从给定的源文件构建应用程序并运行它，传入 args
和 input-files
作为命令行参数。参数 args
是逐个字传递的，而 input-files
参数的值则被视为相对于包含 Jamfile 的目录的路径，如果你是从另一个目录调用 bjam
的，则该路径还将被调整。run-fail
规则和 run
规则相同，除了它预期运行将失败以外。
All rules described in this section, if executed successfully,
create a special manifest file to indicate that the test passed. For
the unit-test
rule the files is named
and for the other rules it is called target-name
.passed
.
The target-name
.testrun*
rules
also capture all output from the program, and store it in a file named
.target-name
.output
在本节所讲述的所有规则，如果执行成功，则创建一个特定的证明文件来表示测试通过。对于 unit-test
规则，证明文件被命名为
，
而对于其它规则，则名为 target-name
.passed
。target-name
.testrun*
规则还会从程序捕获所有输出，并将它保存在一个名为
的文件中。target-name
.output
If the preserve-test-targets
feature has the value off
, then run
and the
run-fail
rules will remove the executable
after running it. This somewhat decreases disk space requirements for continuous
testing environments. The default value of preserve-test-targets
feature is on
.
如果 preserve-test-targets
特性的值为 off
，则 run
规则和
run-fail
规则将在运行后删除可执行文件。在连续的测试时，这样可以稍微减少一点磁盘空间的占用。preserve-test-targets
的缺省值为 on
。
It is possible to print the list of all test targets (except
for unit-test
)
declared in your project, by passing the --dump-tests
command-line option. The output will consist of lines of the form:
你可以通过传入 --dump-tests
命令行选项来打印在你的工程中声明的所有测试目标的列表(除了 unit-test
)。
输出将由以下格式的行组成：
boost-test(test-type
)path
:sources
It is possible to process the list of tests, the output of
bjam during command run, and the presense / absense of the *.test
files created when test
passes into human-readable status table of tests. Such processing
utilities are not included in Boost.Build.
你可以对测试列表、命令运行期间的 bjam 输出，以及 *.test
文件的存在与否进行处理，形成人工可读的测试状态表。这些处理工具并不包含在 Boost.Build 中。
When you use most of main target rules, Boost.Build
automatically figures what commands to run and it what order. As soon
as you want to use new file types, or support new tools, one approach
is to extend Boost.Build to smoothly support them, as documented in the
section called “Extender Manual”. However, if there's a
single place where the new tool is used, it might be easier to just
explicitly specify the commands to run.
当你使用多数主目标规则时，Boost.Build
会自动推算出运行哪些命令以及以命令的顺序。一旦你想使用新的文件类型，或者支持新的工具，一个方法就是，扩展 Boost.Build
以平滑地支持它们，正如在 “扩展手册”一节
中所介绍的。但是，如果新工具只在一个地方使用，就可以更容易解决，你只要明确指出运行的命令即可。
Three main target rules can be used for that. The make
rule allows you
to construct a single file from any number of source file, by running a
command you specify. The notfile
rule allows you to run an arbitrary command, without creating any
files. And finaly, the
generate
rule allows you to describe transformation using
Boost.Build's virtual targets. This is higher-level than file names
that the make
rule operates with and allows you to create more than one target,
create differently named targets depending on properties or use more
than one tool.
有三个主目标规则可以用于此。make
规则允许你从任意数量的源文件，通过运行你指定的命令，来构造一个文件。notfile
规则允许你运行一个任意命令，而不创建任何文件。最后，generate
规则允许你使用 Boost.Build 的虚拟目标来描述转换。make
规则所操作的对象比文件名更高级，你可以创建一个以上的目标，可以根据属性或使用更多工具来创建不同的命名目标。
The make
rule is used when you want to create one file from a number of sources
using some specific command. The notfile
is used to unconditionally run a command.
make
规则在你要使用特定命令从多个源文件创建一个文件时使用。notfile
&
nbsp;则用于无条件运行一个命令。
Suppose you want to create file file.out
from file file.in
by
running command in2out.
Here is how you would do this in Boost.Build:
假设你想运行命令 in2out
从文件 file.in
创建文件 file.out
。以下是你在 Boost.Build
中要做的：
make file.out : file.in : @in2out ;
actions in2out
{
in2out $(<) $(>)
}
If you run bjam
and file.out
does not
exist, Boost.Build will run the in2out
command to create that file. For more details on specifying actions,
see the
section called “Boost.Jam Language”.
如果你运行 bjam
而 file.out
不存在，则
Boost.Build 会运行 in2out
命令来创建这一文件。有关特定动作的细节，请见
“Boost.Jam 语言”一节。
It could be that you just want to run some command
unconditionally, and that command does not create any specific files.
For that you can use the notfile
rule. For example:
有可能你只是想无条件地运行一些命令，而这些命令并不创建任何特定的文件。你可以使用 notfile
规则。例如：
notfile echo_something : @echo ;
actions echo
{
echo "something"
}
The only difference from the make
rule is that the name of the target is not considered a name of a file,
so Boost.Build will unconditionally run the action.
它与 make
规则的差别只在于目标的名字不被认为是一个文件名，所以 Boost.Build 将无条件运行该动作。
The generate
rule is used when you want to express transformations using
Boost.Build's virtual targets, as opposed to just filenames. The generate
rule has the
standard main target rule signature, but you are required to specify
the generating-rule
property. The value of the property should be in the form @
,
the named rule should have the following signature:rule-name
规则 generate
在你想用 Boost.Build 虚拟目标来表示一种转换时使用。generate
规则具有标准的主目标规则签名，不过你要指定 generating-rule
属性。该属性的值应该形如 @
，
这个命名规则应具有以下签名：
rule-name
rule generating-rule ( project name : property-set : sources * )
and will be called with an instance of the project-target
class,
the name of the main target, an instance of the property-set
class
containing build properties, and the list of instances of the virtual-target
class
corresponding to sources. The rule must return a list of virtual-target
instances. The interface of the virtual-target
class can be learned by looking at the build/virtual-target.jam
file. The generate
example contained in the Boost.Build distribution illustrates how the generate
rule can be used.
而且该规则将被以一个 project-target
类的实例、主目标名、一个包含构建属性的 property-set
类的实例，以及与源目标相对应的 virtual-target
类实例的列表来调用。该规则必须返回一个 virtual-target
实例列表。virtual-target
类的接口可以从 build/virtual-target.jam
文件中看到。包含在 Boost.Build 分发包中的 generate
例子示范了如何使用 generate
规则。
Precompiled headers is a mechanism to speed up compilation by
creating a partially processed version of some header files, and then
using that version during compilations rather then repeatedly parsing
the original headers. Boost.Build supports precompiled headers with gcc
and msvc toolsets.
预编译头文件是一种加快编译速度的机制，它创建一些头文件的部分处理版本，然后在编译期间使用这些版本，而不用对原始的头文件进行重复分析。
Boost.Build 支持 gcc 和 msvc 工具集的预编译头文件。
To use precompiled headers, follow the following steps:
要使用预编译头文件，请按以下步骤：
Create a header that includes headers used by your
project that you want precompiled. It is better to include only headers
that are sufficiently stable — like headers from the compiler and
external libraries. Please wrap the header in #ifdef BOOST_BUILD_PCH_ENABLED
,
so that the potentially expensive inclusion of headers is not done when
PCH is not enabled. Include the new header at the top of your source
files.
创建一个头文件，其中包含你在工程中想要预编译的头文件。最好只包含那些足够稳定的头文件 — 如来自于编译器和外部库的头文件。将这个新建的头文件用
#ifdef
BOOST_BUILD_PCH_ENABLED
包围起来，这样在 PCH
未打开时就不会有头文件包含的潜在代价。然后，在你的源文件的顶部包含这个新的头文件。
Declare a new Boost.Build target for the precompiled
header and add that precompiled header to the sources of the target
whose compilation you want to speed up:
为预编译头文件声明一个新的 Boost.Build 目标，并将预编译头文件增加到你想要加速编译的目标的源中：
cpp-pch pch : pch.hpp ;
exe main : main.cpp pch ;
You can use the c-pch
rule if you want to use the precompiled header in C programs.
如果你想在 C 程序中使用预编译头文件，可以使用 c-pch
规则。
The pch
example in Boost.Build distribution can be used as reference.
在 Boost.Build 分发包中的 pch
例子可以作为参考。
Please note the following:
请注意以下事项：
The inclusion of the precompiled header must be the first
thing in a source file, before any code or preprocessor directives.
预编译头文件的包含必须是源文件中的第一件事，在任何代码或预处理指令之前。
The build properties used to compile the source files and
the precompiled header must be the same. Consider using project
requirements to assure this.
用于编译源文件和预编译头文件的构建属性必须一致。可以考虑使用工程要求来确保这一点。
Precompiled headers must be used purely as a way to
improve compilation time, not to save the number of #include
statements. If
a source file needs to include some header, explicitly include it in
the source file, even if the same header is included from the
precompiled header. This makes sure that your project will build even
if precompiled headers are not supported.
预编译头文件必须纯粹用作一种减少编译时间的方法，而不是为了节约 #include
语句的数量。如果一个源文件需要包含某些头文件，就明确地在源文件中包含它，即使这些头文件已经在预编译头文件中包含。这样可以确保即使在不支持预编译头
文件的情况下，你的工程也可以正确构建。
On the gcc compiler, the name of the header being
precompiled must be equal to the name of the cpp-pch
target. This is
a gcc requirement.
在 gcc 编译器上，被预编译的头文件名必须与 cpp-pch
目标的名称相同。这是 gcc 的一个要求。
Prior to version 4.2, the gcc compiler did not allow
anonymous namespaces in precompiled headers, which limits their
utility. See the bug report for details.
在版本 4.2 之前，gcc 编译器不允许在预编译头文件中有匿名名字空间，这限制了它的工具。详细请见 缺陷报告。
Usually, Boost.Build handles implicit dependendies completely
automatically. For example, for C++ files, all #include
statements are found and handled. The only aspect where user help might
be needed is implicit dependency on generated files.
通常，Boost.Build 完全自动地处理隐式的依赖关系。例如，对于 C++ 文件，所有 #include
语句将被查找和处理。唯一可能需要用户帮助的是，在生成头文件上的隐式依赖关系。
By default, Boost.Build handles such dependencies within one
main target. For example, assume that main target "app" has two
sources, "app.cpp" and "parser.y". The latter source is converted into
"parser.c" and "parser.h". Then, if "app.cpp" includes "parser.h",
Boost.Build will detect this dependency. Moreover, since "parser.h"
will be generated into a build directory, the path to that directory
will automatically added to include path.
缺
省情况下，Boost.Build 在一个主目标的内部处理这类依赖关系。例如，假设主目标 "app" 有两个源："app.cpp" 和
"parser.y"。后一个源被转化为 "parser.c" 和 "parser.h"。那么，如果 "app.cpp" 包含了
"parser.h"，则 Boost.Build 将检测到这个依赖关系。此外，因为 "parser.h"
将被生成到一个构建目录中，所以该目录的路径将被自动加入到包含路径中。
Making this mechanism work across main target boundaries is
possible, but imposes certain overhead. For that reason, if there's
implicit dependency on files from other main targets, the <implicit-dependency>
[ link ] feature must be used, for example:
让这种机制跨主目标工作也是可以的，不过需要很大的代价。为此，如果一个文件存在对其它主目标的隐式依赖关系，必须使用 <implicit-dependency>
[ link ] 特性，例如：
lib parser : parser.y ;
exe app : app.cpp : <implicit-dependency>parser ;
The above example tells the build system that when scanning
all sources of "app" for implicit-dependencies, it should consider
targets from "parser" as potential dependencies.
上述例子告诉构建系统，在扫描 "app" 的所有源文件的隐式依赖关系时，应该将来自 "parser" 的目标也作为潜在的依赖关系考虑。
Boost.Build supports cross compilation with the gcc and msvc toolsets.
Boost.Build 支持 gcc 和 msvc 工具集的交叉编译。
When using gcc, you first need to specify your cross compiler in user-config.jam
(see the section called
“Configuration”), for example:
使用 gcc 时，你首先需要在 user-config.jam
(请见 “配置”一节)中指定你的交叉编译器，例如：
using gcc : arm : arm-none-linux-gnueabi-g++ ;
After that, if the host and target os are the same, for example Linux, you
can just request that this compiler version to be used:
然后，如果宿主与目标的操作系统是一样的，例如都是 Linux，则你可以只要求所使用的编译器版本：
bjam toolset=gcc-arm
If you want to target different operating system from the host, you need to
additionally specify the value for the target-os
feature, for example:
如果你的目标操作系统不同于宿主，则你需要额外指定 target-os
特性的值，例如：
# On windows box
bjam toolset=gcc-arm target-os=linux
# On Linux box
bjam toolset=gcc-mingw target-os=windows
For the complete list of allowed opeating system names, please see the
documentation for target-os feature.
有关可用的操作系统名的完整列表，请见 target-os特性 的文档。
When using the msvc compiler, it's only possible to cross-compiler to a
64-bit system on a 32-bit host. Please see the section called
“64-bit support” for details.
使用 msvc 编译器时，只能在32位主机上交叉编译至64位系统。详情请见 “64位支持”一节。
[8] see the definition of
"free" in the section called “Feature
Attributes”.
请见 “特性的属性”一节 中关于"自由"的定义。


EXTREME MEASURES A film review by Christopher Null Copyright 1996 Christopher Null
It's an old question of what's right and what's wrong: if you could cure a disease by killing one person, would you do it? That's basically the premise which starts up EXTREME MEASURES, an ultra-creepy little medical thriller by prolific filmmaker Michael Apted.
If you can deal with the notion of Hugh Grant as a doctor, you've probably suspended disbelief enough to buy the whole production. Dr. Guy Luthan (Grant) finds a mystery patient in his trauma room at Gramercy Hospital. When the patient dies from a bizarre collection of symptoms, no one seems to care except for the dashing British doc.
Guy's investigation leads him into a conspiratorial cover-up in the hospital system, an underground dwelling of human moles, and a cryptic research lab where groundbreaking medicine is practiced -- on human subjects. What's more is that the head of the research lab is none other than Dr. Lawrence Myrick (Gene Hackman), one of the country's most respected physicians.
Blending the right amount of "medical" with just enough "thriller," EXTREME MEASURES succeeds in giving the audience the willies from its opening scenes. Danny Elfman's creepiest score to date does a lot to help out, too, and Hackman is always good at getting you squirming in your seat. Lots of blood, surgical scars, and seizures are even more effective, giving cause to wonder, where was David Lynch when this movie was being made?
Performances are fair to good, with the exception of supporting player Sarah Jessica Parker, who really isn't at home playing an unglamorous nurse. The 2-hour film moves along quite well, too, never getting too caught up in boring exposition while keeping the viewer informed with just enough backstory. On the other hand, there's not a whole lot of "thrill" to the picture, just background discomfort that's scarier than any horror flick.
Overall an above average movie, but EXTREME MEASURES gets bonus points for exposing the harsh truth about physicians and confirming my worst fears: they really are all evil.

The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Noront Resources (CVE:NOT) Sets New 12-Month Low at $0.16
by Teresa GrahamShares of Noront Resources Ltd (CVE:NOT) hit a new 52-week low on Tuesday . The company traded as low as C$0.16 and last traded at C$0.16, with a volume of 285413 shares traded. The stock had previously closed at C$0.17.
The stock has a market capitalization of $69.66 million and a P/E ratio of -4.05. The stock has a 50-day moving average price of C$0.20 and a two-hundred day moving average price of C$0.22.
Noront Resources (CVE:NOT) last released its quarterly earnings results on Wednesday, August 28th. The company reported C($0.01) earnings per share for the quarter.
About Noront Resources (CVE:NOT)
Noront Resources Ltd., a resource company, engages in the acquisition, development, and exploration of base and precious metals in Canada. The company explores for nickel, copper, platinum group metals, chromite, iron, titanium, vanadium, gold, silver, and palladium deposits. Its flagship property is the Eagle's Nest project located in the James Bay Lowlands, Ontario.
Featured Story: Why is the LIBOR significant?


CSGO Game State Integration Project
Obtain live game data feed. Organize data with the end goal to project player statistics and analysis. Player data can be retreived by round, player, or specific stat ie: mvps, kills, deaths, etc. Additional Flask pages
will be added over time to present competetive advantages.
Key Tech: ETL, Python, MongoDB, Pandas, Cuda, Flask.


{%- macro addentry(name, diff, diffchar, raidsize, kills, total) -%}
{%- if kills|length > 0 -%}
Killed
{%- if kills|length == 1 -%}
{{ kills[0] }}
{%- else -%}
{{ kills|length }} bosses
{%- endif -%}
in {{ diff }} {{ name }} and is now {{ total }}/{{ raidsize }}{{ diffchar }}
{%- if kills|length > 1 -%}


Know your parts! Reference next parts side to know what's what.
Be patient! Confusion 🤯 is expected when learning something new. We're are here to help! 🤗
Finally - help others if they look like they need it!
| Raspberry Pi | HDMI Cable | ||
| LED | Case | ||
| Button | Power Supply | ||
| GPIO Pins | HDMI Cable | ||
| GPIO leaf | Micro SD Card | ||
| Display, Keyboard & Mouse |
Your Pi should start up and show on the screen. No? Check all connections, remove and re-insert SD card, try again.
Open "Mu" and "Chromium Web Browser":
Arrange the windows like this:
In Mu enter this code and click the button.
print("Hello World")
When prompted to save, find the
Documents
folder and name the file Lesson1.py
.
If "Hello World" shows up below, congrats you're now a coder! 🎉🙌🏽
If "Hello World" doesn't show up, congrats, you're a coder too, but now can debug like a coder 🤪
Let's add the concept of a while
loop and a few variables.
Edit your code to look like it does below and where
it says YOUR_NAME
put your name instead:
name = "YOUR_NAME"
count = 1
while count < 6:
print("Hi " + name + " count is " + str(count))
count += 1
print("Bye!")
Click the button and then the button.
5 lines should show like: Hi Bob count is 4
.
Note - code in this presentation has line numbers (eg 1-6 above). Don't type those in your editor! That's just for the educator to be able to reference the code.
Nice work!
You should now know how to assign variables
as seen with name
and count
. As well, we made a
while
loop run for 5 times increasing the
count
variable by one each time. Finally, you have to start
and stop the code when you make changes want to try the code again.
Feel free to go
back and change this code to do different things. Can you make it run 100 times? Print emoji 🤷♀?
What if you do count += 2
?
Have fun with it!
Now let's control that LED light you have there! Connect the LED wires to the GPIO pins as follows:
Black -> GND Red -> #18
Green -> #23 Blue -> #24
Create a new document by clicking the new button. Click
the save button and call it
Lesson2.py
(be sure it's next to
Lesson1.py
in Documents
!)
To give this script more powers, we'll import libraries called
gpiozero
and time
. We'll also declare a variable
with the GPIOP pins we used above (18, 23 and 24) with RGBLED(18, 23, 24)
.
Finally, we'll pause our
script for a moment using sleep()
.
Go to the next slide to see how!
Put this into your new document and run it :
from gpiozero import *
import time
led = RGBLED(18, 23, 24)
led.on()
time.sleep(1)
led.off()
Did your light turn on?! Awesome if yes!🤩
If not, no problem! Debug it or ask for help.
Let's pump up the jam with some more colors! Try this:
from gpiozero import *
import time
led = RGBLED(18, 23, 24)
led.red = 1
time.sleep(1)
led.off()
led.blue= 1
time.sleep(1)
led.off()
Did you see a two light disco party? Rock on! 🤘 Did your code crash? No problem, debug away or ask for help!
Now we'll listen for a button press. Connect the two wires to the GPIO pins as follows:
One wire -> GND The other wire -> #25
It doesn't matter which wire goes to which pin. Like you did the past lesson,
create a new file called Lesson3.py
and to the next slide to see the code.
from gpiozero import *
button = Button(25)
def turn_on():
print("Hi!")
def turn_off():
print("Bye!")
while True:
button.when_pressed = turn_on
button.when_released = turn_off
It'll say "Hi!" when pressed and "Bye!" when released. If not, time to get good at debugging! Did you know the best coders are the best dubuggers?!
while True;
instead of just looping a few times.def turn_off():
and def turn_on():
button.when_pressed =
turn_on
and released button.when_released = turn_off
button = Button(25)
We're now going to use all the concepts we learned, and two more, to write a game. This will be fun! First hook up your 2nd button (again, it doesn't matter which is which):
One wire -> GND The other wire -> #12
Create a new file called Lesson4.py
next to the other three files. Over the
next slides, you'll add each new section at the bottom of the Lesson4.py
file.
Let's import three libraries. Along with sleeping and talking to our buttons and LED,
randrange
will allow us to sleep()
a random time - perfect for a game!
from gpiozero import *
from random import randrange
import time
We're going to create a new variable type called a list. It's the players
list!
As well, we'll ensure we have the other variables we used before:
players = [0, 0]
button1 = Button(25)
button2 = Button(12)
led = RGBLED(18, 23, 24)
This function checks if the light is on, checks which player pressed the button and gives you a point or takes away a point:
def lightCheckPrintScore(player):
player = player - 1
if led.is_lit:
led.off()
players[player] += 1
else:
players[player] -= 1
print()
print("Player 1: " + str(players[0]))
print("Player 2: " + str(players[1]))
This function simply checks if a button was pressed and then calls
lightCheckPrintScore()
passing it the button that was pressed.
def buttonCheck(button_number):
if button_number == 1:
return lambda: lightCheckPrintScore(button_number)
if button_number == 2:
return lambda: lightCheckPrintScore(button_number)
We'll need to endlessly loop and wait a random amount time here:
while True:
button1.when_pressed = buttonCheck(1)
button2.when_pressed = buttonCheck(2)
led.on()
time.sleep(randrange(5))
from gpiozero import *
from random import randrange
import time
players = [0, 0]
button1 = Button(25)
button2 = Button(12)
led = RGBLED(18, 23, 24)
def lightCheckPrintScore(player):
player = player - 1
if led.is_lit:
led.off()
players[player] += 1
else:
players[player] -= 1
print()
print("Player 1: " + str(players[0]))
print("Player 2: " + str(players[1]))
def buttonCheck(button_number):
if button_number == 1:
return lambda: lightCheckPrintScore(button_number)
if button_number == 2:
return lambda: lightCheckPrintScore(button_number)
while True:
button1.when_pressed = buttonCheck(1)
button2.when_pressed = buttonCheck(2)
led.on()
time.sleep(randrange(5))


Photos of the week 29 Nov 2019, 13:01 A week in photos from award-winning Sydney Morning Herald photographers. Follow us on Twitter.


CS is always looking for ice rod wrappers. How it works: CS Rod Wrappers work remotely from thier own workshops.
The wrappars come into the store and pick up ice rod blacks with handles pre-glued onto them.
The Wrapper is responsable for wrapping the guides and hook keepers onto each ice rod. CS will provide all the hardware
and supplies neccessary to complete the job. Supplies include: guides, hook keepers, thread, razor blades and tape.
Each wrapping is required to have there own wrapping jig and thread tensioners. CS builds ice rods year round to keep
up with the demand. If interested, submit an application that can be found to the right.


Enter/paste your document here:
We all live in a yellow submarine, yellow submarine, yellow submarine, yellow submarine
Images can also be exported if you source them as base64 DATA URI.


{{ .Site.Params.Authorship }}. {{ with .GitInfo }} {{ $date := .AuthorDate.Local.Format (default "January 2, 2006" $.Site.Params.BookDateFormat) }} This page was last modified on {{ $date }}. {{ end }}
© 2019, Conjoint.ly, Sydney, Australia. ABN 56 616 169 021. For legal and data protection questions, please refer to Terms and Conditions and Privacy Policy.


A paragraph with a floating image. A paragraph with a floating image. A paragraph with a floating image.
A paragraph with a floating image. A paragraph with a floating image. A paragraph with a floating image.
A paragraph with a background image.
A paragraph with a background image.