We were challenged to design an interactive VR app using Google Cardboard. The VR experience needs to have positive impacts on people's wellbeing.
XCAPE is a VR escape training prototype, aiming to improve player's escaping skills in various dangerous situations. While the demo scene is about escaping from a fire accident, our whole VR app is designed to include various dangerous situations, such as fire, earthquake, terrorist attack, etc. We focused our design on building an immersive experience as well as teaching practical escaping skills.
I collaborated with two design students on this project. My role was developer and UX designer.
DESIGN: Virtual Reality
FOCUS: Game Design/Development
DATE: Aug-Nov 2017
Online research - information about existing products and their limitations
Survey - 42 participants from all age groups
Interviews - interviewed 6 people through a semi-structured question set
We aim to design a comprehensive disaster /escaping training simulator. In addition to the various dangerous situations, under each case, player can also choose different modes, such as single player, play with others (with other virtual roles to help you learn how to escape with other people). Under some modes, the players can also choose their character group such as single, with friends or with family, as it can be an important factor influencing their escaping capability.
The educational purpose is reflected by providing escape knowledge and tips throughout the game. For example, when players collect a key object, a pop-up window will suggest different usages of the item. Players can make decision by choosing the action. If the players make a wrong choice or put themselves in a dangerous situation, they will get notification. At the end of the game, player can view the summary of their choices and learn about the right decision.
In order to attract the players, we tried to incorporate game elements into this VR training simulator. For example, we set levels for them and when they pass a new level they will get a reward (an extra survive chance in another game level). Also, the game is time limited as the play’s HP bar is connected to time and other factors.
Our VR app is different from other apps on the current market. Compared with other escaping training apps and websites, our design offers an immersive experience with virtual reality. This will best simulate the dangerous situation with relatively low costs. Although there are a few VR apps which also offer disaster simulation experience, most of them require devices like HTC Vive or Oculus. Our app is based on cardboard, which is far more affordable. Therefore, it has the potential to reach larger population and bring escape skills to more people.
In terms of design, most similar apps only focus on providing game experience rather than educating or training. They offer only one dangerous situation to play with. In contrast, our app aim to offer a wide range of situations and provide tips through playing.
The fundamental elements of our design worked. This includes our model room and the basic interactions. With 3ds Max and Unity, we build a model room where the player can walk around and interact with the stuff inside the room. The player can pick up an object by gazing at it for 1.5 seconds. Walking is achieved by press the button on the Cardboard. If the player tap the button once, he will head forward automatically until he tap the button again. Currently, the players can interact with a few objects in the room. For example, he can open the door by gazing the handle on the door.
However, there are some details which did not work mostly because of technical issues. For example, when the players interact with an object, there is supposed to appear a pop-up window with different choice for them to choose from. However, our current version only has information in the pop-up box. Due to time and competence limit, we tried but unfortunately still not able to work out this interaction. Another important design which we did not work out is the HP bar and the algorithm in the backend. Without incorporating all the win/lose conditions and judgements in the system, our prototype can only be used for demonstration purpose at this stage.


Pricing and Plans Basic Free Limited time only! Membership benefits Seven day premium Sign Up Pro $16 Per Month All of Basic Seven day premium Sign Up Premium $79 Per Month All of Basic and Pro Seven day premium Sign Up Bespoke $199 Per Month All of Basic & Pro & Premium Seven day premium Sign Up


To add a project, click on Add project and fill the two fields. When click on Add. The documentation will be generated. When this is done, you will be redirected to the doc.
On the home page, juste after a project name, you see the date when the documentation was generated. If you think it's too old, clic on to refresh it. You can also click on to go to the project Github page.
At this time, we only support Github. If this is not accpetable for you, you are welcome to help us ;)


0.2.8 - 2019-03-09
- Fixed: Edge form support. (#178 - @robinnorth)
- Fixed: Removed keyup event listener for forms. (#184 - @BehindTheMath)
- Fixed: Bugs in evalScripts(). (#186 - @BehindTheMath)
- Fixed: Handle non-string HTML passed to loadContent(). (#200 - @BehindTheMath)
- Tooling: Switch linting to ESLint and Prettier. (#191 - @BehindTheMath)
0.2.7 - 2018-08-15
- Fixed: Parsing values of option elements in forms. (#162 - @BehindTheMath)
- Fixed: Added index.d.ts to package.json so it will be installed by npm. (c589ab9 - @BehindTheMath)
- Fixed:
options.history
to correctly parse being set to false. (#165 - @BehindTheMath). - Fixed: Pass the current
options
object toloadContent()
. (#171 - @BehindTheMath) - Fixed: Ensure correct XHR encoding for multipart/form-data forms (#174 - @BehindTheMath)
- Added: More documentation. (#160, #171 - @robinnorth, @BehindTheMath)
0.2.6 - 2018-04-30
- Fixed: Form submission for GET requests. (#129 - @robinnorth)
- Fixed: Refactor
loadUrl()
to make manually calling simpler. (#134 - @robinnorth) - Fixed: Support multiple select fields in form submissions. (#147 - @robinnorth)
- Fixed: Use the same options object in
handle-response
as insend-request
. This way,pjax.state.options
will also have the request options. (#148 - @BehindTheMath) - Added: Move the XHR callback to a separate method, and trigger an error event if the response cannot be parsed. (#137 - @BehindTheMath)
- Added: TypeScript definitions. (#138 - @BehindTheMath)
- Added:
replaceNode
switch, as an alternative to theouterHTML
switch. (#141 - @BehindTheMath) - Added:
X-PJAX-Selectors
HTTP header. This is a serialized JSON array of selectors, taken fromoptions.selectors
. You can use this to send back only the elements that Pjax will use to switch, instead of sending the whole page. (#144 - @BehindTheMath) - Added: An option to use
FormData
to submit forms. (#153 - @BehindTheMath) - Added: Tests. (f98f2dd, #145 - @robinnorth, @BehindTheMath)
0.2.5 - 2018-02-02
- Fixed: Async switch functions now work correctly, because the DOM is now parsed after all the switches finish. (#79, #110 - @oskarrough, @BehindTheMath, @robinnorth)
- Fixed: Bug on IE11 preventing AJAX page refresh. (#81 - @CPTechnikVX)
- Fixed: Default switches are now available as
Pjax.switches
. (#92 - @BehindTheMath) - Fixed: An error that was caused by a missing
switchElementsAlt
. (#93, #104 - @BehindTheMath, @robinnorth) - Fixed: Incorrect
main
field in npm package (#105 - @robinnorth) - Fixed: A pending XHR is now aborted if the user navigates somewhere else before the request is finished. (#114 - @robinnorth)
- Fixed: When rendering new content, focus will now be removed only from elements within one of the containers manipulated by Pjax. (#116 - @BehindTheMath)
- Fixed: Stop dispatching extraneous
pjax:complete
events when external scripts load (#118 - @robinnorth) - Added: Send the
X-PJAX
header with XHR requests. (#80 - @bram1028) - Added: Direct download link for script tags. (@MoOx)
- Added: Pass the element that triggered Pjax to the
pjax:send
event. (#94 - @BehindTheMath) - Added: An option to set a timeout for XHR requests. (#95 - @BehindTheMath)
- Added: Checks for XHR redirects (#101 - @BehindTheMath)
- Added: Save scroll position with history, and restore when navigating backwards or forwards. (#110, #119 - @BehindTheMath, @robinnorth)
- Added: Scroll to element position when URL contains a hash (#110 - @BehindTheMath)
- Added: Minified version of the Pjax bundle. (#115 - @BehindTheMath)
- Changed: Miscellaneous code and tests cleanup. (#96, #98, #99, #100, #107, #113, #120 - @BehindTheMath, @MoOx, @robinnorth)
0.2.4 - 2016-06-28
- Fixed:
refresh
should now work (usethis.parseDOM
for refresh) (#67 - @compressed) - Fixed: Some attributes, such as
itemscope
have no corresponding value. This change allows them to still be set. (#67 - @compressed) - Added:
cacheBust
option (#71 - @tremby)
0.2.3 - 2016-03-24
- Fixed:
currentUrlFullReload
option now works - Fixed:
this.reload
is now a Function (#65)
0.2.2 - 2016-03-12
- Fixed: added back standalone version in
./pjax.js
(#57 - Fixed: error when using pjax with google analytics (
options
was undefined) (#59) - Fixed: HierarchyRequestError error (#49)
- Fixed:
TypeError: Pjax.forEachEls is not a function
(#52) - Fixed:
TypeError: Pjax.executeScripts is not a function
(#52) - Fixed:
TypeError: Pjax.clone is not a function
(#52) - Added: Ignore events with prevented defaults (#50)
0.2.1 - 2015-02-04
- Fixed: it's better when a release have actual files.
0.2.0 - 2015-02-04
- Fixed: prevent scrollTo from being converted from false to 0 (#33)
- Changed: code exploded in commonjs style
- Added: lots of tests
- Added:
refresh
method to force update a DOM element (#36)
0.1.4 - 2014-10-14
- Fixed: allow to load pages without any attributes on
<html>
element (fix #6) - Fixed: make
Pjax.switches.sideBySide
method usable (fix #13)
0.1.3 - 2014-09-16
- Fixed: clicking on the current url somewhere does not produce a full reload by default (see option
currentUrlFullReload
) - Fixed:
document.implementation.createHTMLDocument
error (in IE10, ref #16)
0.1.2 - 2014-04-03
- Changed:
pjax.js
relocated insrc/
- Fixed:
<html>
attributes of pjaxified document are now available
0.1.1 - 2014-04-02
- Fixed: safer UMD wrapper (fix concat issue)
0.1.0 - 2014-03-24
✨ Initial release


The model you are editing is out of sync or some other error has occurred.
Please reload the model to continue making edits.


|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Interface Summary | |
|---|---|
| ModuleIF | INTERNAL: Represents a tolog module. |
| ParseContextIF | INTERNAL: Represents an interpretation context for tolog queries. |
| PredicateFactoryIF | INTERNAL: Implemented by classes which can create PredicateIF objects. |
| PredicateIF | INTERNAL: Represents a predicate. |
| RealTologParserTokenTypes |
| Class Summary | |
|---|---|
| AbstractClause | INTERNAL: Common superclass for or clauses and other kinds of clauses. |
| DeleteStatement | INTERNAL: Represents a parsed DELETE statement. |
| GlobalParseContext | INTERNAL: Represents the global immutable context of all tolog queries. |
| InsertStatement | INTERNAL: Represents a parsed INSERT statement. |
| LocalParseContext | INTERNAL: Represents the local context in which a tolog query or rule file is being parsed. |
| MergeStatement | INTERNAL: Represents a parsed MERGE statement. |
| ModificationFunctionStatement | INTERNAL: Represents an UPDATE or DELETE statement, since these are the ones that can have functions. |
| ModificationStatement | INTERNAL: Common abstract superclass for all tolog updates statements (INSERT, DELETE, MERGE, UPDATE). |
| NotClause | INTERNAL: Used to represent not clauses in tolog queries. |
| OrClause | INTERNAL: Used to represent or clauses in tolog queries. |
| Pair | INTERNAL: Used to represent a : b pairs in tolog queries. |
| Parameter | INTERNAL: Used to represent parameter references in tolog queries. |
| ParsedRule | INTERNAL: Represents a parsed rule. |
| PredicateClause | INTERNAL: Used to represent clauses in tolog queries. |
| QName | INTERNAL: Used to represent qualified name references in tolog queries. |
| RealTologParser | INTERNAL: Parser for the tolog query language. |
| TologLexer | A tolog lexer, to be used with the Antlr-generated parser. |
| TologOptions | INTERNAL: Represents the properties set in a given tolog processing context. |
| TologParser | INTERNAL: The tolog query parser. |
| TologQuery | INTERNAL: Used to represent parsed SELECT queries. |
| TologStatement | INTERNAL: Common abstract superclass for all kinds of tolog statements, including SELECT and the update statements. |
| UpdateStatement | INTERNAL: Represents an UPDATE statement. |
| Variable | INTERNAL: Used to represent variable references in tolog queries. |
| Exception Summary | |
|---|---|
| AntlrWrapException | INTERNAL: Exception used to wrap other exceptions so that they can be thrown from inside ANTLR-generated code. |
| JFlexWrapException | INTERNAL: Exception used to wrap other exceptions so that they can be thrown from inside JFlex-generated code. |
Contains the code that parses tolog queries. None of the contents of this package are public.
|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


Tons of stuff in the Passwords and Hashes > Kerberos > Kerberos Delegation > Resource-Based Constrained Delegation section.


Before Change
if len(node.inputs) > 2:
b = node.input_tensors[node.inputs[2]]
if len(W.shape) != 2 or (b is not None and len(b.shape) != 1):
err.unsupported_op_configuration(builder, node, "Gemm is supported only for inner_product layer")
if b is not None:
if W.shape[0] != b.shape[0]:
err.unsupported_op_configuration(builder, node, "Gemm is supported only for inner_product layer")
After Change
if len(node.inputs) > 2:
b = node.input_tensors[node.inputs[2]]
if len(W.shape) != 2 or (b is not None and len(b.shape) != 1):
return err.unsupported_op_configuration(builder, node, "Gemm is supported only for inner_product layer")
if b is not None:
if W.shape[0] != b.shape[0]:
return err.unsupported_op_configuration(builder, node, "Gemm is supported only for inner_product layer")


Before Change
candidates = candidates if isinstance(candidates, list) else [candidates]
for candidate in candidates:
args = tuple([m.context for m in candidate.get_mentions()])
if not (isinstance(args[0], TemporarySpanMention)):
raise ValueError(
f"Accepts Span-type arguments, {type(candidate)}-type found."
)
After Change
candidates = candidates if isinstance(candidates, list) else [candidates]
for candidate in candidates:
args = tuple([m.context for m in candidate.get_mentions()])
if any(not (isinstance(arg, TemporarySpanMention)) for arg in args):
raise ValueError(
f"Table feature only accepts Span-type arguments, "
f"{type(candidate)}-type found."


Homepage
Blog
Gallery
Students data
Application form
Contact
Resources
| First Name | Last Name | E. Mail | Contact No. |
|---|---|---|---|
| Kumar | Harsh |<EMAIL_ADDRESS>| +919455164571 |
| Rahul | Kumar |<EMAIL_ADDRESS>| +917006444984 |
| Shekher | Dubey |<EMAIL_ADDRESS>| +917832447765 |
| 3 Of 3 Records Are Displayed. |
© Copyright 2020. www.subhambarnwal.com


|
| void | ih (game *Game) |
| | Handles the overall game, by handling the inturrupts from the keyboard, mouse and timer. More...
|
| |
| void | game_func (char filepath[]) |
| | Only function needed to be called to run a game. More...
|
| |
- Author
- Diogo Faria
Functions that handle the overall gameplay
◆ game_func()
| void game_func |
( |
char |
filepath[] | ) |
|
Only function needed to be called to run a game.
- Parameters
-
| filepath | Filepath of the top score file |
◆ ih()
Handles the overall game, by handling the inturrupts from the keyboard, mouse and timer.
- Parameters
-
| Game | pointer to the struct of the current game |


|
WinPcap
4.1.3
|
Structure that keeps the data required for the authentication on the remote host. More...
#include <pcap-remote.h>
Data Fields | |
| uint16 | type |
| Authentication type. More... | |
| uint16 | dummy |
| Must be zero. More... | |
| uint16 | slen1 |
| Length of the first authentication item (e.g. username) More... | |
| uint16 | slen2 |
| Length of the second authentication item (e.g. password) More... | |
Structure that keeps the data required for the authentication on the remote host.
Definition at line 249 of file pcap-remote.h.
| uint16 dummy |
Must be zero.
Definition at line 252 of file pcap-remote.h.
| uint16 slen1 |
Length of the first authentication item (e.g. username)
Definition at line 253 of file pcap-remote.h.
| uint16 slen2 |
Length of the second authentication item (e.g. password)
Definition at line 254 of file pcap-remote.h.
| uint16 type |
Authentication type.
Definition at line 251 of file pcap-remote.h.
documentation. Copyright (c) 2002-2005 Politecnico di Torino. Copyright (c) 2005-2010 CACE Technologies. Copyright (c) 2010-2013 Riverbed Technology. All rights reserved.


Man fatally struck by box truck in the Bronx: cops
by Craig McCarthyA 56-year-old man was struck and killed by a box truck on Bronx River Avenue in Soundview, cops said Sunday.
The man, whose name was not released, was knocked down by the truck and run over by the rear wheels as he was trying to cross the road at Westchester Avenue just before 5 p.m. Saturday, cops said.
The man rushed to Lincoln Hospital, but he could not be saved, according to police.
The truck driver stayed on scene and no arrests have been made, cops said.


The API Superstore provides a catalog of thirdparty APIs that you can use to enhance your business. From ecommerce to maps, API Superstore lists all of the services that customers expect and saves you the headache of sorting it out yourself! The longer you wait, the longer you’re not making more money and happier users!
Here is the feature list for API Superstore:
“This is the beset website ever!” -- C. P. Yu, AmazingSite.com
“Once again, I’m blown away by the amazing offerings of the API Superstore. You really are SUPER!” -- Clara Cache
“I have really admired the way the API Superstore team has created a truly divine interface, and API Superstore makes my world so much happier!” -- Aaron Zon, Massive Anonymous Customer
We want to hear from you. Get in touch with API Superstore.
API SuperstoreHave a question? Tell us about it! Use our chat line and we'll give you an answer super-fast.


THE PHANTOM OF THE OPERA A film review by Mark R. Leeper Copyright 1990 Mark R. Leeper
Capsule review: NBC had the money and the time to tell Gaston Leroux's story correctly and accurately to the book. Instead they gave it to people with no respect for the novel (by their own admission) and got a slow and uninteresting version with most of the power of the original story missing. Rating: low 0.
The day that Tony Richardson's made-for-television version of THE PHANTOM OF THE OPERA was due to be shown, my local newspaper did a feature on it quoting the writer Arthur Kopit as saying, "[After having read the novel] what struck me was that this story ... wasn't very good. Still it captured the imagination of people. Why? What bothered me about [the previous dramatic] versions, what I thought they essentially missed, was that you never knew why the Phantom was in love with Christine."
I had very high hopes for this version. There were four announced film adaptations in the wake of the success of the Broadway play. One starred Richard Englund, whose most famous role was the razor-gloved Freddy Krueger; one was simply a film version of the musical; one was set in Nazi Germany. Of the four versions, the only one that sounded like a genuine new adaptation of the novel was the announced four-hour television version. Then I read Kopit's quote.
What Kopit is saying is that he has no respect for the material itself, only for its ready-made market. He also thinks that the dramatic versions missed the point of why the story is popular. I could easily believe his comment if it really was the novel that people remember but, in fact, the book has not been what people have liked. For most of the years the story has been liked, Gaston Leroux's novel has been hard to find. Andrew Lloyd Webber tells an anecdote about how difficult it was to find a copy of the novel when he wanted to read it. The dramatic adaptations that Kopit thinks missed the point of why the story is remembered are really what made the story popular. And here they cannot have missed the point. Actually I would contend that they have all missed what I like in the novel, but not what has made the story popular.
The novel is about a man with a great intellect and a horribly deformed face. All his life he was treated as a freak and just occasionally exploited for his genius. Eventually he finds the opportunity to build for himself an empire in the darkness beneath the Paris Opera House. There he can enjoy the music and can be seen only when he wants. This is Gaston Leroux's Erik but he has never been done satisfactorily in a film or play. I had hoped that in the three and a half hours or so of story there would be time to show Erik's history. In fact, this version did show Erik's history but it bore little relation to anything in the novel.
Kopit missed the point entirely by making his Phantom a petulant young man (played by Charles Dance of THE JEWEL IN THE CROWN), who is being shielded by a former manager of the opera house (over-played by Burt Lancaster).
Kopit's screenplay intends this Erik to be likable and steers clear of the question in the novel of whether Erik might be psychotic. This Erik does not kill, at least in the course of the film. Oh, his face may startle and early on this causes a death, but that does not appear to be Erik's fault. This Erik has lost the feel of the sinister and instead controls the fate of the opera house with practical jokes. Even the cutting down of the chandelier is not a murder attempt but an act of angry vandalism intended to vent rage and for which the audience was intentionally given time to get out of the way. Of course, this Erik had less reason for rage than the one in the book. The script claims that Erik's mother at least found his face "flawlessly beautiful." In the book Erik's mother gave him his first mask because she could not stand to look at his face.
There are a few nice touches to the script. One of them is the handling of the issue of how to handle the unmasking. Sort of independently of the quality of the rest of the production there is the question of how to shock audiences when they do see the Phantom's face. The approach here was unusual and not badly done, though it was perhaps dictated by the screenplay's efforts to keep Erik as a romantic Phantom. Less endearing is Erik's unexpected forest beneath the ground. It isn't like the metal forest of the novel but a real forest with live trees and unexplained sunlight. It appears that Erik must have built himself a holodeck.
Charles Dance is a little whiny for my tastes, as well as not being sufficiently sinister. Lancaster as the former manager is overripe and Teri Polo as Christine Daee (in the book Daae) is unmemorable. She and her lover Adam Storke as Phillipe, Comte de Chagney, are pretty people but boring actors. (Again, they got the name wrong on the Comte. The character's name was Raoul. Phillipe is the name of Raoul's brother, older by twenty years.)
 I am not a fan of that film but it certainly was better directed than this slow-moving version. If I had never heard of the story before I would have rated this a little higher, but as it is I would give Richardson's version a low 0 on the -4 to +4 scale.
[Postscript: Of the dramatic versions of THE PHANTOM OF THE OPERA I have seen, I would list them best to worst as: the Webber play (which is surprisingly faithful to the book), the Lon Chaney film (1925), the Claude Rains film (1943), the animated cable version (1987) (lackluster but very faithful to the book), the made-for-television Maximillian Schell version (1983), the Herbert Lom film (1962), the made-for-television Charles Dance film (1990), and then there is a very long gap down to Richard Englund's putrescent version (1989). I do not count films only inspired by the story, such as PHANTOM OF THE PARADISE, THE PHANTOM OF HOLLYWOOD, and PHANTOM OF THE OPERETTA.]
[Post-postscript: For someone with a better command of French than my own: the name of the novel as "The Phantom of the Opera" but in the novel he refers to himself less dramatically as "The Opera Ghost." Isn't that distinction purely on the part of the translator? Don't both translate to the same words in French?]
Mark R. Leeper att!mtgzx!leeper<EMAIL_ADDRESS>.
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


FAQ
EditDo I have to learn Flixel (AS3) before HaxeFlixel?
No, you have to learn HaxeFlixel to use HaxeFlixel, although previous experience with the AS3 version will help.
Do I have to learn ActionScript before Haxe?
No, although previous experience will help.
Do I have to learn OpenFL to use HaxeFlixel?
No, HaxeFlixel abstracts it completely.
Are there any tutorials?
Videos from Christopher Butler (covering everything from installation to prototyping a platformer).
I found a bug, where to report?
On the official GitHub repository.
Is HTML5 supported?
Almost, it still is in development.
Will next-gen consoles be supported?
Eventually, yes! Read more about it here.
My sounds are lagging!?
On some platforms you need to manually cache sounds: FlxG.sound.cache("sound");
or FlxG.sound.cacheAll();
to do all at once.
My player falls off-screen after walking a certain distance!
Collisions are limited to the area defined by FlxG.worldBounds
. For example in platformers where this area needs to be larger, you need to adjust it manually.
Can I make 3D games with HaxeFlixel?
No, the framework is limited to 2D graphics.
How do I protect my assets from being stolen?
If you add embed="true"
to the <assets path="assets">
tag of the Project.xml
, the asset files are embedded into the .exe.


Students list
Name
Student no.
Add
Courses list
Title
Course no.
Start time
End time
Weekday
Saturday
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Add
Add students to course
Add the student
to the course
with points
Go


Serving The Best Quality Products And Service
Copyright © yazerber Plc 2017
Addis Ababa, P.o.box 1078


Welcome to Dog Corp. Our firm is dedicated to fulfilling dog needs thoughout the world. We specialze as consultants on hole digging, barking at random noises and eating trash.
At dog corp, we understand the past, and our position in the future.
Summo saperet constituam dogs no sit, malis clita in eam. Id quo unum lorem omnium. Brute discere mediocritatem at qui. Sententiae adversarium no nec, ex civibus dissentias disputando eos, has elit commune efficiendi id.
Duo ut senserit consetetur, duo alterum fabellas at, omnis volumus accommodare et sit. Red bellied warbler nostrum cotidieque no, duo te indoctum contentiones. Ubi cani sunt?


UKCloud Limited (“UKC”) and Virtual Infrastructure Group Limited (“VIG”) (together “the Companies”) – in Compulsory Liquidation
On 25 October 2022, the Companies were placed into Liquidation with the Official Receiver appointed as Liquidator and J Robinson and A M Hudson simultaneously appointed as Special Managers to manage the liquidation process on behalf of the Official Receiver.
Further information regarding the Liquidations can be found here: https://www.gov.uk/government/news/virtual-infrastructure-group-limited-and-ukcloud-limited-information-for-creditors-and-interested-parties
Contact details:
For any general queries relating to the Liquidations please email<EMAIL_ADDRESS>For customer related queries please email<EMAIL_ADDRESS>For supplier related queries please email<EMAIL_ADDRESS>Cloud Enablement Service Scope
About this document
This document describes the scope and limitations of the Cloud Enablement service available for hosting devices within UKCloud's data centres to help you use our other services.
About Cloud Enablement
The Cloud Enablement service provides basic facilities for your own hardware to be installed in our data centres for the purpose of utilising our cloud.
The table provides an overview of the Cloud Enablement services available for hosting physical devices. If the usage scenario you need isn't shown in the table, contact us to discuss your requirements.
Note
ANY device placed within the UKCloud estate must be done so to utilise our cloud services. If you do not plan to use a UKCloud service as part of your design (such as UKCloud for VMware or Cloud Storage), we can arrange for you to talk to one of our partners about your co-location requirements.
| Use case | You may have complex systems that cannot be virtualised (for example database clusters or legacy applications). You may have small amounts of network-attached storage you want to host with us, so that you can integrate it with another of our services, for example, our UKCloud for VMware offering. You may want to use a physical networking device such as a firewall. |
| Service type | Device hosting |
| Security level | Assured OFFICIAL and Elevated OFFICIAL |
| Cloud Enablement sizing | One bay = 10U, 1kW of power |
| Hosted device | Physical server, storage appliance or network device |
| Hosted device(s) allowed | Depends on solution. UKCloud will work with you to understand your requirements and assess the suitability of the devices that you want to locate within Cloud Enablement. |
| Hosted device power draw | Customer devices within a single 10U bay have a combined average power draw of no more than 1kW. Average power draw will be assessed based on vendor material supplied by the customer as part of the engagement with UKCloud prior to installation of devices. |
| Service level (default) | Single data centre, no automatic failover |
| Cost | Priced per 10U bay £2,000 up front charge £500 pcm Additional install visits charged at SFIA rate |
| Resilience available? | We don't provide a resiliently connected environment. You can provision devices to both of our data centres to create a self-managed resilient solution (in which case, the resilience options below are required). |
| Failover responsibility | Customer |
| Resilience requirement (1 bay = 10U, 1kW of power) |
Depends on solution |
| Resilience cost | Depends on solution |
| Notes | Devices must be hosted in the same region as your compute environment. We cannot stretch connectivity from local Cloud Enablement into other regions (for example, Cloud Enablement in region 5 cannot be stretched to region 6). |
| Next steps | Raise a service request via the My Calls section of the UKCloud Portal. |
What connectivity does the server/storage hosting service provide?
The service provides up to two ports:
Cloud Enablement in regions 1, 2, 7 & 8 offers copper connectivity only
Cloud Enablement in regions 5, 6, 13 & 14 offers connectivity via SFP, so customers can use fibre or copper
The connection is into a shared switch.
What are the port speeds of connection?
In regions 1, 2, 7 & 8 the port speed is up to 1 Gbps
In regions 5, 6, 13 & 14 the port speed can be either 1Gbps (copper or fibre) or 10Gbps (fibre only)
Who manages the switch?
We manage the shared switch - the initial logical configuration is included in the setup fee. Additional configuration (of your devices to your solution) is a chargeable service.
Is there any switch redundancy within a rack?
We do not currently offer switch redundancy.
What's included in the setup fee?
The setup fee covers
Escorting you during the physical installation of your hosted device(s) for up to four hours during the standard working week (Monday to Friday, 0900 - 1700)
Logical configuration between our cloud and the hosted device(s)
One VLAN
Cabling from the rack to our cloud
The setup fee doesn't cover
Installing your device(s)
Configuring your device(s)
Non-standard design of your solution
Peripheral consumables such as brackets, cable ties, cage nuts, power cords and intra-rack cabling
Tools for installing your device(s)
What's included in the monthly fee?
The monthly fee covers
Physical hosting of your device(s), including power and connectivity
Four escorted visits a year by you for scheduled maintenance to your hosted device(s)
The monthly fee doesn't cover
Maintenance of your device(s)
Support and management of your device(s)
Unscheduled maintenance access
Installation and configuration of additional device(s) in your solution (this is a chargeable service)
What happens in the event of a power failure?
If, in the unlikely event of a power failure, you would like your hardware restarted, provide laminated work instructions (totalling no more than a double-sided A4 page) that you can place within your Cloud Enablement rack space.
Decommissioning
If you want to decommission your Cloud Enablement service you must provide a minimum of 30 days' notice and are responsible for the removal of your equipment. Visits to remove equipment are counted towards your allocation of maintenance access days and if you need additional days, these additional escorted visits will be charged as per the SFIA rate card (Level 4 - Enable).
Feedback
If you find a problem with this article, click Improve this Doc to make the change yourself or raise an issue in GitHub. If you have an idea for how we could improve any of our services, send an email to feedback@ukcloud.com.


Now that you have created an HTML/CSS Boilerplate, it’s time to put it to use. As I have already mentioned, the boilerplate you just learned about will be the basis for most of your assignments for the remainder of this course. In the screencast below, you will create a HTML page that you will update each time you finish an assignment. By the end of the course, this page will be a list for your to reference of all that you have learned.
Tip: Don’t focus on learning the HTML terms that will be introduced to you in this screencast. The terms will be covered in future assignments, when they are contextually appropriate. For this one instance, it’s better to just follow along with the screencast to get used to writing HTML in Brackets, without trying to learn terms.
This assignment will be worth 5 points. You will upload the files to the class hosting account in Screencast 06.


Test Suite XML File
A test suite xml can contain one more test suites and can optionally contain a <setup> or <cleanup> elements.
Elements <setup> or <cleanup> which are defined directly in xml are called global setup/cleanup.
Maximum there can be only one global setup or cleanup across the xml files.
<testData xmlns:ccg="/fw/ccg/XMLBeanParser" xmlns:wrap="/fw/ccg/XMLBeanParser/wrap">
<setup>
<ccg:log message="Message from global setup."/>
<ccg:ddlQuery dataSourceName="dataSource">
<query>
CREATE TABLE EMPLOYEE
(
ID INT,
NAME VARCHAR(100)
)
</query>
</ccg:ddlQuery>
</setup>
<cleanup>
<ccg:log message="Message from global cleanup."/>
</cleanup>
</testData>
From the specified test-suite folder all xmls are parsed and are executed in following order:
-
Setup: Steps specified in <setup> are executed first. And are expected to contain steps to do basic setup required for test-suites.
-
Test Suites: Test suites are generally executed in alphabetical order. Only when a test-suite is found to be dependent on test-suite, that dependency test-suite will be
executed first. A test suite xml can have one or more test-suites.
-
Cleanup: Steps specified in <cleanup> are executed at end (after test suites execution). And are expected to contain steps to do cleanup of done by test-suites.


Instructions
Expand the "Enter your slogan Content Here" section to create a new definition.
A slogan definition is a set of lines in the text area
Each line can have optional phrases which are csv text in square brackets e.g. [never, only, ever]
One phrase in the csv will be randomly chosen to use in the generated slogan line
You can have csv phrases in each slogan line
When generating a slogan, one line will be chosen at random to be the slogan
Brought to you by
EvilTester.com
Bug Injection
Bug #1
Bug #2
Bug #3
Enter Your Slogan Content Here
We can [only, never, absolutely] [automate, encourage, mandate] [creativity, rote work, the wearing of hats]
generate sloganizer
Generate Slogan
Slogans will appear here


Social media for our advantage - KK Fosu
by Abdulai Haruna, GNAAccra, Nov. 24, GNA - Mr Kaakyire Kwame Fosu, popularly known as KK Fosu, has said social media and the internet have made a major impact on the music industry and called highlife musicians to carefully blend their traditional styles with new and prevailing trends.
“It was a challenge but now it is an advantage”, he said.
Speaking in an interview with Ghana News Agency, KK Fosu said foreign cultural and musical influences could be merged with what is currently prevailing in the country for all to enjoy and appreciate and this is what hiplife has sought to achieve over the years.
KK Fosu said as a result of that effort, he has sold five albums and is currently signed up with ‘Worldmap Records’ owned by Frank Gogo.
He said he would continue in his efforts to aid young and upcoming artistes as it is his goal to ensure that the youth would continue to appreciate our leaders in the highlife industry
KK Fosu said in the past there used to be few radio stations but now they are all over and the onus now lies on the musician to capture the attention of the radio station by coming up with socially relevant and beautifully crafted themes in their repertoire.
GNA


Harmony Index
Non-custodial Automated Portfolio Management
Equal Weighted Portfolio WONE SUSHI WETH WBTC
SUSHI
WONE
WETH
WBTC
Total Portfolio Value $
Your Share


Working with Amazon SWF Domains Using the AWS Command Line Interface
This section describes how to perform common Amazon SWF domain tasks using the AWS CLI.
Topics
Listing Your Domains
To list the Amazon SWF domains that you have registered for your account, you can use swf
list-domains
. There is only one required parameter:
--registration-status
, which you can set to either REGISTERED
or
DEPRECATED
.
Here's a minimal example:
$ aws swf list-domains --registration-status REGISTERED
{
"domainInfos": [
{
"status": "REGISTERED",
"name": "ExampleDomain"
},
{
"status": "REGISTERED",
"name": "mytest"
}
]
}
Note
For an example of using DEPRECATED
, see Deprecating a Domain. As you might guess,
it returns any deprecated domains you have.
Setting a Page Size to Limit Results
If you have many domains, you can set the --maximum-page-size
parameter to
limit the number of results returned. If you get more results than the maximum number that
you specified, you will receive a nextPageToken
that you can send to the
next call to list-domains
to retrieve additional entries.
Here's an example of using --maximum-page-size
:
$ aws swf list-domains --registration-status REGISTERED --maximum-page-size 1
{
"domainInfos": [
{
"status": "REGISTERED",
"name": "ExampleDomain"
}
],
"nextPageToken": "ANeXAMPLEtOKENiSpRETTYlONG=="
}
Note
The nextPageToken
that is returned to you will be much longer. This
value is merely an example for illustrative purposes.
When you make the call again, this time supplying the value of
nextPageToken
in the --next-page-token
argument, you'll
get another page of results:
$ aws swf list-domains --registration-status REGISTERED --maximum-page-size 1 --next-page-token "ANeXAMPLEtOKENiSpRETTYlONG=="
{
"domainInfos": [
{
"status": "REGISTERED",
"name": "mytest"
}
]
}
When there are no further pages of results to retrieve, nextPageToken
will not be returned in the results.
Getting Information About a Domain
To get detailed information about a particular domain, use swf
describe-domain
. There is one required parameter: --name
, which takes
the name of the domain you want information about. For example:
$ aws swf describe-domain --name ExampleDomain
{
"domainInfo": {
"status": "REGISTERED",
"name": "ExampleDomain"
},
"configuration": {
"workflowExecutionRetentionPeriodInDays": "1"
}
}
Registering a Domain
To register new domains, use swf register-domain
. There are two required
parameters, --name
, which takes the domain name, and
--workflow-execution-retention-period-in-days
, which takes an integer to
specify the number of days to retain workflow execution data on this domain, up to a maximum
period of 90 days (for more information, see the Amazon SWF FAQ). If you specify zero (0)
for this value, the retention period is automatically set at the maximum duration. Otherwise,
workflow execution data will not be retained after the specified number of days have
passed.
Here's an example of registering a new domain:
$ aws swf register-domain --name MyNeatNewDomain --workflow-execution-retention-period-in-days 0
When you register a domain, nothing is returned (""), but you can use swf
list-domains
or swf describe-domain
to see the new domain. For
example:
$ aws swf list-domains --registration-status REGISTERED
{
"domainInfos": [
{
"status": "REGISTERED",
"name": "ExampleDomain"
},
{
"status": "REGISTERED",
"name": "MyNeatNewDomain"
},
{
"status": "REGISTERED",
"name": "mytest"
}
]
}
Here's an example using swf describe-domain
:
$ aws swf describe-domain --name MyNeatNewDomain
{
"domainInfo": {
"status": "REGISTERED",
"name": "MyNeatNewDomain"
},
"configuration": {
"workflowExecutionRetentionPeriodInDays": "0"
}
}
Deprecating a Domain
To deprecate a domain (you can still see it, but cannot create new workflow executions or
register types on it), use swf deprecate-domain
. It has a sole required
parameter, --name
, which takes the name of the domain to deprecate.
$ aws swf deprecate-domain --name MyNeatNewDomain
As with register-domain
, no output is returned. If you use
list-domains
to view the registered domains, however, you will see that the
domain no longer appears among them.
$ aws swf list-domains --registration-status REGISTERED
{
"domainInfos": [
{
"status": "REGISTERED",
"name": "ExampleDomain"
},
{
"status": "REGISTERED",
"name": "mytest"
}
]
}
You can see deprecated domains by using --registration-status DEPRECATED
with
list-domains
.
$ aws swf list-domains --registration-status DEPRECATED
{
"domainInfos": [
{
"status": "DEPRECATED",
"name": "MyNeatNewDomain"
}
]
}
You can also use describe-domain
to get information about a deprecated
domain.
$ aws swf describe-domain --name MyNeatNewDomain
{
"domainInfo": {
"status": "DEPRECATED",
"name": "MyNeatNewDomain"
},
"configuration": {
"workflowExecutionRetentionPeriodInDays": "0"
}
}
See Also
-
deprecate-domain in the AWS Command Line Interface Reference
-
describe-domain in the AWS Command Line Interface Reference
-
list-domains in the AWS Command Line Interface Reference
-
register-domain in the AWS Command Line Interface Reference


Used to create the content that goes in a website; defines the structure of a website
What is an element?
An element is a part of the HTML webpage
What is a tag?
A tag is a marker that describes the element
What are some examples of HTML tags?
head, body, title, ... (that's what we've learned so far)
How do you write an HTML opening tag? Closing tag? (Someone can come up and write it)
<example> </example>
How do you open an HTML file to edit the code?
1 - through the text editor: select File > Open > (the file)
2- Right click on the file > Open With... (the text editor you use)
Goals
Build an HTML document (computer) (cont'd)

Contains the HTML document including text, buttons, tables, etc.

Your First Webpage!!
<!DOCTYPE html>

<title>My First Web Page</title>

 -

Defines Headings
Range in size from
 which is the largest to
 which is the smallest
Used to organize information on the page from most important to least important

Hello World!!

by: (your name here)

Your First Webpage!!
<!DOCTYPE html>

<title>My First Web Page</title>

Hello World!!

by: (your name here)

Defines paragraphs
Small text, usually the bulk of the page content

You just wrote a webpage using HTML!
Next we are going to look at these elements

Your First Webpage!!
<!DOCTYPE html>

<title>My First Web Page</title>

Hello World!!

by: (your name here)

You just wrote a webpage using HTML!
Next we are going to look at these elements

Attributes
Key/Value Pairs
Keys define the attribute
Values set the value of the attribute
Provides additional info about/Modifies HTML elements
Always specified in the start tag

Your First Webpage!!
<!DOCTYPE html>

<title>My First Web Page</title>

Hello World!!

by: (your name here)

You just wrote a webpage using HTML!
Next we are going to look at these elements

break;
Can you change the direction of text using HTML attributes?
continue;
Yes you can! Sort of (see the last line). Using the dir attribute you can change
where the punctuation appears, which is useful for languages that are
written from right-to-left, like Arabic. There are about 118
different HTML tags, though not all are supported by HTML5. And
these tags can be modified by many different attributes.

Defines an ordered list
Increments numerically as items are added
Each item needs a

 tag

Create new HTML file

Add HTML code

Save file

Open file in browser

Your First Webpage!!
<!DOCTYPE html>

<title>My First Web Page</title>

Hello World!!

by: (your name here)

You just wrote a webpage using HTML!
Next we are going to look at these elements

Create new HTML file

Add HTML code

Save file

Open file in browser

<!DOCTYPE html>

<title>My First Web Page</title>

Hello World!!

by: (your name here)

You just wrote a webpage using HTML!
Next we are going to look at these elements

Create new HTML file

Add HTML code

Save file

Open file in browser

Does page load?

Does page display properly?

Are you smiling?

<!DOCTYPE html>

<title>My First Web Page</title>

Hello World!!

by: (your name here)

You just wrote a webpage using HTML at
DEPSA

Create new HTML file

Add HTML code

Save file

Open file in browser

Does page load?

Does page display properly?

Are you smiling?

Because waiting to find bugs until we are done writing all our code delays deployment
How?

File > Save or Ctrl + S
Iterative Development
There are other software development methodologies that development
teams use but most have this short iterative process
(in some fashion) in common.
Tomāto, Tomäto
Semantic Tags
Elements with a meaning
Describes its meaning to the browser and developer
Useful for text-to-speech
Makes types, hierarchies and relationships clearer
HTML5 has new semantic tags that eliminate the need for previous semantic tags.
HTML: Structural vs Semantic Markup
HTML: Structural vs Semantic Markup
To keep it simple: structural is about...structure
(appearance on page), while semantic is about meaning.
Semantic HTML is useful for search engines, because they
can tell what is important on a webpage.
It's especially important for vision-impared readers, who use
screen readers to read out the content of a site.
HTML: Structural vs Semantic Markup
We'll walk you through a few elements and describe their
semantic meaning (and similar structural meaning); then, we'll have you
research some elements on your own.

Emphasized text
This, by the way, is a phrase tag; it may change what you see the same way as other tags, but
it's designed for a specific purpose.
Renders on the browser as italicized text
Use CSS to add additional effects

Software development is a craft that one must work to develop

Another phrase tag, shows that text is important
Renders on the browser as bold text
Use CSS to add additional effects

Developers develop software that develops their skillsets

Go forth and research!
Pair up and research one of the following elements:
blockquote
cite
q
abbr
dfn
del
ins
Resources and Questions
Check out Google and/or www.W3Schools.com
to learn more about your element. Answer the following
questions:
What does it mean?
How is it rendered in the browser? Is there another tag that looks similar?
Did anything change between HTML4.01 and HTML5?

Specifies section quoted
Usually renders on browsers as indented text
In HTML4.01, defines a long quote
In HTML5, defines a quote from another source

With attributes like elegant, creative, long-termed, and seeing the
forest and the trees, our results indicate that good software
engineering requires engineers to make complex, experienced-driven,
contextual considerations.

Citation (HTML4.01)
HTML5 defines this as the title of the quote/work.
Renders on the browser as italicized text
Can be added to the head tag of a blockqote, but it won't be visible
on the page.

Lots of the apps we build require creating forms that are both
beautiful and easy for people to use. So, let's learn about forms.
Most of the following elements can and are often used within the <form> element.
<input />
Empty element
Defines field where user can input data
Can be used within <form> element
Input type varies based on attributes...
type="text"
Defines one line of text input
Renders as a rectangle
Can be used with the name attribute to name the field
Must be used within a <form>
type="password"
Defines a password field
Renders as a rectangle
Renders text inputted as asterisks * or circles •
Must be used within a <form>
type="submit"
Defines button for submitting data to form-handler
Renders as a button with a text value label
If no value is added it renders default value of "submit"
Must be used within a <form>
type="button"
Defines button
Renders as a button with a text value label
Does not have to be used within a <form>
name=""
Defines the name of the input element
Used to reference elements in JavaScript
Only elements with a name will have values passed when a form is submitted.
Input Restrictions
To make sure things don't get out of hand...
you can add restrictions to your input elements.
(The following are also attributes of <input />)
maxlength=""
Defines the maximum length of characters that can be entered
into an input element
size=""
Defines the width (in characters) that can be entered
into an input element
If your size is too small, the browser will not display
all the entered text.
<textarea></textarea>
Defines multi-line text input control
Holds unlimited number of characters
Text added to the tags will render inside the box
Renders fixed width font
Use attribute cols to set a value for the visible width
Use attribute rows to set visible number of lines
try{addToHelloWorld();}
Add an <input> to your helloWorld.html file
Add a <textarea> to your helloWorld.html file
try{addToHelloWorld();}
Add an input type="radio" to your helloWorld.html file
Add an input type="checkbox" to your helloWorld.html file
You can have a preselected radio or checkbox by adding the checked
attribute to the input element
You don’t have to include an image. Without one, the button
will render with the text inside the element. Images render
to the left of any text. Try adding a button to your file.
Goals
Paging Dr. Dev
Page Navigation
You can link to another page within the same project
by using a relative URL.
The browser starts by looking in the folder you're currently inside of.
The href value will just be the name of the file if it's located
in the same folder.

Create a new HTML file in the HelloWorld folder
Save file as HelloAgainHTML.html
Copy code from HelloWorldHTML.html and paste it into HelloAgainHTML.html
Make some changes...
Add a link inside HelloWorldHTML.html to HelloAgainHTML.html
Directory Structure
You can use links to navigate up and down in file structures
To go up/out/higher, use
../
To go down/in/lower, use
/
If this is your file structure...
How would you access textAdventure.css from textAdventure.html?
href="css/textAdventure.css"
If this is your file structure...
How would you access textAdventure.css from textAdventureCopy.html?


Generate HTML slides
-
code to generate HTML slides from the input files
2
@Add(global elements)
@Put(needed by write_html)
void write_html() {
for (auto &cur : inputs) {
@put(write cur HTML file)
}
}
@End(global elements)
3
@Def(write HTML file)
if (html_files) {
write_html();
}
@end(write HTML file)
-
generate HTML slides, if they should be generated
4
@def(write cur HTML file)
const std::string &name { cur.first };
auto ext { name.rfind('.') };
if (ext == std::string::npos) {
ext = name.size();
}
std::string outPath { name.substr(0, ext) + ".html" };
std::ofstream out { outPath.c_str() };
@put(write cur HTML file to out)
out.close();
@end(write cur HTML file)
-
the name of the HTML slides results from replacing the extension of the input file by
.html
5
@def(write cur HTML file to out)
@put(write from in to out)
@end(write cur HTML file to out)
-
write HTML to the just opened
std::ofstream
out
6
@Def(needed by write_html)
enum class HtmlState {
nothing,
inSlide,
afterSlide,
afterSlides
@put(html state enums)
};
@end(needed by write_html)
-
the
HtmlState
keeps track which part of a block is currently written
-
each input file must start with a header so that the HTML header can be written
7
@Add(needed by write_html)
struct HtmlStatus {
@put(html state elements)
};
@end(needed by write_html)
-
the current status needs more information besides the state
8
@def(html state elements)
HtmlState state = HtmlState::nothing;
@end(html state elements)
-
the state is part of the status
9
@Add(includes)
#include <string>
@end(includes)
10
@def(write from in to out)
HtmlStatus status;
int slide_nr { 0 };
for (const auto &b : cur.second.blocks) {
@put(process block)
}
@end(write from in to out)
11
@def(process block)
if (b.state == RS::header) {
@put(process header)
}
@end(process block)
12
@add(process block)
if (b.state == RS::code) {
@put(open code page)
for (const auto &code : b.value) {
@put(process code)
}
@put(close code page)
if (! b.notes.empty()) {
for (const auto ¬e : b.notes) {
@mul(process note)
}
} else {
out << "

\n";
}
@mul(close specials)
@mul(close slide)
}
@end(process block)
13
@add(process block)
if (b.state == RS::para) {
for (const auto ¶ : b.value) {
@put(process para)
@mul(close specials)
}
@mul(close specials)
}
@end(process block)
14
@def(close slide)
out << "
\n";
status.state = HtmlState::afterSlide;
@end(close slide)
-
writes a

that closes a slide
-
and adjusts the state
Headings
16
@def(process header)
@put(close previous HTML page)
@mul(write header tag)
out << "
\n";
out << "
\n";
out << "
";
@mul(slide nr)
out << "
\n";
@mul(write header tag)
if (b.value.size() > 1) {
out << "
\n";
for (unsigned i = 1; i < b.value.size(); ++i) {
bool hidden { b.value[i][0] == '-' };
out << "<li";
if (hidden) {
out << " class=\"hidden\"";
}
out << "><h" << (b.level + 1) << '>';
const auto &n = b.value[i];
auto bg { n.begin() };
if (hidden) { ++bg; }
process_content(out, bg, n.end());
out << "</h" << (b.level + 1) << ">
\n";
}
out << "
\n";
}
out << "

\n";
status.state = HtmlState::inSlide;
@end(process header)
-
headers start a new slide group
-
before the slide group a HTML heading is written
-
the slide group starts with a slide that contains the heading
17
@add(process header)
for (const auto ¬e : b.notes) {
@mul(process note)
}
@mul(close specials)
@mul(close slide)
@end(process header)
-
add notes for the header
-
and close the slide
18
@Add(needed by write_html)
void writeOneEscaped(std::ostream &out, char ch) {
switch (ch) {
@put(escape special)
default:
out << ch;
}
}
@end(needed by write_html)
-
writes a character in the HTML output
-
special characters are escaped
19
@Add(needed by write_html)
void writeEscaped(std::ostream &out, const std::string &str) {
for (char ch : str) {
writeOneEscaped(out, ch);
}
}
@End(needed by write_html)
-
writes multiple characters in the HTML outputs
-
by calling the single character version
20
@def(escape special)
case '<':
out << "<";
break;
case '>':
out << ">";
break;
case '&':
out << "&";
break;
@end(escape special)
-
the characters
<
, >
, and &
are replaced by their entities
21
@Add(needed by write_html)
@put(process code helper)
void process_code(std::ostream &out, SI begin, SI end) {
@put(do code)
}
@end(needed by write_html)
-
writes a line of source code
-
this is used in code blocks
-
and in normal text that contains embedded code (e.g. in the notes or headings)
22
@Add(needed by write_html)
void process_content(std::ostream &out, SI begin, SI end) {
@put(process content line)
}
@end(needed by write_html)
-
writes normal Markdown content to HTML
-
embedded code is pretty printed
23
@def(write header tag) {
out << "<h" << b.level << '>';
const auto &n = b.value[0];
process_content(out, n.begin(), n.end());
out << "</h" << b.level << ">\n";
} @end(write header tag)
-
writes a HTML header tag of the right level
24
@def(close previous HTML page)
switch (status.state) {
case HtmlState::nothing:
@put(write HTML header)
break;
case HtmlState::inSlide:
out << "
\n";
// fallthrough
default:
out << "
\n";
}
@end(close previous HTML page)
-
closes the current slide
-
and the current slide group
-
at the beginning of the document the HTML header is written
25
@def(write HTML header)
out << "<!doctype html>\n";
out << "\n";
out << "\n";
@put(write HTML header entries)
out << "\n";
out << "\n";
@end(write HTML header)
-
write HTML header and opens the

tag
26
@def(write HTML header entries)
out << "<meta charset=\"utf-8\">\n";
out << "<title>";
writeEscaped(out, b.value[0]);
out << "</title>\n";
out << "<link rel=\"stylesheet\" type=\"text/css\" href=\"" <<
stylesheet << "\">";
@end(write HTML header entries)
-
the document is encoded in
UTF-8
-
the first header of the input file is also the
<title>
of the HTML document
-
also include a stylesheet
Format Code
28
@def(html state enums)
, inCode
@end(html state enums)
-
special state to format code
29
@def(open code page)
if (status.state == HtmlState::afterSlides) {
out << "
\n";
}
@end(open code page)
-
close a previous slide, if it is open
30
@add(open code page)
if (status.state == HtmlState::inSlide) {
out << "
\n";
}
out << "

";
@mul(slide nr)
out << "\n\n";
status.state = HtmlState::inCode;
@end(open code page)
-
a code slide contains one big

tag
-
and sets the current state
31
@def(close code page)
out << "
\n";
status.state = HtmlState::afterSlide;
@end(close code page)
-
closes

tag when the slide is closed
32
@add(write from in to out)
if (status.state == HtmlState::inCode) {
std::cerr << "unterminated code block\n";
}
@end(write from in to out)
-
it is an error, if the code block was not closed at the end of a file
33
@add(write from in to out)
if (status.state != HtmlState::nothing) {
out << "\n\n";
}
@end(write from in to out)
-
closes the

tag at the end of the input file
-
if some output was written
34
@def(process code)
process_code(out, code.begin(), code.end());
out << "
\n";
@end(process code)
-
processes code in a code slide
-
write the code and adds a new line
35
@def(do code)
int indent = 0;
while (begin != end && *begin == '\t') {
++indent; ++begin;
}
if (indent) {
out << "<span class=\"in" << indent << "\">";
}
@end(do code)
-
counts the tab stops at the beginning of the line
-
an

for the indentation is written
36
@add(do code)
for (; begin != end; ++begin) {
@put(process code ch)
writeOneEscaped(out, *begin);
}
@end(do code)
-
process each character
-
if their is no special treatment, copy it to HTML
37
@def(process code ch)
if (*begin == '`' || *begin == '\'' || *begin == '"') {
@put(process string)
continue;
}
@end(process code ch)
-
treat the next characters as a string
38
@def(process string)
auto w = begin + 1;
while (w != end && *w != *begin) {
if (*w == '\\') {
++w;
if (w == end) { break; }
}
++w;
}
if (w == end) {
writeOneEscaped(out, *begin);
continue;
}
@end(process string)
-
search for the end of the string
-
watch out for escape characters on the way
-
if no end is found, then treat the first character as an ordinary character
39
@def(process code helper)
void span_str(std::ostream &out, const char *cls, const std::string &s) {
out << "<span class=\"" << cls << "\">";
writeEscaped(out, s);
out << "";
}
@end(process code helper)
-
writes a

with the given class around a string
40
@add(process string)
std::string name { begin, w + 1 };
span_str(out, "str", name);
begin = w;
@end(process string)
41
@add(process code ch)
if (*begin == '@') {
auto nb = begin + 1;
auto ne = nb;
@put(process cmd)
}
@end(process code ch)
42
@def(process cmd)
while (ne != end && *ne != '(') {
if (! isalpha(*ne)) {
ne = end;
break;
}
++ne;
}
@end(process cmd)
-
check that the command name only consists of letters
-
and ends with an open parenthesis
43
@add(process cmd)
if (ne != end) {
std::string name {nb, ne};
auto ab = ne + 1;
auto ae = ab;
@put(macro loop)
}
@end(process cmd)
-
if a command is found, parse its argument
44
@def(macro loop)
while (ae != end && *ae != ')') {
if (*ae == '@') {
++ae;
if (ae == end) { break; }
}
++ae;
}
if (ae != end) {
std::string arg {ab, ae};
@put(got macro)
continue;
}
@end(macro loop)
-
if a command argument is parsed, the command is parsed
45
@def(got macro)
do {
@put(special macro)
@put(macro default)
} while (false);
begin = ae;
@end(got macro)
-
special commands can change the formatting and are processed first
-
if the command is not special, it will be copied to HTML with some warning
46
@def(macro default)
writeOneEscaped(out, '@');
writeEscaped(out, name);
writeOneEscaped(out, '(');
writeEscaped(out, arg);
writeOneEscaped(out, ')');
@end(macro default)
-
write error message
-
and copy command to HTML
47
@def(special macro)
static Set macros = {
"def", "end", "add", "put", "mul", "Def",
"Add", "Mul", "rep", "Rep", "Put", "End"
};
@end(special macro)
48
@add(special macro)
if (macros.find(name) != macros.end()) {
writeMacroHeader(out, name);
writeEscaped(out, arg);
out << ")";
break;
}
@end(special macro)
-
fragment commands are copied with pretty printing to HTML
49
@add(special macro)
if (name == "inc") {
@put(write include)
break;
}
@end(special macro)
-
include commands are treated special
50
@def(write include)
auto ext = arg.find_last_of('.');
if (ext == std::string::npos) {
ext = arg.size();
}
writeMacroHeader(out, name);
out << "<a href=\"" << arg.substr(0, ext) << ".html\">";
out << arg << ")";
@end(write include)
-
includes also contain a link to the referenced file
51
@add(special macro)
if (name == "s" || name == "str") {
writeMacroClass(out, "str");
for (auto x = arg.begin();; ++x) {
if (*x == '@') {
++x;
}
if (x == arg.end()) { break; }
writeOneEscaped(out, *x);
}
out << "";
break;
}
@end(special macro)
-
format the argument as string
52
@add(special macro)
if (name == "f" || name == "fn") {
writeMacroClass(out, "fn");
writeEscaped(out, arg);
out << "";
break;
}
@end(special macro)
-
format the argument as a function
53
@add(special macro)
if (name == "v" || name == "var") {
writeMacroClass(out, "var");
writeEscaped(out, arg);
out << "";
break;
}
@end(special macro)
-
format the argument as a variable
54
@add(special macro)
if (name == "k" || name == "key") {
writeMacroClass(out, "keyword");
writeEscaped(out, arg);
out << "";
break;
}
@end(special macro)
-
format the argument as a keyword
55
@add(special macro)
if (name == "n" || name == "num") {
writeMacroClass(out, "num");
writeEscaped(out, arg);
out << "";
break;
}
@end(special macro)
-
format the argument as a numeric value
56
@add(special macro)
if (name == "t" || name == "typ") {
writeMacroClass(out, "type");
writeEscaped(out, arg);
out << "";
break;
}
@end(special macro)
-
format the argument as a type
57
@add(special macro)
if (name == "b" || name == "br") {
writeMacroClass(out, "virt");
out << "";
break;
}
@end(special macro)
-
create a line break in the HTML output
-
the generated source code does not contain this line break
58
@add(special macro)
if (name == "priv") {
writeMacroClass(out, "var");
out << "@priv(";
writeEscaped(out, arg);
out << ")";
break;
}
@end(special macro)
-
@priv
commands are formatted specially in the HTML output
59
@add(special macro)
if (name == "magic") {
writeMacroClass(out, "num");
out << "@magic(";
writeEscaped(out, arg);
out << ")";
break;
}
@end(special macro)
-
@magic
commands are formatted specially in the HTML output
60
@Add(includes)
#include <cctype>
@end(includes)
61
@add(process code ch)
auto w = begin;
@put(find identifier end)
if (w != begin) {
@put(process identifier)
continue;
}
@end(process code ch)
-
checks if at the current position is an identifier
62
@def(find identifier end)
while (w != end && (
std::isalnum(*w) || *w == '_' || *w == '$' || *w == '#'
)) {
++w;
}
@end(find identifier end)
-
alphanumeric characters can form an identifier
-
also
_
, $
and #
are valid parts of an identifier
63
@def(process identifier)
std::string ident {begin, w};
begin = w - 1;
process_ident(out, ident, w != end ? *w : ' ');
@end(process identifier)
-
the new input is one before the end of the identifier
-
because the loop will increment it
64
@Add(includes)
#include <set>
@end(includes)
65
@add(process code helper)
using Set = std::set<std::string>;
@end(process code helper)
-
shorthand for the used
std::set
66
@add(process code helper)
bool isKeyword(const std::string &s) {
static Set reserved { @put(keywords) };
return reserved.find(s) != reserved.end() ||
(s.size() && s[0] == '#');
}
@end(process code helper)
-
checks if identifier is a known keyword
67
@def(keywords)
"break", "case", "catch", "continue", "default", "delete",
"do", "else", "for", "if", "in", "inline", "new", "return",
"static", "switch", "try", "typeof", "while", "class", "public",
"private", "template", "typename", "using", "function", "throw",
"namespace", "once", "constexpr", "volatile", "override"
@end(keywords)
68
@add(process code helper)
bool isType(const std::string &s) {
@put(is type)
return false;
}
@end(process code helper)
-
checks if identifier is a type
69
@def(is type)
static Set reserved { @put(types) };
if (reserved.find(s) != reserved.end()) {
return true;
}
@end(is type)
-
an identifier is a type, if it is one of the known types
70
@def(types)
"FILE", "auto", "bool", "char", "const", "enum",
"extern", "int", "let", "long", "signed", "struct",
"union", "unsigned", "void", "double", "string",
"std", "ifstream", "istream", "ofstream", "ostream",
"vector", "map", "list", "float"
@end(types)
71
@add(is type)
if (s.size() >= 2) {
if (isupper(s[0]) && islower(s[1])) {
return true;
}
}
@end(is type)
-
an identifier is a type if it contains both an upper case and lower case letter
72
@add(process code helper)
bool isNum(const std::string &s) {
static Set reserved {
"EOF", "NULL", "nullptr", "false", "null", "true",
"undefined"
};
if (std::isdigit(s[0])) { return true; }
return reserved.find(s) != reserved.end();
}
@end(process code helper)
-
an identifier is a numeric value if it starts with a digit
-
or is one of the known numeric values
73
@add(process code helper)
void process_ident(std::ostream &out, const std::string ident, char w) {
@put(process ident)
}
@end(process code helper)
74
@def(process ident)
if (isKeyword(ident)) {
span_str(out, "keyword", ident);
} else if (w == '(') {
span_str(out, "fn", ident);
@put(special ident classes)
} else {
span_str(out, "var", ident);
}
@end(process ident)
-
keywords are directly recognized
-
an identifier is a function, if it is followed by
(
-
the default type for an identifier is a variable
75
@def(special ident classes)
} else if (isType(ident)) {
span_str(out, "type", ident);
} else if (isNum(ident)) {
span_str(out, "num", ident);
@end(special ident classes)
-
types and numeric values are formatted, if the identifier is neither keyword nor function
76
@add(process code helper)
void writeMacroClass(std::ostream &out, const char *name) {
out << "<span class=\"" << name << "\">";
}
@end(process code helper)
-
opens

tag with a given class for a command
77
@add(process code helper)
void writeMacroHeader(std::ostream &out, const std::string &name) {
writeMacroClass(out, "macro");
out << '@' << name << "(";
}
@end(process code helper)
Notes
-
notes are part of a page, but not part of a slide
79
@add(html state enums)
, inNotes
@end(html state enums)
80
@def(close specials)
if (status.state == HtmlState::inNotes) {
out << "

\n";
}
@end(close specials)
-
if output was in notes state, the list is closed
81
@def(process note)
auto end = note.end();
auto begin = note.begin();
@end(process note)
82
@add(process note)
if (status.state != HtmlState::inNotes) {
@put(switch into note mode)
} else {
out << "

\n";
}
process_content(out, begin, end);
out << '\n';
@end(process note)
-
switch into note state, if it is not the current state
-
otherwise open a new list entry
-
and write note
83
@def(switch into note mode)
if (status.state != HtmlState::inSlide &&
status.state != HtmlState::afterSlide
) {
out << "
\n";
}
status.state = HtmlState::inNotes;
out << "

\n";
@end(switch into note mode)
-
create a new page, if no page is open
-
open list
84
@def(process content line)
for(; begin != end; ++begin) {
@put(special content line)
writeOneEscaped(out, *begin);
}
@end(process content line)
-
go through the line character by character
-
if no special treatment happens, the character is copied to the HTML output
85
@def(special content line)
if (*begin == '`') {
@put(inline code)
}
@end(special content line)
86
@def(inline code)
auto w = begin + 1;
while (w != end && *w != '`') {
++w;
}
if (w != end) {
out << "";
process_code(out, begin + 1, w);
out << "";
begin = w;
continue;
}
@end(inline code)
-
if a closing tick is found, format the code with
process_code
87
@add(special content line)
if (*begin == '*' && (begin + 1) != end && *(begin + 1) == '*') {
@put(bold block)
}
@end(special content line)
88
@def(bold block)
auto w = begin + 2;
while (w != end && (w + 1) != end && (*w != '*' || *(w + 1) != '*')) {
++w;
}
@end(bold block)
-
search for the closing mark
89
@add(bold block)
if (w != end && (w + 1 ) != end && *w == '*' && *(w + 1) == '*') {
@put(do bold)
continue;
}
@end(bold block)
-
if end mark is found, format bold
90
@def(do bold)
out << "";
writeEscaped(out, std::string {begin + 2, w});
out << "";
begin = w + 1;
@end(do bold)
Paragraphs
-
format paragraphs between slide groups
92
@add(html state enums)
, inPara
@end(html state enums)
-
special state for paragraphs
93
@add(close specials)
if (status.state == HtmlState::inPara) {
out << "
\n";
status.state = HtmlState::afterSlides;
}
@end(close specials)
-
close paragraph if necessary
94
@def(process para)
if (status.state == HtmlState::afterSlide) {
out << "
\n";
}
@end(process para)
95
@add(process para)
if (status.state != HtmlState::inPara) {
out << "
";
status.state = HtmlState::inPara;
}
process_content(out, para.begin(), para.end());
out << '\n';
@end(process para)
-
open paragraph
-
process content with embedded code
96
@add(process block)
if (b.state == RS::img) {
@put(open img page)
for (const auto &img : b.value) {
@put(process img)
}
for (const auto ¬e : b.notes) {
@mul(process note)
}
@mul(close specials)
@mul(close slide)
}
@end(process block)
97
@def(open img page)
if (status.state == HtmlState::afterSlides) {
out << "
\n";
}
status.state = HtmlState::inSlide;
@end(open img page)
-
close a previous slide, if it is open
98
@def(process img)
out << "

";
@mul(slide nr)
out << "\n<img src=\"" << img << "\">\n";
out << "
\n";
@end(process img)
99
@def(slide nr)
out << "
" << ++slide_nr << "
";
@end(slide nr)


| DOSE: |
3.0 g |
oral |
Coca |
(tea) |
Roughly a year ago I purchased a box of pure natural coca leaf tea bags from a respectable company in Peru. I was pleased that the result was a pleasant, energized feeling without any feeling of being under the influence of any drugs. Indeed, the feeling was much better than caffeine without jitteriness or upset stomach.
Over time, I typically drank 2 to 4 tea bags (2-4 grams) per day and noticed several health benefits. I fruequently suffer heaches, fatigue, and painful bowel syndrome including IBS and diverticulitis. What I noticed afeter several days of use was that my symptoms of discomfort were gone. I eventually finished the box of tea and suffered no cravings or rebound irritability. I felt fine, so I forgot about the coca tea. Obviously this tea had no addictive effect whatsoever for me, although there is supposd to be a very small amount of natural cocaine alkaloid in the tea.
This year I again had a severe case of diverticulitis treated with heavy duty antibiotics and prescribed narcotic painkillers. Although I minimized the dosage of the vicodin to last a while, when I ran out of Vicodin I became irritable, with headaches and moderate to severe Irritable bowel Syndrome, which I assure anyone who has never experienced, can be excruciating. Instead of getting more vicodin, I decided to take regular tylenol and order coca tea once again.
Two days ago I received the tea bags and began with 3 bags (3 grams coca leaf) followed 5 hours later with two tea bags. I followed this again today and my internal pain is 90% relieved and I feel less irritable and less exhausted. It seems obvious to me that coca leaf tea in its natural state is safer and more beneficial than coffee, tea, or even Vicodin for that matter. This herbal medicine ought to be more fully respected and seen as a completely different substance from the purified drug cocaine.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Getting started with adding security features after configuring your Fedora server.
Additional Recommendations for New Servers - Fedora
Difficulty: 1
Time: 10 minutes
After installing Fedora, you can configure some additional components. These recommended steps increase security and make your operating system work better.
This article guides you through setting up a firewall and synchronizing Network Time Protocol.
If you haven't already set up your server, see Initial Server Setup - CentOS for instructions, including setting up user accounts.
Make sure to set up a user account with sudo
privileges.
Set up a basic firewall
Fedora includes a firewall tool called firewalld
, a dynamically managed Linux firewall.
You'll use firewall-cmd
to configure your firewall policies. The firewall-cmd
command can make modifications without losing any of your current connections.
Turn on the firewall
- Check the status of your firewall to see if it's running.
systemctl status firewalld
Or, obtain an abbreviated status report.
firewall-cmd --state
- If the status is inactive, turn on your firewall.
sudo systemctl start firewalld
-
(Fedora 20 only) If you receive the error
"Failed to issue method call: Unit firewalld.service is masked
," then unmask the firewall.
sudo systemctl unmask firewalld
The following output indicates that the firewall was successfully unmasked:
'/etc/systemd/system/firewalld.service'
Turn on your firewall again.
Create firewall rules
Define exceptions to your firewall policy so that you can activate your firewall.
- Create an exception for secure shell (SSH) connections to get remote administration access:
- If you have not modified the SSH port, enable the exception.
sudo firewall-cmd --permanent --add-service=ssh
-
If you have modified the port that the SSH daemon listens on, allow it by entering the port number and TCP protocol. Make sure that you've first restarted your SSH server to use the new port.
sudo firewall-cmd --permanent --remove-service=ssh
sudo firewall-cmd --permanent --add-port=4444/tcp
This firewall is the strictest configuration, so every incoming connection is denied except for the port just enabled. All other services will be inaccessible. To run an additional service, make sure to open the firewall for that portion.
- Open the firewall as needed.
The following commands add some common services and open their respective ports:
- To run a standard HTTP web server, allow incoming HTTP traffic.
sudo firewall-cmd --permanent --add-service=http
- To run an SSL/TLS-enabled web server, allow for HTTPS traffic.
sudo firewall-cmd --permanent --add-service=https
- To enable your SMTP email connection, enable the SMTP service.
sudo firewall-cmd --permanent --add-service=smtp
- Optionally, view any additional services that you can enable by name.
sudo firewall-cmd --get-services
If you want to add any of these services, you can use this command:
sudo firewall-cmd --permanent --add-service=service
- To review your exceptions, run the
list-all
command.
sudo firewall-cmd --permanent --list-all
Reload and enable the firewall
You're now ready to activate the changes.
- Reload the firewall.
sudo firewall-cmd --reload
- Enable the firewall.
sudo systemctl enable firewalld
The firewall starts automatically at startup.
If you configure additional services later, make sure to open those respective ports.
Synchronize Network Time Protocol
Localize your server by configuring the Network Time Protocol (NTP) synchronization.
When different computer or server programs with out-of-sync clocks communicate with each other, switching between these systems can cause the time to jump back and forth. This jumping can result in undesirable effects such as email replies appearing to arrive before the original message is sent.
To resolve this issue, set your correct time zone, and then synchronize the system clock to the standard time maintained by a global network of NTP servers.
Configure Time Zones
- Set your server's time zone.
sudo timedatectl list-timezones
- In the resulting (long) list, find your region (of your server) and include it your command.
sudo timedatectl set-timezone your region/geographic area
For example, if you live in Los Angeles:
sudo timedatectl set-timezone America/Los_Angeles
Your system updates to your selected timezone.
- Optionally, confirm the timezone.
sudo timedatectl
Configure NTP synchronization
Next, configure your Network Time Protocol (NTP). NTP is an Internet protocol that synchronizes time of computer clocks across the Internet and helps to determine when events happened between systems. NTP works by a client requesting the current time from an NTP server and then using the server's response to set its own clock. Afterward, your computer is accurately synced with networked time servers.
-
Install the NTP daemon.
sudo yum install ntp
-
Enter y at the prompt to continue.
- Enable NTP.
sudo systemctl start ntpd
sudo systemctl enable ntpd
NTP synchronization is now active on your server. This means that your system will adjust the time throughout the day to match up with global NTP servers.
Next steps
Your setup is complete! Remember that you can always add on to your configuration as you add more services.
If you like this configuration, you can take a server snapshot to use as a guide for setting up future installations.
Also, consider adding swap space. Adding swap space is an easy way to increase cloud server performance and is particularly helpful if you host databases on your system.


Welcome to the NBA Player Guesser!
Enter your username here:
What game would you like to play?
Player by images
Player by jersey number
Join Game


Invite sent to<EMAIL_ADDRESS>{% include "includes/account-name-number.html" %}Team members
This is the list of people who can access this account or have been invited to be a team member on this account.
| Team member | Email address | Role | Status | |
|---|---|---|---|---|
| Brendan McShane |<EMAIL_ADDRESS>| Viewer | Pending | View |
| Rob Edwards |<EMAIL_ADDRESS>| Owner | Pending | View |
| Susan Hamazaki |<EMAIL_ADDRESS>| Transactor | Active | View |
| David Jenkins |<EMAIL_ADDRESS>| Viewer | Pending | View |
| Mel O'Connor |<EMAIL_ADDRESS>| Transactor | Active | View |


xmake is a lightweight cross-platform build tool based on Lua. It uses xmake.lua to maintain project builds. Compared with makefile/CMakeLists.txt, the configuration syntax is more Concise and intuitive, very friendly to novices, can get started quickly in a short time, allowing users to focus more on the actual project development.
In this new version, we have made full platform support for the Intel series of C++ and Fortran compilers, and improved the Wasm tool chain support added in the previous version, and also supported the Qt SDK for Wasm.
In addition, we have also upgraded luajit to the latest v2.1 version. In terms of cross-platform, xmake has also made great improvements and added support for mips64 architecture.
New feature introduction
Add Intel C++ Compiler support
On this version, we have made full platform support for the Intel series of C++ compilers, including icl on windows and icc/icpc under linux/macOS.
To enable the Intel C++ compiler, we only need to switch to the corresponding toolchain through the --toolchain=icc
parameter on the system where the Intel compiler is installed.
$ xmake f --toolchain=icc
$ xmake
Add Intel Fortran Compiler support
In the previous version, xmake only supported the gfortran compiler. In this version, we also support the Intel Fortran compiler, which is ifort. We only need to switch to the corresponding ifort tool chain to use it.
$ xmake f --toolchain=ifort
$ xmake
Add Wasm platform and Qt/Wasm support
In the last version, we added the --toolchain=emcc
toolchain to support the compilation of wasm programs, but just specifying the toolchain does not adjust the extension of the target program well, for example, for *.js
and The file of *.wasm
is generated.
In the new version, we continue to add the xmake f -p wasm
platform, the built-in emcc tool chain is enabled, and the surrounding configuration has been improved again based on it.
As long as you switch to the wasm platform, xmake will generate *.js
and corresponding *.wasm
and other target files by default, and additionally generate *.html
pages that can load js to run the wasm program.
In addition, we also support Qt SDK for Wasm, for example, we create a Qt QuickApp project.
$ xmake create -t qt.quickapp_static quickapp
Here, we noticed that what we created is a Qt project that requires a static link. Because of the wasm version of the Qt library, we need to force a static link to the program to use it normally.
The content of the generated project file xmake.lua is roughly as follows:
add_rules("mode.debug", "mode.release")
includes("qt_add_static_plugins.lua")
target("demo")
add_rules("qt.quickapp_static")
add_headerfiles("src/*.h")
add_files("src/*.cpp")
add_files("src/qml.qrc")
add_frameworks("QtQuickControls2", "QtQuickTemplates2")
qt_add_static_plugins("QtQuick2Plugin", {linkdirs = "qml/QtQuick.2", links = "qtquick2plugin"})
qt_add_static_plugins("QtQuick2WindowPlugin", {linkdirs = "qml/QtQuick/Window.2", links = "windowplugin"})
qt_add_static_plugins("QtQuickControls2Plugin", {linkdirs = "qml/QtQuick/Controls.2", links = "qtquickcontrols2plugin"})
qt_add_static_plugins("QtQuickTemplates2Plugin", {linkdirs = "qml/QtQuick/Templates.2", links = "qtquicktemplates2plugin"})
In the above configuration, in addition to enabling the qt.quickapp_static
compilation rules, we also configure some necessary Qt plugins through qt_add_static_plugins
.
Next, we only need to switch to the wasm platform and make sure that the Qt SDK is set to complete the compilation.
$ xmake f -p wasm [--qt=~/Qt]
$ xmake
After the compilation is completed, xmake will generate demo.html and the corresponding demo.js/demo.wasm program in the build directory. We can open the demo.html page to run the Qt program we compiled. The display effect is as follows:
For a more detailed description of Qt/Wasm, see: Issue #956
Add Math/Float-point compilation optimization settings
We have added a new set_fpmodels()
setting interface, which is used to set the floating-point compilation mode and the compilation abstraction settings for the optimization of mathematical calculations. It provides several commonly used levels such as fast, strict, except, precise, and some Set at the same time, some conflicts, the last setting takes effect.
For the description of these levels, you can refer to the Microsoft document: Specify floating-point behavior
Of course, for other compilers such as gcc/icc, xmake will map to different compilation flags.
set_fpmodels("fast")
set_fpmodels("strict")
set_fpmodels("fast", "except")
set_fpmodels("precise") - default
For details on this, see: Issue #981
Add OpenMP Support
In order to enable the openmp feature more abstractly and simply, we can set it through the newly added c.openmp
and c++.openmp
rules. In addition, we need additional libomp libraries on linux and macOS, so we can pass ʻAdd_requires(“libomp”)` for quick reference and integration.
add_requires("libomp", {optional = true})
target("loop")
set_kind("binary")
add_files("src/*.cpp")
add_rules("c++.openmp")
add_packages("libomp")
If it is c code, you need to enable ʻadd_rules(“c.openmp”)`. If it is c/c++ mixed compilation, then these two rules must be set.
Add c11/c17 support
In the new version, xmake has also made improvements to set_languages
, adding new c11/c17 settings, and at the same time adapting and adapting /std:c11
and /std:c17
provided by the latest version of msvc. stand by.
We only need simple settings:
set_languages("c17")
You can enable the c17 standard to compile, even if the lower version of msvc and other compilers do not support it, xmake will automatically ignore the settings.
Better Mingw support
Regarding this improvement, several aspects are involved. The first is the improvement of the automatic detection of the Mingw SDK root directory under Windows. In most cases, we do not need to configure the --mingw=
parameter to specify the path explicitly, and it can also It was automatically detected.
For details on this, see: Issue #977
In addition, in addition to Msys2/Mingw as well as macOS, linux/Mingw, we additionally support llvm-mingw this SDK in the new version, so that we can use mingw to compile the program of arm/arm64 architecture.
$ xmake f -p mingw -a arm64
$ xmake
In addition, in the automatic compilation and integration of remote dependency packages, there are now third-party libraries with cmakelists. Even on the mingw platform, xmake can be automatically compiled and integrated for direct use, which is very fast and convenient.
Recently, in the xmake-repo official C/C++ package repository, we have also added a lot of new libraries that support the mingw platform, which can be used directly .
Better cross-platform operation
We have added support for mips64-based Linux system operation, and improved the stability of xmake under arm/arm64. By incorporating the latest luajit v2.1, we have solved many problems left by luajit, such as the bad of lightuserdata under arm64. Pointer and other issues.
Add macOS Sierra for arm64 support
xmake has also adapted the latest Xcode-beta, and added macOs for arm64 target program compilation support, just switch to the arm64 architecture compilation.
$ xmake f -a arm64 [--xcode=Applications/Xcode-beta.app/]
$ xmake
Of course, the premise is to run under macOS and use the latest Xcode-beta version that supports the Developer Transition Kit (DTK).
Add more C/C++ libraries for the official repository
In the official C/C++ repository of xmake xmake-repo, we have recently added dozens of commonly used C/C++ libraries, and also The libraries of the libx11 series are all included.
Although the warehouse package maintenance workload is huge, the current development trend is also becoming more and more active. We have received more and more users’ contributions and improved maintenance to the warehouse package.
And, now our official warehouse can be quickly integrated: linux, macOS, windows, mingw, bsd, msys, iphoneos, android and other eight common platform libraries, to achieve true cross-platform C/C++ remote dependency library integration and use support.
Currently we have included a list of some packages and supporting platforms, you can view from here: PKGLIST.md
We have been working hard to solve the problems of messy C/C++ library ecology and cumbersome integration and use, and provide quick and consistent automatic integration and compilation solutions. xmake not only supports the integration of third-party official warehouse packages such as vcpkg/conan/clib/homebrew, but also We are working hard to improve our self-built official warehouse to achieve a better integrated experience.
for example:
add_requires("tbox >1.6.1", "libuv master", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8")
add_requires("conan::openssl/1.1.1g", {alias = "openssl", optional = true, debug = true})
target("test")
set_kind("binary")
add_files("src/*.c")
add_packages("tbox", "libuv", "vcpkg::ffmpeg", "brew::pcre2/libpcre2-8", "openssl")
Packages with namespaces such as vcpkg::
, brew::
and conan::
will automatically switch to the corresponding third-party package warehouse to download and integrate, and the default tbox >1.6.1
etc. Library, the package provided in the official xmake-repo repository will be used by default.
The usage and integration methods are exactly the same, xmake will automatically download, compile, integrate and link.
For more detailed instructions on the dependency integration of remote packages, we can look at the relevant documentation: Remote dependency library integration and use
At the same time, we also welcome more people to participate to help improve the construction of the C/C++ library ecology, and provide a concise and consistent library experience. I believe that C/C++ package management and library ecology are not worse than Rust/Go.
More release version installation support
In the new version, we submitted xmake to the Ubuntu PPA source, so in addition to the existing script installation method, we can also quickly install xmake through apt.
sudo add-apt-repository ppa:xmake-io/xmake
sudo apt update
sudo apt install xmake
At the same time, we also submitted the package to the Copr package management repository, so that we can also quickly install xmake through dnf in Fedora, RHEL, OpenSUSE, CentOS and other distributions.
sudo dnf copr enable waruqi/xmake
sudo dnf install xmake
Changelog
New features
- #955: Add zig project templates
- #956: Add wasm platform and support Qt/Wasm SDK
- Upgrade luajit vm and support for runing on mips64 device
- #972: Add
depend.on_changed()
api to simplify adding dependent files - #981: Add
set_fpmodels()
for math optimization mode - #980: Support Intel C/C++ and Fortran Compiler
- #986: Support for
c11
andc17
for MSVC Version 16.8 and Above - #979: Add Abstraction for OpenMP.
add_rules("c++.openmp")
Change
- #958: Improve mingw platform to support llvm-mingw toolchain
- Improve
add_requires("zlib~xxx")
to support for installing multi-packages at same time - #977: Improve find_mingw for windows
- #978: Improve toolchain flags order
- Improve Xcode toolchain to support for macOS/arm64


{{ block "style" .}} {{ end }}
Warren Nelson
Software Systems Engineer
Home
Blog
Resume
{{ block "main" . }}{{ end }}
{{ block "footer" . }}
| Built with
Hugo
. {{ end }}
{{ block "scripts" . }}{{ end }} {{ template "_internal/google_analytics.html" . }}


A blend of
love, skill and passion
L’ora Della Pizza is an Italian dialect for "it’s Pizza time". L’ora is a Pizzeria renowned for its excuisite pizza recipes and excuisite service delivery. At L’ora we value your welfare and therefore go an extra mile to have you served the best pizzas by the best. L’ora celebrates 20 years of business operation and therefore offers its clients lucrative deals as eye catching as half-slashed pizza prices valid from 22nd February to 2nd March 2021. We value you!!!
Make your pizza order at the cormfort of your premises and wait for it to come to you within a limited amount of time. L’ora offers the fastest and most efficient delivery services. Simply order your Pizza and let us bring it to you at a pocket friendly cost of Kshs. 200. And don’t forget to review and rate our delivery services upon receipt of your order. Thank you and remember, we value you.
I have L'ora's pizzas at least twice a week.  I love it. The general manager is always nice and make you feel like you’re a guest and not jus a customer she goes beyond to make you feel welcome and you’re very satisfied before leaving.The staff is great as well....
~ Jessica
A blend of
Love, skill & passion
L’ora Della Pizza not only works from the Pizzeria but can also bring the pizzeria to your event. An event is never complete without a touch of L’ora Della Pizza. At L’ora we create memories therefore, partners with us to organise your event. We partner to work on any type of events ranging from weddings to birthday parties to halloween parties. Therefore, calls us to help you create memories at your event.
Wanna treat your loved one(s) to a nice time, simply call (+254) 795591620 to book a table at a little cost to avoid missing out on your favorite spot/table. Reserved tables will be made available to the rightful owner(s) upon arrival on the agreed on time. Make your date as seamless as possible by making advance table reservations.
8:30am - 10pm
Sunday2pm - 8pm
Holidays8:30am - 10pm


Screen bounds are based on IFactory.width & IFactory.height.
If true the cursor will be displayed, if false the cursor is hidden.
?type
The mouse button.?asTime
If true then returns duration as milliseconds, else returns duration as frame updates.?isPrevious
If true then returns the previous duration down (the time held prior to the most recent release).?type
The mouse button.?type
The mouse button.?type
The mouse button.?type
The mouse button.?type
The mouse button.?asTime
If true then returns duration as milliseconds, else returns duration as frame updates.?isPrevious
If true then returns the previous duration up (the time unused prior to the most recent press).?type
The mouse button.?delay
The time within which the mouse button must be clicked twice.?type
The mouse button.?type
The mouse button.?delay
The time which, if exceeded, assumes the mouse is being dragged.type
The mouse button.A press is defined as a new down - i.e. was up previous frame, and is down this frame.
type
The mouse button.A release is defined as a new up - i.e. was down previous frame, and is up this frame.


The application is built using Aurelia as a SPA front-end (Single Page Application) with a REST API backend supported by the OpenBEL Platform (https://github.com/OpenBEL/openbel-server)