This section contains Angular examples alongside with descriptions of the involved functions and code. We start with a trivial example, proceeds with a fairly simple round trip example with a thorough explanation of how it utilizes the round trip concept. We then proceed with a serie of example where we add more and more functionality to a data-grid that in the end implements a "excel like" data-grid with CRUD data functionality that interact with the server using Lift 3's round trip functions.
For overall setup and configuration of required resources see the Section 1 section.
To avoid cluttering the examples with to much repeating details the overall resource setup has been omitted from the example section. A convenient way to setup Angular, bootstrap and other front end toolkit resources in Lift is to use the FoBo module, you can read all about how to setup the resources used in this demo using FoBo in the Section 1 section.
If you are new to Angular this example is for you, taken from the introduction on AngularJS home , it will prepare you for the coming examples. If you are already familiar with Angular you can skip this example and jump to the next where we throw our self right in to the world Lift's server round trips.
If you are new to AngularJS I strongly suggest that you, to get started with the basics, visit AngularJS excellent home. There are plenty of examples, tutorials and other information that you will find valuable in you exciting endeavors into AngularJS land.
This is a very simple Angular only example (no server interaction) doing a ajax updates of the Angular expression yourName.
The following shows the code involved in this example.
Embedding the prettyprint ex1 form code hereIn this example we are creating a Angular model
ngModel
(data-ng-model="yourName"
) with the assignable Angular expression
"yourName"
, we are then using this expression in a binding {{ expression }}
on the heading as shown below.
As you type in a name the {{yourName}}
value will get updated.
In this example we are doing a Lift 3 round trip to the server and back. Still we are keeping the function simple to get you familiar with the concept.
When clicking on the "Simple RT" button the text above the button will be replaced with a text fetched from the server. So what's happening is that the Angular model gets updated via the Angular controller who is invoking a lift round trip function that, as part of its execution, invokes a Scala function on the server, this function dose the calculations and returns it to the client.
The return value is put into Lift's RoundTripHandlerFunc
who is then sending it back
from the server to the client, in this case it will end up as a future in the Angular controller whereby
the Angular module gets updated and the value will be displayed above the click button.
In our case we are not handling errors but Lift's RoundTripHandlerFunc
is not only able to send back data
but also signal end of data (for streams) or some error condition, you can read more about that in
DPP's Blog
{{lrtResModel}}
Below I will outline the things involved in hooking up Lift roundtrip's with a AngularJS controller , this "hookup" pattern is used in most of the following example(s).
As there are many ways to model the Lift round trips functionality you may see other blog post, articles or tutorials doing thing's in a slightly different way, my hope is that the pattern used in this article is simple enough that you will understand and see the overall "wiring" yet flexible enough for most use cases.
Now lets look at the code. As this is the first example involving Lift roundtrip's and a bit more Angular stuff I will show you all the essential parts, we start by look at this from the view (Lift's designer friendly templates ) focusing on the Angular stuff.
Embedding the prettyprint ex2 code hereThe data-ng-app
attribute represents an Angular directive named ngApp.
This directive is used to flag the html element that Angular should consider to be the
root element of the Angular application scope.
In our case the root element will be the div id=main
element.
Although it is common to have only one ng-app
directive in a
application (typical in a single-page application) it is possible to
have more than one data-ng-app
directives in one and the same application
(one per page).
Here we are loading the foboDemoApp
module
with it's configuration and run blocks. Although not necessary in this example we are also loading some module
dependencies ['ui.grid','ui.bootstrap']
. As the module dependencies is not used in this example
we could have made it a empty list []
, we are however going to use the
dependancies in later examples.
Above shows the controller declaration in the Lift template. Bellow is the javascript implementation of the same Angular controller
Now in the Angular controller things are starting to get a bit more interesting, although we are keeping things simple.
Here we are calling, from the Angular javascript controller, the round trip function myRTFunctions.doSimpleRT();
that is, a function that is hooked to native Lift/Scala code on the server.
This function will return a
promise
and when fulfilled it will contain a
lift-json
string originated from the server with the message "There and back again!".
The function that returns the future is a lift round trip call and hence something Angular knows nothing about (it's not handled by Angular)
so when the future is resolved we need to tell Angular that things has happened/changed, in Angular we do that by calling $scope.$apply
I am going to show you the Lift server side code in a moment but let us first take a look at the things that provides the glue between the server and the client starting with the snippet declaration in the lift template .
Embedding the data-lift Roundtrip injectorThe lift html template above shows the markup with our RoundTripBindingInjector
snippet invocation.
When the page/template containing this snippet gets rendered Lift will resolve the RoundTripBindingInjector
snippet and invoke it's render function and transform the nodes. Lift’s snippets are
Scala functions: NodeSeq => NodeSeq
.
Below is the actual snippet implementation that renders the hook up functions as javascript code
that appends to lift's page script file. Our use case specific hook up functions is added by calling
our getRoundTrips
function. The essential Lift round trip building magic is condensed into
the buildRoundtrip
toJsCmd
transformation.
In this example our use case specific server side round trip functions is declared in the SimpleRT
trait,
in later examples our use case specific server side round trip functions will be in the PersonRT
trait.
Below is our SimpleRT
trait containing a List
with a
RoundTripInfo
object that maps the js function doSimpleRT
in the
Angular controller using it's name (the string value) with our Scala function
doSimpleRT(value :JValue, func :RoundTripHandlerFunc) :Unit
.
As you can see we are for clarity using the same function name doSimpleRT in booth ends.
Embedding the prettyprint ex2 code hereThe doSimpleRT
function has two parameters, namely the input
value named value
of type JsonAST.JValue
and the return value
named func
of type RoundTripHandlerFunc
.
As this is a very simple example we are only using the RoundTripHandlerFunc
send(/*some data*/)
function. In addition we also have the functions
done()
and failure(/*Some failure message*/)
, that gives us explicit
control over sending data, signaling end of data (done) for a stream of data, and sending a
failure message on failure.
For completeness, the code below is showing how we declare getRoundTrips
so that
by extending EmptyRoundTrip
we have a way of organizing our round trip functions
into separate traits.
When you get your head around it, it ain't that complicated and as has been said above this is one way
of doing it. Compared with a simpler and more strait forward approach we are using the PageRoundTrips
abstraction (originally used
by M. Lucchetta) which gives us some additional flexibility as it in a decoupled way lets us organize your
round trip functions into multiple snippet traits.
This application group files in a functionally way (all templates/views together, all css together, all js together etc...), this is, today, a common way of structuring web apps. New web technologies is however emerging with web components as one of the most exiting and impacting ones, this will change how we structure future web apps and as technology merges this will include how we structure AngularJS and Lift web apps too.
With this in mind Google has put together some AngularJS style guide documentation, so if you want to get up to date on how to structure future web apps the structurally way you can take a look at this Angular blog post An AngularJS Style Guide and Best Practice for App Structure it contains references to these documents.
Next in example 3 we are going to use the same design pattern as outlined above but this time we are going to, with Lift round trip's, up on request, send a array of lift-json data collected from the back-end store Slick and display it using the Angular UI-Grid UI module .
In example 4 to 6 we will expand up on the functionality in example 3 to in the grid have, not only, read operations but also create, update and delete operations.
Using the Angular UI-Grid UI module , provided via the FoBo module , this example is doing a round trip to the server to fetch and display grid data from the back-end store handled by Slick . We are going to build on this example in the following examples to extend its functionality. Here we start with the simplest task of just fetching and displaying the data.
Here the simpleGridOptions
is the variable we are going to bind
to to initiate our grid options, this will be done in the PersonGridCtrl
.
In $scope.simpleGridOptions
we are binding $scope.myData
to the grid and when the promise returned by Lift's round trip function
personsQuery()
called via the $scope.doPopulate
function
is fulfilled the grid will get populated with data fetched from the back-end store.
Below is the PersonRT
trait containing the Scala Lift server side part
of the round trip function. For now we only have the personsQuery()
round trip
function that fetches and maps the back-end person data to a list of JsonAST.JObject's
.
We will in the following examples add additional round trip functions, for handling create, update and delete operations.
Building on example 3 we are now adding the ability to create and add new Person data to the back-end store and display it in the grid by doing a roundtrip to the server to add the Person data and then update the grid with the new data.
Below is the html scoped by the person grid controller. It has grown a bit compared with
example 3 as we now add some, bootstrap styled, input fields and a button to submit the field values.
The interesting and new Angular stuff, compared to example 3, is the data-ng-model
and the
data-ng-click
bindings on input and button.
Added to the controller compared to example 3 is the $scope.doAdd
function
where in we now also is sending json data from the client to the server via the round
trip function addPersonCmd
. Then when data has been inserted into the back-end
store we also make sure the grid is updated with the newly added data.
Here we add the addPersonCmd
function to the RoundTripInfo
object
list and the addPersonCmd
function where we extract the input value before we
put it into the Person
case class and inserts it into the back-end store.
In the example code above we are not handling errors we are simply assuming that everything is okay and are sending back a property of "inserted" set to true as return status.
Building on example 3 and 4 we now also add excel like cell edit operations. We also add a discrete delete button column for entity delete operations and as before we have the add function.
To edit grid data, double click on a name or age cell, "end of edit" will trigger a entity update. Add and delete operations should be self-explaining.
Below is the html for example 5 scoped by the person controller, the only difference from
example 4 is a change in grid options from ui-grid="simpleGridOptions"
to
ui-grid="gridOptions"
Below is the controller handling the CRUD operations on the ui-grid.
Embedding the prettyprint ex5 code hereBelow is the PersonRT trait handling the CRUD operations.
Embedding the prettyprint ex5 code hereBuilding on example 3 - 5, while the view stays the same as in example 5
we have now done some refactoring and moved out the back-end calls (the round trip calls)
from the PersonGridCtrl
into a PersonFactory
service.
The PersonFactory
is a angular factory service
provider .
This separation of concerns has also made it easy to add some simple client side
cashing to avoid unnecessary server calls.
Here we have injected the PersonFactory
service and
replaced the round trip calls with calls to the PersonFactory
factory service.
Below is the PersonFactory
factory service that now handles the person
round trip server calls. To avoide some unnecessary server calls we also add cashing
abilities to the service.
This completes the Lift round trip example series as we now have CRUD operations on the ui-grid and some client side data cashing and a good separation of concerns. Now that you have seen a small part of how well Angular and Lift fits together you may like to learn more about Angular so here is 50 more Angular examples that start from the basics and beyond. If you are new to Lift visit the liftweb.net and join the community forum .
From here we could go on and some routing with Angular NgRoute using route controllers and separate things out into Angular templates and probably much more but I'm saving that for a rainy day.
You will find code that goes along with this screen cast above intro To Angular and you will find part 2 of the screen cast here


{% comment %} ===================== Up To Top Button ===================== Used as quick navigate back to top for long article pages. 1. To import button, use {% include "src/site/components/up_to_top_button.html" %}. 2. It needs to be imported as the last component within the div with the "usa-content" class. {% endcomment %}


Battleship
1. Put all ships to board
2. Play Now button would be shown up after all ships had been put by both players
3. Click on board to attack
4. Destroy all your enemy's ships
Play Now!
Hint!
Vertical
Horizontal
Carrier
Battleship
Destroyer
Submarine
Patrol
Submit
Change Player


Mx1100 UMI Serial BTR
Installation & User’s Manual
For Fanuc Tape Readers
Copyright © 2013 All rights reserved.
Memex Automation Inc. 200 – 3425 Harvester Rd.,
Burlington, Ontario Canada L7N 3N1
Mx1100 UMI Serial Fanuc BTR
Contents _III
Table of Contents
Introduction............................................................................VII
About This Manual............................................................VII
History of the BTR............................................................VII
Installation Instructions......................................................... 1
Package Contents........................................................…...1
Installing the Mx1100 UMI BTR...................................... 2
Operating The BTR........................................................... 5
Layout Diagram of the Mx1100 UMI Serial BTR............ 6
Reference................................................................................. 7
General Troubleshooting................................................... 7
Memex Technical Support & Service............................. 11
User’s Notes.................................................................... 12
Glossary................................................................................. 13
Appendix A: Configuration & Settings………………….. 17
DNC Software Configuration Information...................... 17
Mx1100 Option Jumper Settings..................................... 17
Mx1100 Serial Port Pin Configuration............................ 18
Serial Data Cable Configurations.................................... 18
Appendix B: ASCII Code Reference Table........................ 19
Contents _IV
Introduction_ V
Introduction
Thank you for purchasing the Mx1100 UMI (Universal Machine
Interface) BTR. At Memex we invest a great deal of effort in the
design, manufacture and testing of each unit we build, and back it
with a three-year limited warranty. We are confident you will find
the Mx1100 an important component of your shop floor
communications system.
About this Manual
This manual explains how to install and operate the Mx1100, and
consists of the following sections:
Installation Instructions explains how to install the
Mx1100 UMI BTR interface board.
Reference contains a troubleshooting section, notes area
and contact information for customer service and technical
support.
Appendix A, Configuration & Settings provides
information for software (DNC) configuration, BTR jumper
settings and serial cable configuration (“pin-out”) charts.
Appendix B, ASCII Table lists ASCII values in both
Decimal and Hex formats, their corresponding symbol, and
keyboard key where applicable. This may be helpful in
configuring DNC software in some cases.
The History of the BTR
The “Behind the Tape Reader” board, or BTR as it is commonly
called, is an electronic signal processor designed to emulate the
function of a paper Tape Reader and provide an RS232 serial port as
an alternate method of data entry to an NC or CNC control. RS232 is
an international standard for electronic communications, and is a
faster and more reliable means of data input than using punch tape or
Manual Data Input (MDI). Originally, the only one way that a part
program (the “G-code”) could be entered into a machine tool was
through MDI mode, which allowed the program to be input using a
keypad at the control. The MDI process was fine for small programs,
but it was time consuming and error prone for longer programs. It
Introduction_ VI
took time to set up and to prove the MDI code before operation could
commence. Machine flexibility was low, since each new program
required time to input. With all the wasted time and lack of
flexibility, it was not very long before someone invented an alternate
form of control input, the paper Tape Reader.
The paper Tape Reader provided a faster, more reliable form of data
input to the numerical control. However, these Tape Readers were
mechanical in nature, and required regular maintenance and care to
perform properly. Tape Readers allowed data and programs that were
punched out on a paper tape to be read in by the control at a rate of
approximately 300 to 400 characters per second. A few problems
inherent in the Tape Reader are: it has limited ability to accept
commands and inform the operator of problems and status; it is prone
to mechanical problems; it requires cleaning, lubrication and other
maintenance; it has a limited capacity of 1000 feet (305 metres) of
tape. It was commonly suggested that a busy shop keep a spare
reader in inventory in preparation for the time when one broke down.
The process of punching data tapes (whether paper, Mylar or metal)
was expensive, time-consuming and brought up storage concerns.
Because of the absolute nature of a punched tape, the process had to
be redone for every program revision. The programmer and operator
had to work closely together to keep the tape accurate and up to date.
Old tapes had to be filed or destroyed and the latest version had to be
carefully marked and stored. Finally, the tape itself had to be handled
with care since it was prone to damage.
Later machine controls had a new mode of operation that allowed
their Tape Reader’s “endless” spool of tape to surmount memory
constraints. Originating on Numerical Controls (NC) that had no
memory, Direct Numeric Control (DNC) allowed execution of a
program while it was being read. This “drip-feed” method meant that
the program was limited in size only by the length of tape used. This
Introduction_ VII
type of operation was very much appreciated later on with the advent
of Computerized Numeric Controls (CNC).
With true onboard memory the CNC had much greater capabilities
and inevitably programs got longer and the need for more memory
grew. With control memory being expensive and limited, DNC has
remained the only way some modern manufacturers can operate.
Tape Readers are still commonplace on modern controls today.
However, thanks to serial DNC capabilities, many shops use Tape
Readers for backup purposes only.
The modern equivalent of a Tape Reader is the BTR interface board,
which emulates paper Tape Readers. The Mx1100 UMI BTR is a
microcontroller-based interface board that allows communications
with a machine control for the purposes of loading programs into
memory or running DNC. BTRs generally connect to a computer and
permit a programmer to send a complete, formatted program to the
machine control. The machine then loads the program as if from
tape, either to memory for later execution, or for immediate block-
by-block execution (DNC). Because the Mx1100 UMI BTR emulates
the Tape Reader, the control really has no way of knowing that the
source of the program is a computer port instead of a tape.
The Mx1100 UMI BTR eliminates punching of tape, has no moving
parts, can handle transfer speeds that exceed that of a Tape Reader,
uses the programmed (source) file, is less expensive than a Tape
Reader, allows the Tape Reader to still be used, supports the use of
the control’s punch capability, and does not require maintenance. It’s
no wonder that the BTR, in combination with DNC software, has
become the preferred alternative to using the Tape Reader and (in
many cases) to upgrading CNC memory.
While the Memex BTR gives the machine control the ability to
receive programs from a PC, it has nothing to do with the specifics of
what is being sent to the control. DNC software, or at the very least
some form of serial communications software, is responsible for
transmitting the data to the control, and the control expects that data
to be in a specific format. The part program must be formatted just as
it would be for punching to tape, and the DNC software must be
configured to send it as if it were a tape. The BTR acts only as a
gateway or port to the control. The required program format is
usually described in the control’s Operations Manual. Please consult
the manual for information on how to configure the part code
programs for the control.
Chapter 1: Installation Instructions _ 1
Installation Instructions
Unpacking the Mx1100 UMI BTR
Package Contents
1 x Memex Mx1100 UMI Serial BTR........Supplied
1 x Fanuc Ribbon Interface Cable.............. Supplied
1 x Installation & User’s Manual................ Supplied
Optional Items
Facit 4070 Punch Port Interface Cable....… Optional (Memex SKU-5100: Punch Cable for Fanuc only)
Serial Interface Cable (PC – BTR).............. Optional
Serial Transfer (DNC) Software…….......... Optional
Before You Begin
Please read all instructions before proceeding. We recommended first
making a temporary installation, becoming familiarized with the
components and orientation of the assembly, testing the functionality,
and then making the installation permanent by mounting the BTR and
routing and securing the cables where they are out of harm’s way.
A shot of our old Mx1000 BTR (now built into the Mx1100)
connected to Fanuc 6 (with punch) & to a laptop running Multi-DNC.
Chapter 1: Installation Instructions _ 2
Installing the Mx1100 UMI BTR
General
The Memex Mx1100 UMI BTR installation procedure is
straightforward and relatively easy to complete – connect the BTR to
the CNC where the Tape Reader was connected, optionally connect
the Tape Reader to the BTR, and mount the BTR on the inside of the
Tape Reader door. All the hardware and accessories are provided. All
that’s needed are some basic skills and hand tools. Estimated time
required: 45 minutes.
1. Prepare the site. Ensure that the Tape Reader and control are working properly
before beginning the installation. When ready, turn OFF all power
to the control, machine and computer system.
2. Access the Tape Reader. Locate the panel on the control that has the Tape Reader mounted
on it. Open this door to gain access to the back of the Reader.
3. Disconnect the Tape Reader. Locate the Tape Reader printed circuit board directly behind the
Reader. It has two 50-pin connectors, labelled CNT1 and CNT2.
The second (CNT2) has wires going to the Tape Reader head. The
cable on CNT1 is a 50-conductor ribbon cable that goes to the
CNC. Note which side of this connector the cable’s red stripe
goes on. Disconnect this cable from CNT1.
4. Connect the BTR. Connect the cable disconnected in Step 3 to the BTR’s 50-pin
connector at top right*, labelled “FANUC CONTROL A”,
without twisting the cable. Make sure the cable’s red stripe is on
the left, where Pin 1 is marked with a white square (see diagram,
page 6). This connects the BTR’s Fanuc control port to the
control.
Caution
It is very important that the cables are installed
properly with the correct orientation. If one of the
cables is plugged in upside down, severe damage will
occur to the BTR, to the Tape Reader and to the
control’s Master Board.
Chapter 1: Installation Instructions _ 3
5. Mount the BTR.
Locate a safe spot on the back of the door and magnetically
mount the Mx1100 UMI BTR.
6. Option: Connect the Tape Reader to the BTR. If you wish to enable the paper Tape Reader, take the new 50-
conductor ribbon cable and plug it onto the JP5 connector
(labelled “FANUC TAPE READER A”) at the bottom right of
the BTR.* The red side of the cable goes on pin 1 of the
connector (see diagram, page 6). Plug the other end of the cable
onto the CNT1 connector on the Fanuc Tape Reader board, from
which the cable was removed in Step 3 – ensuring the red wire on
the ribbon cable goes on pin 1 of the connector, as noted in Step
3.
7. Option: Punch Cable. If you would like to punch part programs, parameters, etc. from
the control to the computer, and you have purchased the optional
Fanuc Facit 4070 Punch Cable, connect the control’s punch port
to the BTR. Locate the punch port on the control. It’s usually a
blue rectangular 20-pin (Honda) connector. Plug the Punch Cable
into this port. Plug the 26-pin end onto the BTR’s JP4 connector,
labelled “PUNCH IN”. The red stripe goes on the side with Pin 1
(see diagram on page 6). Remove the JP17 jumper (labelled
“PUNCH DISABLE”) in the upper right corner of the BTR.
8. Configure the BTR. Set the jumpers on the BTR to configure the communications
parameters required for your DNC system. The option jumpers,
listed on page 17, include the following:
Jumper A1 and A2 set the Baud rate. Typically 9600 baud
(both jumpers ON) is used unless your cable doesn’t support
that rate reliably. The RS232 specification supports 9600
Baud (Even parity, 7 data bits and 1 stop bit) with a cable
length up to 50 feet (15 metres), but it is often possible to
exceed that. It’s important to use cable specifically designed
for RS232 serial data, 22 AWG, twisted pair, stranded wire
(not solid), shielded, low capacitance (a rating of 11 to 15 pF
per foot) is best. If you have a long cable run or are have
unreliable data transmission, try lowering the Baud rate. Note:
In our opinion, CAT3 or CAT5 UTP Ethernet cable is not suitable for
reliable machine tool serial communications. Use shielded cable.
Chapter 2: Operating the Mx1100 _ 4
Jumper A3 OFF adds hardware (RTS/CTS) handshaking.
A3 ON is software (Xon/Xoff) only. Generally it is preferable
to use both, which means setting A3 OFF and making sure
your cable supports hardware handshaking (see Note 6 on p 9).
Jumper A4 OFF uses the standard Xoff character, $13 Hex.
Set A4 ON if your terminal software uses $93 Hex for Xoff.
Jumper A5 OFF uses the standard Xon/Xoff handshaking
method (a Single Xoff). Setting A5 ON sends a continuous
stream of Xoff back to the computer until the next Xon. This
enables the BTR to be used with some terminal programs that
were intended for use with a modem, such as PROCOMM ™
although we recommend the use of proper DNC software.
Jumper A6 OFF will echo incoming data back to the PC for
diagnostic purposes. On reset, the software version is
outputted for instance. Set A6 ON for normal use.
Jumper A7 OFF is ISO data, and ON converts incoming ISO
data to EIA format for controls that require EIA data.
Jumper A8 overrides the Tape Reader’s selection of BTR or
Tape mode. If the Tape Reader wasn’t reconnected to the
BTR, or if the Tape Reader isn’t intended to be used often and
the BTR will usually in Tape mode, set A8 ON. (Remember to
remove it when a tape needs to be read.)
__________________________________________________
SG JMPR OFF = COM1 Signal Ground surge suppression.
PWR P9 DBL ON activates power output on COM1’s pin 9,
for use with devices such as buffers (see note on page 18).
Punch Disable – if you are not using a Facit 4070 punch port
(SKU-5100 cable), keep this jumper ON.
9. Connect to the Computer. Connect a serial cable from the 9-pin COM1 on the BTR to the
computer’s serial port (see page 18 for cable configurations).
10. Test the Functionality. Refer to “Operating the Mx1100 UMI BTR” (page 5), and if
necessary, “Reference” (page 7).
Chapter 2: Operating the Mx1100 _ 5
Operating the Mx1100 UMI BTR
To use the control’s new serial port:
Make sure the cables are connected correctly and prepare your DNC
software. Press Reset on the Fanuc control to reset the BTR and ensure
that no residual data is present in its input buffer. If BTR option jumper
A8 is OFF (switch enabled), and the Tape Reader is connected, switch
the BTR into BTR mode either by turning off the Tape Reader or by
switching the Tape Reader to Release mode. Start an upload to the
control from your DNC software, and then load a program at the
control as if from tape. You can put the control in Tape mode and press
READ or INPUT to load the program into memory (if it will fit), or put
the control in DNC (or External) mode and press Cycle Start to run it in
DNC mode – also known as “drip feeding”. (These mode names and
key names will vary according to the control model.)
If you have any difficulty or concerns, please refer to “General
Troubleshooting” on page 7.
Helpful hints
Adding a couple of Carriage Returns to the end of the file will ensure that the entire file is transmitted. Some combinations of
DNC software and CNC control sometimes miss the end of a
file, so it’s a good idea to provide some harmless extra
characters as a buffer.
The BTR responds to the Break character by resetting and clearing its buffer. The Break character is ASCII value 3, or
HEX 03 (see Appendix B, page 19). If your DNC software can
be configured to send control codes, it’s a good idea to have it
send a Break character at the beginning of every g-code
program it sends. This will guarantee that the BTR buffer is
reset and ready for a new program each time, regardless of
whether the CNC didn’t properly finish reading the previous
one. (The Break character will not be passed through to the
CNC, and the start of the program following it will wait while
the BTR is resetting.)

 (
S e e N
o te
1 o
n P
a g e 7
.)

General Troubleshooting
The Mx1100 UMI BTR is designed to install easily and quickly.
However, if experiencing difficulty in the procedures, please check the
following to isolate and resolve the problem:
1. Check that the “PWR ON” LED on the BTR (leftmost LED in the LED block at bottom centre*) is on and bright. The RTS LED for COM1 should also be on. If there is no power to
the BTR, ensure that the cables from the Control (and from the
Tape Reader if connected) are oriented properly and are well
secured. Also, check that one of the following is true:
a) The “+5TR” jumper (JP18 at bottom right) is ON and the “+24TR” jumper (JP16 at middle left) and “REG ENBL”
(JP10 near middle bottom) are OFF; -or-
b) The “+5TR” jumper (JP18) is OFF and the “+24TR” jumper (JP16) and “REG ENBL” (JP10) are ON
In case “a” above, the BTR is sourcing 5 volts from the CNC; in
case “b” it is sourcing 24 volts and reducing it to 5 volts.
Typically 5V (setting “a”) is used with a Fanuc control.
NOTE: The default power source setting is “a” above, 5 volts.
However, in some CNCs the 5-volt supply has faded to below the
threshold that will power the BTR. If the BTR won’t power on, try
using 24 volts by setting the jumpers as in “b” above.
2. Alternate source of power
If the PWR LED still does not come on, carefully find a source of
power on the control between 7 and 24VDC and wire it in to
screw-down terminal block J7 at the lower left corner of the BTR
When power is brought in through the terminal block, the jumpers
must be set as in “b” above.
Note:
Chapter 2: Operating the Mx1100 _ 8
3. Check that the BTR is working properly. When the control is powered up or reset, the BTR’s STATUS LED
(2 nd
LED in LED block at middle bottom) should blink. One blink
indicates that the Mx1100 is in BTR Mode. This means that it is
ready to receive information through the serial port and to send it
to the control. Two blinks indicate that the Mx1100 is in TAPE
Mode. This means that it is ready to pass information through the
BTR from the Tape Reader to the Control. (The leftmost TX LED
will also blink, as the BTR sends out a status message on its
COM1 port during power up.) With most Tape Readers, turning
the Tape Reader on/off or switching it between Load and Release
will switch the BTR between modes.
4. Check the status message. When the BTR is powered on or reset, it sends a short message on
its COM1 port, indicating which mode it’s in. The STATUS and
first TX LEDs will blink during output. If the computer is properly
connected, and your DNC software is configured to match the
BTR communication settings and is set to receive a file, it should
be possible to capture and read the status message. If the message
is clearly readable then the BTR’s communications are good, and
so is the cable, the settings, the computer and the DNC software.
NOTE: Some versions of the BTR require the A6 Jumper to be
off (echo enabled) for the status message to be sent back to the
PC on Power Up
5. The Status and Tx LEDs flash but there is no status message. First the computer has to be watching for the status message with
DNC software, or at least with a terminal program or utility. After
installing your software, verify that the correct communication
parameters are set and check that the correct computer COM port
is being used. Check that the BAUD RATE is properly set and
matches the baud rate on the BTR (check option jumpers A1 and
A2 – see pg. 17) and that the STOP BITS are set to 1. Make sure
that the cable connecting the BTR to the computer is a properly
configured RS-232 serial data cable and that it is properly
connected (see Step 6 below). Also verify that the PC’s COM port
is functioning properly.
Chapter 2: Operating the Mx1100 _ 9
6. Check the serial data cable and handshaking settings. First, make sure the cable matches the appropriate diagram under
“Mx1100 UMI BTR Cable Configurations” (page 18).
Second, make sure the cable, BTR settings and software settings
match with regard to handshaking method. If using software
handshaking (Xon/Xoff) only (see table A on page 18), make sure
that BTR Jumper A3 is ON and your DNC software is set for
Xon/Xoff handshaking only. If using hardware handshaking (see
table B on page 18), make sure that BTR Jumper A3 is OFF, your
DNC software is set for RTS/CTS and Xon/Xoff handshaking, and
the cable supports it by having the wires for RTS and CTS
connected for a total of five wires connected at each end. (Note:
Software handshaking can be used with a hardware handshaking
cable, but not the other way around.)
Third, make sure every wire connection at each end of the cable is
solid, there are no breaks in the wires, no wire insulation is pulled
back far enough to allow bare wire to touch another wire or any
other metal parts, and no solder or debris is touching more than
one pin. If everything looks good at the ends, it may be necessary
to use a multi-meter to determine whether there is a break or a
short in the wires somewhere along the length of the cable.
If a hardware handshaking cable is being used, the leftmost CTS
LED (in the STATUS LED bank at bottom centre of the BTR) will
light up when a properly configured cable is connected between
the BTR and a computer and both are powered on. The leftmost
RTS LED will always be on, indicating that the BTR is active and
the port is ready. Regardless of which type of handshaking is being
used, the leftmost RX LED will blink when data is sent to the
BTR, and the leftmost TX LED will blink during any Xon/Xoff
handshaking that might occur during the send.
7. The whole file sends before pressing Cycle Start. The most common cause of this is incorrect handshaking settings.
Refer to Note 6 above. In addition, some terminal programs expect
the XOFF character, normally Hex 13, to include even parity,
making it Hex 93. Try setting jumper A4 ON (see page 17).
Chapter 2: Operating the Mx1100 _ 10
8. A CNC error occurs shortly after pressing “Cycle Start”. Try removing the CR (carriage return) characters from the
program. Some controls only accept “pure” ISO or EIA code,
which does not contain CR characters. Also try changing BTR
jumper A7 in case it’s a matter of ISO / EIA format mismatch.
9. The control generates a Tape Vertical (TV) alarm. Tape Vertical checking was a way that controls verified the
accuracy of the program code they read in through the Tape
Reader. It is usually an option and does not apply when you are
using a BTR. Turn this option off in the control’s parameters.
10. The control generates a Tape Horizontal (TH) alarm. Tape Horizontal is equivalent to Even parity. Use Even parity
when sending the programs from the terminal or PC. Also see
Notes 7 and 8 above – jumper A4 and/or A7 may resolve this.
11. The Power LED lights but the STATUS LED doesn’t flash. Check the supply voltage to the BTR. If using a 5VDC supply and
it is less than 4.6VDC, the BTR may actually be protecting itself
from under-voltage. Find a better 5V supply, or switch to 24V (see
Note 1 “b”) or use the screw-down terminal in the bottom left
corner with a supply of 7 to 24VDC. Always be sure to set up the
power jumpers correctly (see Notes 1 and 2).
12. Other machine errors Ensure that the proper tape codes are being used at the beginning
and/or end of the program. Some machines require a “%” (percent
sign) as the first and/or last character in the program. Check the
CNC Operator’s Manual for any termination characters that may
be required.
13. What if the BTR “Locks Up”? Near the upper left corner of the BTR are the four pins labelled
RESET and LOAD. Of those four pins, the top two are the reset
pins. Momentarily shorting the two RESET pins by touching them
with a metal object such as a screwdriver or coin (while the power
is on) will reset the BTR and make the STATUS LED flash. This
action is the equivalent of pressing the reset button on a PC. This
should not have to be done on a regular basis, but, as with anything
electronic, lockup can happen.
Chapter 2: Operating the Mx1100 _ 11
Memex Technical Support & Service
In case of technical difficulty with the Mx1100 UMI BTR, be sure to
review the troubleshooting section of this manual prior to calling for
technical support. If the issue cannot be resolved after reading through
the troubleshooting section, please contact Memex Automation
Technical Support at 1-905-635-3042. Page 12 of this manual may be
used to record technical information, service advice, etc. as needed.
If you have any other questions or concerns, need answers to technical
questions, or need information about Memex products and/or services,
please contact your local Memex dealer or us at:
Memex Automation Inc. 200 – 3425 Harvester Rd.,
Burlington, Ontario
Canada L7N 3N1
Phone:<PHONE_NUMBER>
Fax:<PHONE_NUMBER>
Web: www.memex.ca
Email<EMAIL_ADDRESS><EMAIL_ADDRESS>Chapter 2: Operating the Mx1100 _ 12
Notes:
Glossary _ 13
Glossary:
ANSI American National Standards Institute. The official US
agency and voting representative for ISO. This institute develops
information exchange standards above 50 Mbps.
ASCII American Standard Code for Informational Interchange. A
seven bit alphanumeric code used extensively in data communications.
A parity bit is often added to the seven-bit code for error detection.
See Appendix B, page 19 for a table of ACSII values.
ASYNCHRONOUS TRANSMISSION The transmission of
characters separated by time intervals that vary in length, usually in
accordance with the key entries of a terminal operator. Start and stop
bits are used to identify (frame) the beginning and end of the
asynchronously transmitted character.
BAUD RATE The rate at which a signal is changed or modulated.
Refers to the number of bits transmitted per second.
BTR Behind the Tape Reader. An electronic input device that
emulates a Tape Reader’s signals on a machine control, usually
converting serial communications to parallel Tape Reader signals.
CNC Computerized Numerical Control. An industrial computer that
is used to control the movement of a machine. A CNC usually uses
programs coded with G-codes and M-codes.
CONTROL Refers to a Computerized Numerical Control (CNC).
CTS Clear To Send. One of the control lines used in RS232
communication. Found on pin 4 or 5 on a DB25 and pin 7 or 8 on a
DB9 depending whether the port is DTE or DCE.
DCE Data Communication Equipment. Typically a modem or data
set used to interface a terminal or computer to the telephone lines.
Glossary _ 13
Glossary _ 14
DNC Direct/Distributed Numeric Control. A means of
communicating or “drip feeding” a program to a CNC through a Tape
Reader or serial interface. The program code is immediately executed,
block by block, as it is read by the control.
DTE Data Terminal Equipment. In data communications, it is an
end user or termination circuit, typically a terminal or computer.
ECHO A reflected signal. Information is sent back to the transmitter
from the receiver, often for verification purposes.
EIA Electronic Industries Alliance. A United States organization of
manufacturers that establishes and recommends industrial standards.
They developed the EIA standard code used in early NC and CNC
communications. Also refers to a form of 7 bit ASCII with data
encryption and Odd parity, used largely on CNCs.
FRAMING The procedure used to identify the beginning and end of a
group of data bits.
FRAMING ERROR An error that occurs when a receiver loses
synchronism to the incoming data.
G CODE The instructions used to dictate the movement of a machine.
A list of these codes is commonly called a “part program”.
HANDSHAKING A process that regulates the flow of data between
two devices. Also called “flow control”.
HARDWARE HANDSHAKING Handshaking (flow control) by use
of the RTS and CTS control lines on an RS232 serial interface.
ISO International Standards Organization. One of the world’s
largest standards organizations. Also refers to a form of 7 bit ASCII
with data encryption and Even parity, used largely on CNCs.
LOCAL ECHO Refers to when a terminal is configured to internally
route its transmitted character around to its receiver section for display.
Glossary _ 15
MODEM A contraction of modulator/demodulator. The modem
converts a computer’s digital bit stream into an analog signal suitable
for telephone lines and vice versa.
PAPER TAPE A media of part program storage. Holes were punched
in a one-inch paper tape to represent G codes. These tapes were then
read through a Tape Reader to be loaded into machine control memory.
PARITY An error detection method whereby a single bit is added to a
group of bits to make the total number of 1 bits either even or odd
(depending on the type of parity; even or odd).
PART PROGRAM A list of G codes that control the movement of
the machine. May be typed into the machine control or produced as a
computer text file and transmitted to the control.
PARITY ERROR Indicates that the total number of 1 bits in a
received character does not agree with the type of parity expected.
RS232-C An asynchronous serial interface standard that specifies an
electrical, functional, and mechanical interface specification between
data communication devices.
RTS Request To Send. One of the control lines used in RS232
communication. Found on pin 4 or 5 on a DB25 and pin 7 or 8 on a
DB9 connector depending on whether the port is DCE or DTE.
RTS/CTS Hardware handshaking (flow control) using the RTS and
CTS control lines.
Rx Receive Data. Refers to the input for the data signal.
SG Signal Ground. Refers to the ground for the data signal. Not the
same as the cable’s shield ground or a device’s frame ground.
START BIT The first bit used to frame an asynchronously
transmitted character. Its logic level is a 0 (space).
Glossary _ 16
STOP BIT The last bit used to frame an asynchronously transmitted
character. Its logic level is a 1 (mark).
SYNCHRONOUS TRANSMISSION High-speed communication
whereby data characters are sent in direct succession to each other
without the use of Start and Stop bits.
TAPE READER An input device used on CNC Machines and other
industrial equipment. Used to read coded data on a punched tape. Older
Tape Readers were a mechanical device, whereas newer ones use
optical devices that sense light passing through the holes in the tape.
TERMINAL An input/output device used by an operator to
communicate with a host computer. It consists of a keyboard and a
display to monitor alphanumeric characters entered at the keyboard or
received from a remote device.
TERMINAL SOFTWARE Computer software that enables a
computer to act as a terminal, usually used with modems. Can be used
to exchange data over a serial cable between two computers or a
computer and a machine control, but does not provide the level of flow
control necessary to prevent dangerous miscommunications with a
machine control. Specific purpose DNC software is highly preferable.
TIME-OUT ERROR An error that occurs when a device fails to
respond to a message within an expected period of time.
Tx Transmit Data. Refers to the output for the data signal.
XOFF Transmit Off. A device control character (DC3 or $13 hex)
used to control the flow of data between two devices. XOFF is used
together with XON as a handshake.
XON Transmit On. A device control character (DC1 or $11 hex)
used to control the flow of data between two devices. XON is used
together with XOFF as a handshake.
XON/XOFF Software handshaking using the XON and XOFF control
characters.
Appendix A: Configuration & Settings _ 17
Appendix A: Configuration & Settings
Mx1100 UMI BTR Serial Configuration
Baud Rate...................... 9600 (default; set by jumpers A1 & A2) Parity............................. Even Data Bits........................ 7 Stop Bits......................... 1 Handshake...................... See note 6, page 9 If using terminal software, these settings may also apply:
Duplex............................. FULL ASCII transfer options…. Strip the High Bit = ON
Option Jumpers on the Mx1100 UMI Serial BTR
A1 = 1200 = 2400 = 4800 = 9600 * A2 Baud Baud Baud Baud A3 Add CTS/RTS flow control Xon/Xoff flow control * A4 Xoff = $13 hex Xoff = $93 hex A5 Single Xoff Continuous (strobed) Xoff A6 Echo No Echo * A7 No conversion ISO – EIA conversion A8 BTR Mode controlled by Force BTR mode Tape Reader Switch
+24TR JP16 Enable 24V power from Tape Reader
+5TR JP18 Enable 5V power from Tape Reader
REG ENBL JP10 Enable 5V Power Regulator
Punch Disable JP17 * Use if Punch Port not connected
SG JMPR JP22 Disable COM1 signal ground surge suppression
PWR P9 DBL JP23 Enable power output on COM1 pin 9 ** * Default Settings (9600, E71, XON/XOFF, no Echo, no punch) NOTE:
= NO Jumper = Jumper ON
Appendix A: Configuration & Settings _ 18
Mx1100 9-pin RS232-C Serial Port Pin Functions
Pin 2.........................................................…………...… Receive Data
Pin 3.............................................................…………. Transmit Data Pin 4.………….........................................................……….….. DTR
Pin 5.............................................................……….... Signal Ground
Pin 7...............................................................…......………......... RTS Pin 8................................................................................……….. CTS
Pin 9..................................................….………...... DC Power Out **
Note: ** Memex has enabled Pin 9 to be a power source for external devices. It is enabled by
jumpering JP33, “PWR P9 DBL” (see diagram, page 6). The output voltage depends how the
BTR is being powered: 5V from CNC or Tape Reader = no output; 24V from CNC or TR =
24V output; input from screw-down terminal J7 = same voltage output on pin 9.
Mx1100 UMI Serial BTR Cable Configurations
A – Software Handshaking Only
Computer 25-pin Female
Mx1100 BTR 9-pin Female
Tx – 2 2 – Rx
Rx – 3 3 – Tx
SG – 7 5 – SG
FG – 1 No Connection
9-pin Female 9-pin Female
Tx – 3 2 – Rx
Rx – 2 3 – Tx
SG – 5 5 – SG
FG – (D-shell) No Connection
B - Hardware Handshaking Enabled
Computer 25-pin Female
Mx1100 BTR 9-pin Female
Tx – 2 2 – Rx
Rx – 3 3 – Tx
RTS – 4 8 – CTS
CTS – 5 7 – RTS
SG – 7 5 – SG
FG – 1 No Connection
9-pin Female 9-pin Female
Tx – 3 2 – Rx
Rx – 2 3 – Tx
RTS – 7 8 – CTS
CTS – 8 7 – RTS
SG – 5 5 – SG
FG – (D-shell) No Connection
NOTE: The cable’s shield should be grounded at one end of the cable and not at the other, so it does provide a noise drain but does not form a ground loop. On 25-pin
connectors, Pin 1 is a Frame Ground. On 9-pin connectors, there is no Frame Ground so
the D-shell or other ground may be used (but not the Signal Ground).
Appendix A: Configuration & Settings _ 19
Appendix B: ASCII Table
DEC HEX SYM KEY DEC HEX SYM DEC HEX SYM 0 0 NUL ctrl @ 43 2B + 86 56 V 1 1 SOH ctrl A 44 2C , 87 57 W 2 2 STX ctrl B 45 2D - 88 58 X 3 3 ETX ctrl C 46 2E . 89 59 Y 4 4 EOT ctrl D 47 2F / 90 5A Z 5 5 ENQ ctrl E 48 30 0 91 5B [ 6 6 ACK ctrl F 49 31 1 92 5C \ 7 7 BEL ctrl G 50 32 2 93 5D ] 8 8 BS ctrl H 51 33 3 94 5E ^ 9 9 HT ctrl I 52 34 4 95 5F _ 10 A LF ctrl J 53 35 5 96 60 ` 11 B VT ctrl K 54 36 6 97 61 a 12 C FF ctrl L 55 37 7 98 62 b 13 D CR ctrl M 56 38 8 99 63 c 14 E SO ctrl N 57 39 9 100 64 d 15 F SI ctrl O 58 3A : 101 65 e 16 10 DLE ctrl P 59 3B ; 102 66 f 17 11 DC1 ctrl Q 60 3C < 103 67 g 18 12 DC2 ctrl R 61 3D = 104 68 h 19 13 DC3 ctrl S 62 3E > 105 69 i 20 14 DC4 ctrl T 63 3F ? 106 6A j 21 15 NAK ctrl U 64 40 @ 107 6B k 22 16 SYN ctrl V 65 41 A 108 6C l 23 17 ETB ctrl W 66 42 B 109 6D m 24 18 CAN ctrl X 67 43 C 110 6E n 25 19 EM ctrl Y 68 44 D 111 6F o 26 1A SUB ctrl Z 69 45 E 112 70 p 27 1B ESC ctrl [ 70 46 F 113 71 q 28 1C FS ctrl \ 71 47 G 114 72 r 29 1D GS ctrl ] 72 48 H 115 73 s 30 1E RS ctrl ^ 73 49 I 116 74 t 31 1F US ctrl _ 74 4A J 117 75 u 32 20 SP 75 4B K 118 76 v 33 21 ! 76 4C L 119 77 w 34 22 “ 77 4D M 120 78 x 35 23 # 78 4E N 121 79 y 36 24 $ 79 4F O 122 7A z 37 25 % 80 50 P 123 7B { 38 26 & 81 51 Q 124 7C | 39 27 ‘ 82 52 R 125 7D } 40 28 ( 83 53 S 126 7E ~ 41 29 ) 84 54 T 127 7F DEL 42 2A * 85 55 U
Appendix A: Configuration & Settings _ 20
Memex Automation Inc. 200 – 3425 Harvester Rd.,
Burlington, Ontario Canada L7N 3N1
Phone:<PHONE_NUMBER> Fax:<PHONE_NUMBER> www.memex.ca
Support –<PHONE_NUMBER>
<EMAIL_ADDRESS>Sales –<PHONE_NUMBER><EMAIL_ADDRESS>Thank you for choosing Memex for your Manufacturing Connectivity Solutions™
\ISO9000\DOCs\Current Manuals\M100707D - Mx1100 Serial BTR for Fanuc.doc


Need Medical Care?
Find a Doctor near you!
If you know your preffered doctors name enter it here, or type your medical complaint(s) here:
Submit


{% extends 'layout.html' %} {% block pageTitle %} How to setup Git - NHS.UK prototype kit {% endblock %} {% block beforeContent %} {% include "how-tos/includes/breadcrumb.html" %} {% endblock %} {% block content %}
If you can't install the kit or prefer not to use the kit locally on your computer, you can set up the kit in your browser instead.
To set up the prototype kit in your browser you will need to use Gitpod. Gitpod creates automated workspaces and dev environments in your browser from a repository on Github.
This guide will show you how to get setup in 5 steps.
You can read more about using Gitpod on their website.
You will need a Github account to use Gitpod. You can sign up to Github on their website
If you have any problems, ask a developer on your team, email us or get in touch on the NHS digital service manual #prototype-kit Slack channel.
Start now {% include "how-tos/includes/back-button.html" %}


First name:
Last name:
Birthdate:
Gender:
male
female
Chose gender:
Male + female
Male
Female
show birthday/age
Meno
Priezvisko
Vek


{% extends 'base.html' %} {% block content %} {% if response.success %} Confirm Payment {{ item.name }} - {{ item.description }} Total: Rs. {{ item.price }} Amounts over Rs. 3000 can be paid by EMI through select banks. Proceed to Payment {% else %} Failed to connect to payment gateway: {{ response.message }} {% endif %} {% endblock %}


A Micromechanic-based approach towards the Response of Fiber-reinforced Composite Laminates under ballistic impact and blast loading
Composites material are a significant part of a wide variety of applications such as bulletproof vests of soldiers on a battlefield to the passenger jet airliners. The dynamic and multitudinous forces of nature acting on these composites push the materials towards complex deformations, answers to which involves extensive work using numerical techniques, in order to save the expenditure involved in testing and experimentation.
In the present study, an attempt has been made to solve this challenging problem to predict the response of composite laminates under ballistic impact and blast loading conditions by implementing a progressive damage based micro-mechanical model for unidirectional composite laminates and fiber metal laminates.
Full study available on request.
Cite as
Rahul Singh (2018, June 21). A Micromechanic-based approach towards the Response of Fiber-reinforced Composite Laminates under ballistic impact and blast loading. Retrieved , from https://mathscapes.xyz/notes/a-micromechanic-based-approach-towards-the-response-of-fiber-reinforced/.


Ghostbuster Containment
I recently built a Dockerfile for Buster, a static website generator for Ghost. In fact, that's how this site is currently published to Github pages! The interesting obstacle was pushing to Github from inside of a docker container. While typically this requires SSH private keys, it turns out you can…


Restore folder location: {{selNode.channelBackupPath}}/restore
Restore folder location: {{selNode.channelBackupPath}}/restore
All channel backup file not found! To perform channel restoration, channel backup file/s must be placed at the above location.
0" fxLayout="column" fxLayoutAlign="space-between start" fxLayout.gt-md="row wrap">
Restore folder location: {{selNode.channelBackupPath}}/restore
| Channel Point |
{{channel?.channel_point}}
|
Actions
|
|
No singular channel backups available.
|
0}">


Standard
⇲
expression panel
0
MC
MR
M+
M-
MS
M^
CE
C
7
8
9
4
5
6
1
2
3
0
.
History
Memory
There is no history yet
There's nothing saved in memory
8566
M+
M-
MC


Hello {{userMember.name}},
A moderator has reviewed the revised version of your topic "{{topic.title}}" and decided that it is now in compliance with Citizen OS community guidelines.
Access to your topic has been restored. There will be no indication that it was previously reported. Thank you for revising it!
You can find more details about Citizen OS moderation process here.
Thank you for helping us ensure a high quality of content in Citizen OS user community!


With a tap of a finger, you can order food from restaurants around you.
We like to keep you in the loop. We enable you to track your order, preparation and dispatch time.
We know exactly what you want and recommend curated dishes based on your past orders and filters.
So with just a tap, we'll have your favourite meals delivered to you, in a fuss-free way.


Analysis
Description of Analysis Class.
Analysis
Static Members
▸
Architecture(directory)
Parse the structure of the Vue application and its components.
Parameters
directory (any)
The directory from which to read .vue files.
Returns
Promise<Array<Object>>
:
An array of objects containing properties related to the application structure.
Parse parent-child relationships between components.
ParentChild(directory: any):
Promise<[]>
Parameters
directory (any)
The directory from which to read .vue files.
Returns
Promise<[]>
:
An array of objects with parent & child properties - one for each nested relationship.
Exports
Description of Exports Class.
Exports
Static Members
▸
ExportParentChild(directory)
Parse & export parent-child relationships between components to JSON.
ExportParentChild(directory: any):
Boolean
Parameters
directory (any)
The directory from which to read .vue files.
Returns
Boolean
:
True if the file export succeeded, false if there was an error.
▸
ExportArchitecture(directory)
Parse & export structural relationships between components to JSON.
ExportArchitecture(directory: any):
Boolean
Parameters
directory (any)
The directory from which to read .vue files.
Returns
Boolean
:
True if the file export succeeded, false if there was an error.
Files
Description of Files Class.
Files
Static Members
Get all the Vue files in the input directory (collects files in nested folders too).
Parameters
directory (any)
The directory to search for .vue files in.
Returns
Promise<Array<String>>
:
An array of file paths of .vue files.
Get the raw text data of a file.
Parameters
filePath (any)
The path the file is at.
Returns
string
:
Raw text content of the file.
Classes
Get the css classes in the the .vue file.
Parameters
fileString (any)
The raw text content (string) of the file.
Returns
Array<String>
:
An array of css classes strings from the .vue file.
IdSelectors
Get the css id selectors in the the .vue file.
Parameters
fileString (any)
The raw text content (string) of the file.
Returns
Array<String>
:
An array of css id selector strings from the .vue file.
Description of MetaDataES6 Class.
MetaDataES6
Static Members
Description of MetaDataVue Class.
MetaDataVue
Static Members


Sweet roll pastry donut liquorice. Oat cake liquorice ice cream cotton candy bonbon pastry cotton candy. Dragée cheesecake dragée cotton candy fruitcake croissant candy canes donut.


summer circulation Arctic Clim. mid-latitude weather jet (). climate wave changes storm warming temperature extreme winter extremes Northern Res. heat waves Geophys. Hemisphere atmospheric recent response snow associated North weakening {border-style Atlantic Nat. models model persistent px;} trends #ffffff;} change flow global influence Lett. cover enhanced evidence future variability Chang. Sci. increase poleward role sea surface tracks gradient jets positive quasi-stationary ./JCLI-D--. Atmos. Coumou compared different events impacts interactions observed polar regional regions sea-ice studies heatwaves increased lead linked temperatures wind Dyn. amplification atmosphere cold dynamical effects geopotential ice likely projected stratospheric tropics European Wang boreal effect forcing heating mid-latitudes pronounced seasonal shift shows stationary tropical vortex (Fig. ./s--- CMIP Geosci. NAM based blocking conditions drivers hot land position projections rainfall regimes seen stream summer, teleconnections time track waveguide American Europe Nature Ocean Recent Rossby activity century especially hot-dry indicate lower mean mechanisms meridional modeling moisture monsoon pattern patterns px; soil summers thermal westerlies winter, zonal {font-family (i.e., ./JCLI. ./nclimate A., Fig. Observed Oscillation Science Soc. air anomalous anthropogenic central direct dynamics favor feedbacks font-size greenhouse height high-impact i.e., important large leading low possible potential reduction relative review risks streams strong tail trains troposphere waviness (e.g., ./GL ./ngeo Box CGWT Eurasia Eurasian However, Indian Meteorol. SNAO amplified causal cause characterized circulation. circumglobal compound differences distribution double; exact extent extratropical formation frequency generally grant high-latitude increases latitudes loss mechanism mode near-surface negative observations phase planetary precipitation provide quantify reductions robust speed support supported thermodynamic tropospheric upper-level wave-resonance waves. weaker westerly (see Acad. Climate Department Earth Environ. Future Natl Panel Petoukhov Rahmstorf S., U.S. USA [], affect agricultural anomalies anomaly attributable background baroclinicity border-color border-width climatological does drought early extremes. gas high-emission identified including involving jet, land-atmosphere latent leads link midlatitude observational pathways patterns. period processes propagate rapid reduced remote research schematic season shifts slowdown societal solid; spring strength stronger strongly sub-tropical substantial suggests summertime synoptic teleconnection weakened weather. winds winter. zonal-mean {font-style {font-weight (Box (Figure ./-/// ./pnas. AA. Am. America Atmospheric Bull. C., Commons Creative D., Enhanced Extremes Hoskins Lehmann Mediterranean Nakamura Proc. Rep. Thus, Wang, Weakened Woollings act analyzing balance bold causes changing circulation, complex contrast courier; created described double double-jet dry drying dynamic easterly em; emerging end explain extremely faster favoring feedback high importance increasing influences itself key knowledge known late like long losses maximum models. northern occurred overall particular persistence possibly pressure provides pt;} radiative relationship release representation severe short-wave simulations software) source southward strengthen subtropical suggest synoptic-scale teleconnections, thermal-wind tracks. trigger using warmer waveguides wavenumbers weaken western


To bring quality, style and the wish for good fortune to all of our guests. We provide a high-end experience through Chinese cuisine.
TOWN combines a variety of Chinese cuisine to excite and delight our customers. Our vision for the future is to create experiential dining that is more than just a night out. We aim to bring quality and luxury across all aspects of our brand. The approach of TOWN is to develop our brand with the understanding of both our culture and consumer insights. Within our vision always lives the promise of inspiring creativity, conversation and quality. Our audience is a high-end clientele who values a dining experience. The age range of our customers are from early 30s-60s. We would like them to come back for both personal dining and events.


This app is supposed to be a simple example of how to deploy a shiny app. Work in progress.
Let's take a look at an indicator of how many clusters to choose
By checking the percentage of variance explained we can understand how much of the between sum of squares variance is explained relative to the total sum of squares at the different cluster values. Most likely we would want to add a screeplot and use the `Elbow Method` to consider the percentage of variance explained at different numbers of clusters all at once. Will be included in future work.
Nate Langholz (


{{ $scssMain := "scss/main.scss"}}
{{ if .Site.IsServer }}
{{/* Note the missing postCSS. This makes it snappier to develop in Chrome, but makes it look sub-optimal in other browsers. */}}
{{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" true) }}
{{ else }}
{{ $css := resources.Get $scssMain | toCSS (dict "enableSourceMap" false) | postCSS | minify | fingerprint }}
{{ end }}
{{/* Everything above here is copied from themes/docsy/layouts/partials/head-css.html to add the below section */}}


My Facelet Page Title
Hello from Facelets, my name is #{name.value}!
My product is #{product.id}!
#{c.value}


The default
reflow
mode uses some clever CSS tricks to show each row of data in a mobile friendly way when
displayed on small screens. Optionally you can make reflow trigger at medium
or
large
displays instead, or turn it off by choosing none
. Resize your screen to see it in action.
See the column documentation for column attributes and advanced reflow combinations.
rowSelect
will be called when a row is selected. To enable selection you must also set
rowKey
to return a unique id per row and the selectionMode
to either
single
or multi
.
The listener will be called with an instance of
io.tornadofaces.event.SelectionEvent
that contains a reference to the Table and the selected row object.
Widget: TornadoFaces.widget.Table
| Method | Params | Return type | Description |
|---|---|---|---|
| getSelectedRowKeys() | array | Get a list of the currently selected rowKeys | |
| unselectAllRows() | void | Unselect all rows in the table | |
| selectPreviousRow() | void | Select the previous row | |
| selectNextRow() | void | Select the next row | |
| selectFirstRow() | void | Select the first row | |
| selectLastRow() | void | Select the last row | |
| selectRow() | tr | jquery tr | Select the supplied jquery object containing an html tr element |
| expandRow() | tr | jquery tr | Expand the supplied jquery object containing an html tr element. Requires a RowExpansion element to be present. |
| filter() | query | string | Filter rows by searching for the supplied text. You can supply a custom filter function via setFilterFn |
| setFilterFn() | fn | function | Set a new filter function to use when filter() is called. |


Domain Driven Design (DDD), Command Query Responsibility Segregation (CQRS) and Event Sourcing (ES) have been around for a couple of decades already and have failed to go mainstream for a variety of reasons.
DDD, CQRS and ES complement eachother perfectly and encourage and enable rapid prototyping of software applications that are very close to the business' needs without huge abstractions.
This book covers the basics of DDD, CQRS and ES and lays forth a batteries-included approach (and a small framework) which lets you get up and running very quickly.
This sample covers in some detail the first parts of the book, please download and enjoy it (.pdf)
ℹ I will never misuse your data, I will only send information directly related to this book if you join the announcement list.


Toggle navigation
DuDu
For Folks Who Just Du
truncate table
Are y'all sure ya want to delete this Dudu?


Animated & Interactive web design that automatically responds to user input & events.
Responsive web design that automatically adjusts to the user's set up. Thus, reducing horizontal scroll bars and white spaces.
Static web design that has a fixed container (wrapper). No matter the visitors device, they will see the same fixed-width website layout.
Web Developer
Recently I've taken an interest in web design as a hobby. I'm self-taught but feel more than capable of creating quality sites for my clients. I'm interested in internship/job opportunities, where I'm able to learn more about the field from experienced web developers.


A guide to finances
If you like this post and would like to read more of my posts,
Subscribe!Intro
I write this article to provide an easy way for people just entering the workforce (many of my friends) to manage their finances. I also think this article would also be a good reference for me, and may prove interesting (in hindsight) in a few years. If you want to spend as little time as possible, skip to the end. I would appreciate comments if you find this useful.
Note: this is not going to be rigorous, but it should make a fair bit of sense. Also, this article is pretty US-centric, so if you live outside the US, this may just be a “fun read” (if you find finance “fun”).
DISCLAIMER: Of course, this is only my opinion, I have not been paid by any of the sites/companies referred to in this article and I hope I don’t get sued for doling out advice that I think may be helpful (but may not be). I don’t have a degree in any of this and I haven’t taken even a single course in economics/finance/investing at a formal institution. All of this is information from my brain + the internet, neither of which can be counted upon. You have been warned!
General overview
Save up to 6-9 months worth of expenses as an “emergency fund”. Get your employer’s 401(k) match. Invest the rest. I’ll provide the details in a Q&A format.
Investing
Q: What do you mean “Invest the rest”?
A: If you’re in the US, depending on how young you are (your actual age, not how young you feel), you want to put a significant chunk into stocks (the stock market). Not (I repeat NOT) individual stocks, but a fund. If you’re outside the US, you may want to look at savings rates and compare the returns (for Indians abroad, see NRI).
Q: Why a fund? Why not individual stocks?
A: When you invest in a mutual fund, that money is used to buy a bunch of different individual stocks. Remember when in grade school you learned not to put all your eggs in one basket?  Take care not to invest in an actively managed mutual fund because the fees charged for maanging the funds will eat into your returns as John Oliver explains here.
Q: But, mutual funds are subject to market risks…!
A: Yes, they are, but the risk is much lower than investing in a single stock. Also, I’m assuming they have to say that so they don’t get sued. Later, I suggest some mutual/index funds you can invest in. Also, the S&P 500 has been down in a 10 year period only a couple of times, which seems promising (although past performance is no indicator of future success).
Q: But, I’m sure company ABC is going to be a huge hit and I’d get better returns there.
A: I’m sure people have had the same thought with IBM, Blackberry, Nokia, Twitter, etc. Yes, you might get lucky, but, it’s unlikely. If you need persuading, try this game.
Q: Which fund should I invest in?
A: You could invest in a retirement fund (these will have dates in their names, for e.g. Vanguard’s 2060 retirement fund, choose one that matches your intended year of retirement). Retirement funds will ensure that your cash is moved from stocks to bonds (high-risk/profit to low-risk/profit) as you grow older. If you’re young (below 35), you could put a significant chunk (Warren Buffett says 90%) in an S&P 500 (or stock market) mutal fund or index fund.
Q: What’s the difference between an index fund and a mutual fund?
A: I’m not entirely sure, but one difference is that you can only buy whole shares (you can’t buy fractional shares) of index funds whereas you can put any monetary amount into a mutual fund. So, if you want to invest a certain fixed amount every month, that would be possible with mutual funds. Vanguard has lower charges for their mutual funds once you invest $10,000. Also, an index fund essentially tries to “track” the market and follow it as closely as possible, but sometimes there may be a lag and that can cause concern.
Q: Why the S&P 500?
A: A total stock market fund may be better, as it doesn’t discriminate by only picking stocks of large companies. The S&P 500 invests in the 500 largest companies by market capitalization (which is just number of shares multiplied by share/stock price). In effect, you can think of it as investing in the 500 largest companies, which should be reflective of the market (I think I read somewhere that they reflect 86% of the market). Also, Warren Buffett is a fan.
Q: When should I start doing this?
A: ASAP. Over time, the market “tends” to grow. I use that word very loosely, because no one really knows what the market is going to do. We may be facing a crash, but, usually, the market grows, and by waiting you lose out on those gains.
Q: Wait… it may crash? Why should I invest then?
A: Let’s say the market does really poorly and mutual funds all go to zero (or near zero). You have now lost all your money, but so have tonnes of other people and if the dollar is worth nothing, then it really doesn’t matter if you have any or not. Note: As stated earlier, this may not be accurate since I am not an expert on this. I will add a correction if someone corrects me or I learn otherwise.
Emergency fund
Q: Why 6-9 months worth? Why not 4 or 10?
 I’m guessing it is probably to give you a few months (enough) to get back on your feet if you find yourself without a job.
Q: What if you suddenly needed a lot more than 6-9 months of expenses?
A: Of things that I can think of that cost that much, you probably should have insurance to cover (healthcare expenses, car/home damage expenses). For expensive buys like cars/houses, you probably would have a loan (after your down payment).
Q: Where should I put my emergency fund?
A: A bank account where you can withdraw money easily. You could use Ally (an online bank) as they provide 1%, higher than most banks.

A: It depends. You could do either. It’s tough to say which one would be better long-term. It’s important to note that any savings you make on rent should be invested, if you are to come out equal (or on top). Here’s a spiffy calculator from the New York Times (The Upshot).
Q: I don’t want to plug in all those numbers. Just tell me what to do.
A: If you’re staying in a city for a long duration (>5 years), it would probably make sense to buy a house. Do the math before making a decision, though, it would not be prudent to do otherwise.
401(k)
If you put your money in a traditional 401(k), it will be invested before tax is levied. You will pay tax on it when you withdraw the funds (when you retire). This is like a provident fund in India, but money is invested in the market in a 401(k).
Q: Should I put money in a 401(k)?
A: Yes, almost certainly, yes. Especially if your employer will match a percentage of how much you put in as that is “free” money.
Q: How much money should I put in a 401(k)?
A: At least as much as your employer will match. You can put more after that as well, but missing out on the employer match is missing out on “free” money (once it is vested).
Q: Why are you writing “free” in quotation marks?
A: See next question.
Q: What happens if I withdraw the funds before I retire (at the age of at most 59.5)?
A: You pay a 10% penalty on the funds withdrawn. After you are 59.5 years old, there is no penalty.
Q: What’s this about a Roth 401(k)?
A: For the Roth 401(k), you pay taxes on it now before it is invested. This is different from just investing in the stock market, because your profits will not be taxed! However, you will still be subject to the penalty if you withdraw early.
Q: Where is the money invested?
A: It’s invested in the market. You can choose the funds you want to put the money in. Usually, only a limited number of funds are available. This further differentiates it from investing in the stock market.
Q: So, if I retire, and am unemployed, I can withdraw funds tax-free?
A: No. The amount you withdraw will be included in your income for the year. You will be taxed based on whatever tax rate that income is subject to.
Q: What if I have a life-threatening emergency and need the funds?
A: In some cases, you can withdraw the money without a penalty.
Q: My employer doesn’t have a 401(k) program. Can I put money in an IRA instead?
A: Yeah, sure. It’s pretty similar, but I won’t detail the differences here.

A: I think this is because it is covered under Section k of the Internal Revenue Code.
Credit cards
Most people who have a decent credit score should get the Citi Double Cash back card. It gives you 2% on everything.
Q: But, I travel a lot and care more about travel rewards.
A: Then, it may make sense to get one of the Chase cards or an airline/hotel card.
Q: Doesn’t Discover give 5%?
A: Yes, but only on select categories every quarter. The Citi Double Cash back gives 2% on everything. So, if you have only one card, you should get the Citi. If you are getting additional cards, you can get Discover, Chase Freedom, etc. as well.
NRI
As banks in India offer a high interest rate (earlier around 10%, currently they offer around 8%) on fixed deposits (FDs), investing in India may seem an incredibly tempting option compared to the low US savings rates (around 1%). However, the Rupee has been falling steadily compared to the dollar. Five years ago, in 2012, 1 USD would get you around 53 INR. In 2017, you’d get around 68 INR for a dollar. Doing the math, that means if you invested the equivalent of 1000$ in both places, assuming a conservative 5.5% annual return for the S&P 500 investment in the US, you would end up with 1307$ in the US and only 1255$ if you had invested in an FD in India. When you adjust for the lower FD rates and the exchange fees, it makes more sense (to me) to invest in the US.
Where do I learn more?
(Alternative title: How did you learn this?)
Having an interest: 20%.
Having friends who like talking about this: 30%.
Reading reddit’s personal finance and investing subreddits: 15%.
Realizing Warren Buffett has more personality and money than you’ll ever have: percentage-less.
I don’t want to read all this
Long story short, keep 6-9 months of expenses in an emergency fund, contribute enough to your 401(k) to get your employer’s match and (if you’re below 35) put the rest in a fund that tracks the S&P 500 or tracks the stock market.
Q: How do I invest in a fund?
A: Either go to Vanguard as they have low fees and invest in either VFIAX or VTSMX or both (both mutual funds), or download the RobinHood app and invest in VOO or SPY or both (both index funds).


| HOME | DOWNLOAD | DOCUMENTATION | FAQ |
The current version of SHTOOLS is 4.1
What is SHTOOLS?
SHTOOLS is an archive of Fortran 95 and Python software that can be used to perform spherical harmonic transforms and reconstructions, rotations of data expressed in spherical harmonics, and multitaper spectral analyses on the sphere.
SHTOOLS is extremely versatile:
- It can accommodate any standard normalization of the spherical harmonic functions ("geodesy" 4π normalized, Schmidt semi-normalized, orthonormalized, and unnormalized).
- Both real and complex spherical harmonics are supported.
- Spherical harmonic transforms are calculated by exact quadrature rules using either the sampling theorem of Driscoll and Healy (1994) where data are equally sampled (or spaced) in latitude and longitude, or Gauss-Legendre quadrature.
- One can choose to use or exclude the Condon-Shortley phase factor of (-1)m with the associated Legendre functions.
- The spherical harmonic transforms are accurate to approximately degree 2800, corresponding to a spatial resolution of better than 4 arc minutes.
- The fortran routines are OpenMP compatible and OpenMP thread-safe.
- Routines are included for performing localized multitaper spectral analyses.
- Routines are included for performing standard gravity and magnetic field calculations, such as computation of the geoid and the determination of the potential associated with finite-amplitude topography.
- The routines are fast. Spherical harmonic transforms and reconstructions take on the order of 1 second for bandwidths close to 800 and about 30 seconds for bandwidths close to 2600.
How do I install SHTOOLS?
The Python components of SHTOOLS can be installed using the Python package manager pip. In a unix terminal, you need only to execute the following command:
pip install pyshtools
To install the Fortran 95 components for use in your Fortran programs, installation can be as simple as executing the commands:
make fortran
make fortran-mp # (for OpenMP)
The most recent release of SHTOOLS can always be downloaded from GitHub. Full installation instructions can be found here, and additional information can be found on the GitHub wiki. You can keep up to date by following SHTOOLS on Twitter.
How do I use SHTOOLS?
SHTOOLS can be invoked in any Fortran 95, Python 2, or Python 3 program. The core software is written in Fortran 95, and Python wrappers allow simple access to the fortran-compiled routines. A variety of Python notebooks and example files are included that demonstrate the major features of the library.
SHTOOLS is open source (revised BSD license) and makes use of the freely available Fourier transform package FFTW and the linear algebra packages LAPACK and BLAS.
| Laboratoire Lagrange | Observatoire de la Côte d'Azur | © 2017 SHTOOLS |


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
public interface Gazetteer
The Gazetteer interface defines the mandatory methods of a gazetteer PR.
| Method Summary | |
|---|---|
boolean |
add(String singleItem,
Lookup lookup)
Adds a new string to the gazetteer |
void |
addGazetteerListener(GazetteerListener gl)
Registers a Gazetteer Listener |
void |
fireGazetteerEvent(GazetteerEvent ge)
Fires a Gazetteer Event |
String |
getAnnotationSetName()
Gets the AnnotationSet that will be used at the next run for the newly produced annotations. |
Boolean |
getCaseSensitive()
Gets the current case sensitivity |
String |
getEncoding()
|
LinearDefinition |
getLinearDefinition()
Gets the linear definition of this gazetteer. |
URL |
getListsURL()
Gets the url of the lists.def file |
MappingDefinition |
getMappingDefinition()
Gets the mapping definition of this gazetteer,if such |
Set |
lookup(String singleItem)
Looks-up a string |
boolean |
remove(String singleItem)
Removes a string from the gazetteer |
void |
setAnnotationSetName(String newAnnotationSetName)
Sets the AnnotationSet that will be used at the next run for the newly produced annotations. |
void |
setCaseSensitive(Boolean newCaseSensitive)
Triggers case sensitive |
void |
setEncoding(String newEncoding)
|
void |
setListsURL(URL newListsURL)
Sets the url of the lists.def file |
void |
setMappingDefinition(MappingDefinition mapping)
Sets the mapping definition if such to this gazetteer |
| Methods inherited from interface gate.LanguageAnalyser |
|---|
getCorpus, getDocument, setCorpus, setDocument |
| Methods inherited from interface gate.ProcessingResource |
|---|
reInit |
| Methods inherited from interface gate.Resource |
|---|
cleanup, getParameterValue, init, setParameterValue, setParameterValues |
| Methods inherited from interface gate.util.FeatureBearer |
|---|
getFeatures, setFeatures |
| Methods inherited from interface gate.util.NameBearer |
|---|
getName, setName |
| Methods inherited from interface gate.Executable |
|---|
execute, interrupt, isInterrupted |
| Method Detail |
|---|
Set lookup(String singleItem)
singleItem
- the string
void setAnnotationSetName(String newAnnotationSetName)
newAnnotationSetName
- the annotation set name for
the annotations that are going to be producedString getAnnotationSetName()
void setEncoding(String newEncoding)
String getEncoding()
URL getListsURL()
void setListsURL(URL newListsURL)
newListsURL
- the url of the lists.def file to be setvoid setCaseSensitive(Boolean newCaseSensitive)
newCaseSensitive
- turn on or off case sensitivityBoolean getCaseSensitive()
void setMappingDefinition(MappingDefinition mapping)
mapping
- a mapping definitionMappingDefinition getMappingDefinition()
LinearDefinition getLinearDefinition()
void fireGazetteerEvent(GazetteerEvent ge)
ge
- Gazetteer Event to be firedvoid addGazetteerListener(GazetteerListener gl)
gl
- Gazetteer Listener to be registeredboolean add(String singleItem, Lookup lookup)
singleItem
- lookup
- the lookup to be associated with the new string
boolean remove(String singleItem)
singleItem
-
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


its free and always will be
Birthday
by clicking to link you agree to our terms and that you have tp read our data policy.including our cookie use.
create an account


| Time: | Error Code: | Season: | Points: | Points taken: | Max points | Status | Introduction Order: |
|---|---|---|---|---|---|---|---|
| {{campaign.time}} | {{campaign.error_code}} |
|
|
|
|
|
|
| Season: | Event ID: | Start Time: | End Time | Region: | Enemy: | Max points: | Points: | Status: |
|---|---|---|---|---|---|---|---|---|
| {{campaign.defend_event.season}} | {{campaign.defend_event.event_id}} | {{campaign.defend_event.start_time}} | {{campaign.defend_event.end_time}} | {{campaign.defend_event.region}} | {{campaign.defend_event.enemy}} | {{campaign.defend_event.points_max}} | {{campaign.defend_event.points}} | {{campaign.defend_event.status}} |
| Season: | Event id: | Start time: | End time: | Enemy: | Max Points: | Points: | Status: | Players at Start: | Max Event ID: |
|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
| Season: | Season Duration: | Enemy: | Players: | Total Unique Players: | Missions: | Successful Missions: | Total Mission Difficulty: | Completed Planets: | Defend Events: | Successful Defend Events: | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
| Attack Events: | Successful Attack Events: | Deaths: | Kills: | Accidentals: | Shots: | Hits: |
|
|
|
|
|
|
|
|---|
| Accuracy: | KD ratio | Mission Percentage | Defend Percentage | Attack Percentage | Accidential kills |
|
|
|
|
|
|
|---|


Snowflake lets you run a piece of code once, or every so often. It is useful for debugging a function that is run frequently.
$ npm install snowflake
<script type="text/javascript" src="src/snowflake.js"></script> <script type="text/javascript"> var problemFn = function() { var interestingVar = 0; // print out interestingVar once, even though problemFn is run more than once snowflake.once(function() { console.log(interestingVar); }); // print out interestingVar every two seconds snowflake.every(function() { console.log(interestingVar); }, 2000); interestingVar++; }; while(true) { problemFn(); }; </script>
The code is open source, under the MIT licence.