--- title: "Digital Intersections" description: "Marketing operations consultant and martech solutions architect at CRMT Digital. I blog about martech and how B2B marketers can get the most from marketing technology." subtitle: Views from the intersection of digital marketing and enterprise technology image: https://www.alanchatfield.net/content/images/2020/12/mountain-road-1556177_rgb-1.jpg banner: "home" section1: heading: "Marketing Operations" text: "Maximise marketing efficiency and unlock the value of marketing ops" link: "marketing-ops" section2: heading: "Demand Marketing" text: "Learn, optimise and engage using modern marketing techniques" link: "marketing" section3: heading: "Marketing Technology" text: "Discover how effective use of technology can boost marketing performance" link: "martech" section4: heading: "Digital Transformation" text: "Commentary on enterprise technology and its impact on business" link: "technology" section5: heading: "Marketing Automation" text: "News and tips from an expert in marketing automation" link: "marketing-automation" ---
Welcome to my personal blog. I am Alan Chatfield, Digital Marketing Consultant at CRMT Digital.
I write about marketing technology and B2B marketing, with a focus on how marketers can make the most effective use of their martech stack.
Continue reading


"We lay there and looked up at the night sky
She told me about stars called blue squares and red swirls
I told her I'd never heard of them
Of course not, she said, the really important stuff they never tell you...
You have to imagine it on your own."
-Brian Andreas


{% extends 'news/base.html' %} {% block content %}
Take a look at collected news stories and their sentiments.


|
2020 Robot Code
|
Public Member Functions | |
| MovingAverage (int maxSize) | |
| void | addNumber (double newNumber) |
| double | getAverage () |
| int | getSize () |
| boolean | isUnderMaxSize () |
| void | clear () |
Helper class for storing and calculating a moving average
| frc.lib.math.MovingAverage.MovingAverage | ( | int | maxSize | ) |
| void frc.lib.math.MovingAverage.addNumber | ( | double | newNumber | ) |
| void frc.lib.math.MovingAverage.clear | ( | ) |
| double frc.lib.math.MovingAverage.getAverage | ( | ) |
| int frc.lib.math.MovingAverage.getSize | ( | ) |
| boolean frc.lib.math.MovingAverage.isUnderMaxSize | ( | ) |


Nature is the source of all true knowledge. She has her own laws. She
has no effect without cause nor invention without necessity. – Leonardo
Da Vinci
Every day we work on improving the algorithms to assist our customers in
finding the perfect strand. Between the Development Team and the Data
team there is always somebody working to improve customer satisfaction
on a daily basis.


csgo
stats
.gg
navigation.toggle
Home
Leaderboards
All Matches
Tournaments
ESL Pro League
Season 11
IEM Katowice '19
London Major '18
Challengers
Legends
Champions
Kraków Major '17
ESL Cologne '16
UK ESL Prem '16
MLG Columbus '16
Status
Sign in with Steam
Tell me why
Check for live game
No matches have been added for this player
Profile
Match Queue
Report a problem
View Details


Home
About us
Services
Contact us
Enrollment
Parents Enrollment
Child's Enrollment
Gallery
Sign Up
Login
our gallery
Home
ur gallery
Our gallery


Dashboard
Team
Projects
Calendar
Search
Open main menu
View notifications
Open profile menu
Your Profile
Settings
Sign out
Dashboard
Team
Projects
Calendar
Tom Cook
<EMAIL_ADDRESS>Your Profile
Settings
Sign out
Dashboard


PyCharm Community edition supports Jupyter notebooks in read-only mode, to get full support for local notebooks download and try PyCharm Professional now!
Try DataSpell — a dedicated IDE for data science,
with
full
support for local and remote notebooks
Try Datalore — an online environment
for Jupyter notebooks in the browser
Also read more about JetBrains Data Solutions on our website


Welcome to my portfolio site. Here I have compiled the work I have completed this semester's module, IXD103, where I have been establishing my brand identity. This includes visual identities such as my monogram, word mark, and visual mark. There is also some work from the previous semester to be seen.
Various icon sets and other graphics I have created
Brand guidelines designed for myself
App concepts and visuals


About Us
We are a group of high school students that met in the Girls Who Code Summer Immersion Prorgram. We decided to make this website as our final project because we wanted to raise awareness on how to properly recycle and show that recycling does not have to be a boring task instead it can be a fun one.
Julie Herrick
this space is for Julie
Melanie Peavy
this space is for Melanie
Katelyn Rodrigues
this space is for Katelyn
Betzabeth Narvaez
this space is for me


DIFF
Section: User Commands (1)Updated: November 2010
Index Return to Main Contents
NAME
diff - compare files line by lineSYNOPSIS
diff [OPTION]... FILESDESCRIPTION
Compare files line by line.- -i --ignore-case
- Ignore case differences in file contents.
- --ignore-file-name-case
- Ignore case when comparing file names.
- --no-ignore-file-name-case
- Consider case when comparing file names.
- -E --ignore-tab-expansion
- Ignore changes due to tab expansion.
- -b --ignore-space-change
- Ignore changes in the amount of white space.
- -w --ignore-all-space
- Ignore all white space.
- -B --ignore-blank-lines
- Ignore changes whose lines are all blank.
- -I RE --ignore-matching-lines=RE
- Ignore changes whose lines all match RE.
- --strip-trailing-cr
- Strip trailing carriage return on input.
- -a --text
- Treat all files as text.
- -c -C NUM --context[=NUM]
- Output NUM (default 3) lines of copied context.
- -u -U NUM --unified[=NUM]
- Output NUM (default 3) lines of unified context.
- --label LABEL
- Use LABEL instead of file name.
- -p --show-c-function
- Show which C function each change is in.
- -F RE --show-function-line=RE
- Show the most recent line matching RE.
- -q --brief
- Output only whether files differ.
- -e --ed
- Output an ed script.
- --normal
- Output a normal diff.
- -n --rcs
- Output an RCS format diff.
- -y --side-by-side
- Output in two columns.
- -W NUM --width=NUM
- Output at most NUM (default 130) print columns.
- --left-column
- Output only the left column of common lines.
- --suppress-common-lines
- Do not output common lines.
- -D NAME --ifdef=NAME
- Output merged file to show `#ifdef NAME' diffs.
- --GTYPE-group-format=GFMT
- Similar, but format GTYPE input groups with GFMT.
- --line-format=LFMT
- Similar, but format all input lines with LFMT.
- --LTYPE-line-format=LFMT
- Similar, but format LTYPE input lines with LFMT.
- LTYPE is `old', `new', or `unchanged'.
- GTYPE is LTYPE or `changed'.
- GFMT may contain:
- %<
- lines from FILE1
- %>
- lines from FILE2
- %=
- lines common to FILE1 and FILE2
- %[-][WIDTH][.[PREC]]{doxX}LETTER
- printf-style spec for LETTER
- LETTERs are as follows for new group, lower case for old group:
- F
- first line number
- L
- last line number
- N
- number of lines = L-F+1
- E
- F-1
- M
- L+1
- LFMT may contain:
- %L
- contents of line
- %l
- contents of line, excluding any trailing newline
- %[-][WIDTH][.[PREC]]{doxX}n
- printf-style spec for input line number
- Either GFMT or LFMT may contain:
- %%
- %
- %c'C'
- the single character C
- %c'\OOO'
- the character with octal code OOO
- -l --paginate
- Pass the output through `pr' to paginate it.
- -t --expand-tabs
- Expand tabs to spaces in output.
- -T --initial-tab
- Make tabs line up by prepending a tab.
- -r --recursive
- Recursively compare any subdirectories found.
- -N --new-file
- Treat absent files as empty.
- --unidirectional-new-file
- Treat absent first files as empty.
- -s --report-identical-files
- Report when two files are the same.
- -x PAT --exclude=PAT
- Exclude files that match PAT.
- -X FILE --exclude-from=FILE
- Exclude files that match any pattern in FILE.
- -S FILE --starting-file=FILE
- Start with FILE when comparing directories.
- --from-file=FILE1
- Compare FILE1 to all operands. FILE1 can be a directory.
- --to-file=FILE2
- Compare all operands to FILE2. FILE2 can be a directory.
- --horizon-lines=NUM
- Keep NUM lines of the common prefix and suffix.
- -d --minimal
- Try hard to find a smaller set of changes.
- --speed-large-files
- Assume large files and many scattered small changes.
- -v --version
- Output version info.
- --help
- Output this help.
FILES are `FILE1 FILE2' or `DIR1 DIR2' or `DIR FILE...' or `FILE... DIR'. If --from-file or --to-file is given, there are no restrictions on FILES. If a FILE is `-', read standard input.
AUTHOR
Written by Paul Eggert, Mike Haertel, David Hayes, Richard Stallman, and Len Tower.REPORTING BUGS
Report bugs to<EMAIL_ADDRESS>Copyright © 2002 Free Software Foundation, Inc.This program comes with NO WARRANTY, to the extent permitted by law. You may redistribute copies of this program under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING.
SEE ALSO
The full documentation for diff is maintained as a Texinfo manual. If the info and diff programs are properly installed at your site, the command- info diff
should give you access to the complete manual.
Index
This document was created by man2html, using the manual pages.
Time: 05:29:03 GMT, December 24, 2015


SystemCountry
public enum SystemCountry: String
Enumeration describing available country codes in the system.
-
Automatically generated value for country Afghanistan.
Declaration
Swift
case Afghanistan = "AF"
-
Automatically generated value for country Albania.
Declaration
Swift
case Albania = "AL"
-
Automatically generated value for country Algeria.
Declaration
Swift
case Algeria = "DZ"
-
Automatically generated value for country AmericanSamoa.
Declaration
Swift
case AmericanSamoa = "AS"
-
Automatically generated value for country Andorra.
Declaration
Swift
case Andorra = "AD"
-
Automatically generated value for country Angola.
Declaration
Swift
case Angola = "AO"
-
Automatically generated value for country Anguilla.
Declaration
Swift
case Anguilla = "AI"
-
Automatically generated value for country Antarctica.
Declaration
Swift
case Antarctica = "AQ"
-
Automatically generated value for country AntiguaandBarbuda.
Declaration
Swift
case AntiguaandBarbuda = "AG"
-
Automatically generated value for country Argentina.
Declaration
Swift
case Argentina = "AR"
-
Automatically generated value for country Armenia.
Declaration
Swift
case Armenia = "AM"
-
Automatically generated value for country Aruba.
Declaration
Swift
case Aruba = "AW"
-
Automatically generated value for country Australia.
Declaration
Swift
case Australia = "AU"
-
Automatically generated value for country Austria.
Declaration
Swift
case Austria = "AT"
-
Automatically generated value for country Azerbaijan.
Declaration
Swift
case Azerbaijan = "AZ"
-
Automatically generated value for country ÅlandIslands.
Declaration
Swift
case ÅlandIslands = "AX"
-
Automatically generated value for country Bahamas.
Declaration
Swift
case Bahamas = "BS"
-
Automatically generated value for country Bahrain.
Declaration
Swift
case Bahrain = "BH"
-
Automatically generated value for country BailiwickofJersey.
Declaration
Swift
case BailiwickofJersey = "JE"
-
Automatically generated value for country Bangladesh.
Declaration
Swift
case Bangladesh = "BD"
-
Automatically generated value for country Barbados.
Declaration
Swift
case Barbados = "BB"
-
Automatically generated value for country Belarus.
Declaration
Swift
case Belarus = "BY"
-
Automatically generated value for country Belgium.
Declaration
Swift
case Belgium = "BE"
-
Automatically generated value for country Belize.
Declaration
Swift
case Belize = "BZ"
-
Automatically generated value for country Benin.
Declaration
Swift
case Benin = "BJ"
-
Automatically generated value for country Bermuda.
Declaration
Swift
case Bermuda = "BM"
-
Automatically generated value for country Bhutan.
Declaration
Swift
case Bhutan = "BT"
-
Automatically generated value for country Bolivia.
Declaration
Swift
case Bolivia = "BO"
-
Automatically generated value for country Bonaire.
Declaration
Swift
case Bonaire = "BQ"
-
Automatically generated value for country BosniaandHerzegovina.
Declaration
Swift
case BosniaandHerzegovina = "BA"
-
Automatically generated value for country Botswana.
Declaration
Swift
case Botswana = "BW"
-
Automatically generated value for country Brazil.
Declaration
Swift
case Brazil = "BR"
-
Automatically generated value for country BritishIndianOceanTerritory.
Declaration
Swift
case BritishIndianOceanTerritory = "IO"
-
Automatically generated value for country BritishVirginIslands.
Declaration
Swift
case BritishVirginIslands = "VG"
-
Automatically generated value for country Brunei.
Declaration
Swift
case Brunei = "BN"
-
Automatically generated value for country Bulgaria.
Declaration
Swift
case Bulgaria = "BG"
-
Automatically generated value for country BurkinaFaso.
Declaration
Swift
case BurkinaFaso = "BF"
-
Automatically generated value for country Burma.
Declaration
Swift
case Burma = "BU"
-
Automatically generated value for country Burundi.
Declaration
Swift
case Burundi = "BI"
-
Automatically generated value for country Cambodia.
Declaration
Swift
case Cambodia = "KH"
-
Automatically generated value for country Cameroon.
Declaration
Swift
case Cameroon = "CM"
-
Automatically generated value for country Canada.
Declaration
Swift
case Canada = "CA"
-
Automatically generated value for country CapeVerde.
Declaration
Swift
case CapeVerde = "CV"
-
Automatically generated value for country CaymanIslands.
Declaration
Swift
case CaymanIslands = "KY"
-
Automatically generated value for country CentralAfricanRepublic.
Declaration
Swift
case CentralAfricanRepublic = "CF"
-
Automatically generated value for country Chad.
Declaration
Swift
case Chad = "TD"
-
Automatically generated value for country Chile.
Declaration
Swift
case Chile = "CL"
-
Automatically generated value for country China.
Declaration
Swift
case China = "CN"
-
Automatically generated value for country ChristmasIsland.
Declaration
Swift
case ChristmasIsland = "CX"
-
Automatically generated value for country CocosKeelingIslands.
Declaration
Swift
case CocosKeelingIslands = "CC"
-
Automatically generated value for country Colombia.
Declaration
Swift
case Colombia = "CO"
-
Automatically generated value for country Comoros.
Declaration
Swift
case Comoros = "KM"
-
Automatically generated value for country Congo.
Declaration
Swift
case Congo = "CG"
-
Automatically generated value for country CookIslands.
Declaration
Swift
case CookIslands = "CK"
-
Automatically generated value for country CostaRica.
Declaration
Swift
case CostaRica = "CR"
-
Automatically generated value for country Croatia.
Declaration
Swift
case Croatia = "HR"
-
Automatically generated value for country Cuba.
Declaration
Swift
case Cuba = "CU"
-
Automatically generated value for country Curacao.
Declaration
Swift
case Curacao = "CW"
-
Automatically generated value for country Cyprus.
Declaration
Swift
case Cyprus = "CY"
-
Automatically generated value for country CzechRepublic.
Declaration
Swift
case CzechRepublic = "CZ"
-
Automatically generated value for country DemocraticRepublicoftheCongo.
Declaration
Swift
case DemocraticRepublicoftheCongo = "CD"
-
Automatically generated value for country Denmark.
Declaration
Swift
case Denmark = "DK"
-
Automatically generated value for country Djibouti.
Declaration
Swift
case Djibouti = "DJ"
-
Automatically generated value for country Dominica.
Declaration
Swift
case Dominica = "DM"
-
Automatically generated value for country DominicanRepublic.
Declaration
Swift
case DominicanRepublic = "DO"
-
Automatically generated value for country EastTimor.
Declaration
Swift
case EastTimor = "TL"
-
Automatically generated value for country Ecuador.
Declaration
Swift
case Ecuador = "EC"
-
Automatically generated value for country Egypt.
Declaration
Swift
case Egypt = "EG"
-
Automatically generated value for country ElSalvador.
Declaration
Swift
case ElSalvador = "SV"
-
Automatically generated value for country EquatorialGuinea.
Declaration
Swift
case EquatorialGuinea = "GQ"
-
Automatically generated value for country Eritrea.
Declaration
Swift
case Eritrea = "ER"
-
Automatically generated value for country Estonia.
Declaration
Swift
case Estonia = "EE"
-
Automatically generated value for country Ethiopia.
Declaration
Swift
case Ethiopia = "ET"
-
Automatically generated value for country FalklandIslands.
Declaration
Swift
case FalklandIslands = "FK"
-
Automatically generated value for country FaroeIslands.
Declaration
Swift
case FaroeIslands = "FO"
-
Automatically generated value for country Fiji.
Declaration
Swift
case Fiji = "FJ"
-
Automatically generated value for country Finland.
Declaration
Swift
case Finland = "FI"
-
Automatically generated value for country France.
Declaration
Swift
case France = "FR"
-
Automatically generated value for country FrenchGuiana.
Declaration
Swift
case FrenchGuiana = "GF"
-
Automatically generated value for country FrenchPolynesia.
Declaration
Swift
case FrenchPolynesia = "PF"
-
Automatically generated value for country FrenchSouthernAntarcticLands.
Declaration
Swift
case FrenchSouthernAntarcticLands = "TF"
-
Automatically generated value for country Gabon.
Declaration
Swift
case Gabon = "GA"
-
Automatically generated value for country Gambia.
Declaration
Swift
case Gambia = "GM"
-
Automatically generated value for country Georgia.
Declaration
Swift
case Georgia = "GE"
-
Automatically generated value for country Germany.
Declaration
Swift
case Germany = "DE"
-
Automatically generated value for country Ghana.
Declaration
Swift
case Ghana = "GH"
-
Automatically generated value for country Gibraltar.
Declaration
Swift
case Gibraltar = "GI"
-
Automatically generated value for country GreatBritain.
Declaration
Swift
case GreatBritain = "GB"
-
Automatically generated value for country Greece.
Declaration
Swift
case Greece = "GR"
-
Automatically generated value for country Greenland.
Declaration
Swift
case Greenland = "GL"
-
Automatically generated value for country Grenada.
Declaration
Swift
case Grenada = "GD"
-
Automatically generated value for country Guadeloupe.
Declaration
Swift
case Guadeloupe = "GP"
-
Automatically generated value for country Guam.
Declaration
Swift
case Guam = "GU"
-
Automatically generated value for country Guatemala.
Declaration
Swift
case Guatemala = "GT"
-
Automatically generated value for country Guernsey.
Declaration
Swift
case Guernsey = "GG"
-
Automatically generated value for country Guinea.
Declaration
Swift
case Guinea = "GN"
-
Automatically generated value for country GuineaBissau.
Declaration
Swift
case GuineaBissau = "GW"
-
Automatically generated value for country Guyana.
Declaration
Swift
case Guyana = "GY"
-
Automatically generated value for country Haiti.
Declaration
Swift
case Haiti = "HT"
-
Automatically generated value for country Honduras.
Declaration
Swift
case Honduras = "HN"
-
Automatically generated value for country HongKong.
Declaration
Swift
case HongKong = "HK"
-
Automatically generated value for country Hungary.
Declaration
Swift
case Hungary = "HU"
-
Automatically generated value for country Iceland.
Declaration
Swift
case Iceland = "IS"
-
Automatically generated value for country India.
Declaration
Swift
case India = "IN"
-
Automatically generated value for country Indonesia.
Declaration
Swift
case Indonesia = "ID"
-
Automatically generated value for country Iran.
Declaration
Swift
case Iran = "IR"
-
Automatically generated value for country Iraq.
Declaration
Swift
case Iraq = "IQ"
-
Automatically generated value for country Ireland.
Declaration
Swift
case Ireland = "IE"
-
Automatically generated value for country IsleofMan.
Declaration
Swift
case IsleofMan = "IM"
-
Automatically generated value for country Israel.
Declaration
Swift
case Israel = "IL"
-
Automatically generated value for country Italy.
Declaration
Swift
case Italy = "IT"
-
Automatically generated value for country IvoryCoast.
Declaration
Swift
case IvoryCoast = "CI"
-
Automatically generated value for country Jamaica.
Declaration
Swift
case Jamaica = "JM"
-
Automatically generated value for country Japan.
Declaration
Swift
case Japan = "JP"
-
Automatically generated value for country Jordan.
Declaration
Swift
case Jordan = "JO"
-
Automatically generated value for country Kazakhstan.
Declaration
Swift
case Kazakhstan = "KZ"
-
Automatically generated value for country Kenya.
Declaration
Swift
case Kenya = "KE"
-
Automatically generated value for country Kiribati.
Declaration
Swift
case Kiribati = "KI"
-
Automatically generated value for country Kuwait.
Declaration
Swift
case Kuwait = "KW"
-
Automatically generated value for country Kyrgyzstan.
Declaration
Swift
case Kyrgyzstan = "KG"
-
Automatically generated value for country Laos.
Declaration
Swift
case Laos = "LA"
-
Automatically generated value for country Latvia.
Declaration
Swift
case Latvia = "LV"
-
Automatically generated value for country Lebanon.
Declaration
Swift
case Lebanon = "LB"
-
Automatically generated value for country Lesotho.
Declaration
Swift
case Lesotho = "LS"
-
Automatically generated value for country Liberia.
Declaration
Swift
case Liberia = "LR"
-
Automatically generated value for country Libya.
Declaration
Swift
case Libya = "LY"
-
Automatically generated value for country Liechtenstein.
Declaration
Swift
case Liechtenstein = "LI"
-
Automatically generated value for country Lithuania.
Declaration
Swift
case Lithuania = "LT"
-
Automatically generated value for country Luxembourg.
Declaration
Swift
case Luxembourg = "LU"
-
Automatically generated value for country Macau.
Declaration
Swift
case Macau = "MO"
-
Automatically generated value for country Macedonia.
Declaration
Swift
case Macedonia = "MK"
-
Automatically generated value for country Madagascar.
Declaration
Swift
case Madagascar = "MG"
-
Automatically generated value for country Malawi.
Declaration
Swift
case Malawi = "MW"
-
Automatically generated value for country Malaysia.
Declaration
Swift
case Malaysia = "MY"
-
Automatically generated value for country Maldives.
Declaration
Swift
case Maldives = "MV"
-
Automatically generated value for country Mali.
Declaration
Swift
case Mali = "ML"
-
Automatically generated value for country Malta.
Declaration
Swift
case Malta = "MT"
-
Automatically generated value for country MarshallIslands.
Declaration
Swift
case MarshallIslands = "MH"
-
Automatically generated value for country Martinique.
Declaration
Swift
case Martinique = "MQ"
-
Automatically generated value for country Mauritania.
Declaration
Swift
case Mauritania = "MR"
-
Automatically generated value for country Mauritius.
Declaration
Swift
case Mauritius = "MU"
-
Automatically generated value for country Mayotte.
Declaration
Swift
case Mayotte = "YT"
-
Automatically generated value for country Mexico.
Declaration
Swift
case Mexico = "MX"
-
Automatically generated value for country Micronesia.
Declaration
Swift
case Micronesia = "FM"
-
Automatically generated value for country Moldova.
Declaration
Swift
case Moldova = "MD"
-
Automatically generated value for country Monaco.
Declaration
Swift
case Monaco = "MC"
-
Automatically generated value for country Mongolia.
Declaration
Swift
case Mongolia = "MN"
-
Automatically generated value for country Montenegro.
Declaration
Swift
case Montenegro = "ME"
-
Automatically generated value for country Montserrat.
Declaration
Swift
case Montserrat = "MS"
-
Automatically generated value for country Morocco.
Declaration
Swift
case Morocco = "MA"
-
Automatically generated value for country Mozambique.
Declaration
Swift
case Mozambique = "MZ"
-
Automatically generated value for country Myanmar.
Declaration
Swift
case Myanmar = "MM"
-
Automatically generated value for country Namibia.
Declaration
Swift
case Namibia = "NA"
-
Automatically generated value for country Nepal.
Declaration
Swift
case Nepal = "NP"
-
Automatically generated value for country Netherlands.
Declaration
Swift
case Netherlands = "NL"
-
Automatically generated value for country NewCaledonia.
Declaration
Swift
case NewCaledonia = "NC"
-
Automatically generated value for country NewZealand.
Declaration
Swift
case NewZealand = "NZ"
-
Automatically generated value for country Nicaragua.
Declaration
Swift
case Nicaragua = "NI"
-
Automatically generated value for country Niger.
Declaration
Swift
case Niger = "NE"
-
Automatically generated value for country Nigeria.
Declaration
Swift
case Nigeria = "NG"
-
Automatically generated value for country Niue.
Declaration
Swift
case Niue = "NU"
-
Automatically generated value for country NorfolkIsland.
Declaration
Swift
case NorfolkIsland = "NF"
-
Automatically generated value for country NorthKorea.
Declaration
Swift
case NorthKorea = "KP"
-
Automatically generated value for country NorthernMarianaIslands.
Declaration
Swift
case NorthernMarianaIslands = "MP"
-
Automatically generated value for country Norway.
Declaration
Swift
case Norway = "NO"
-
Automatically generated value for country Oman.
Declaration
Swift
case Oman = "OM"
-
Automatically generated value for country Pakistan.
Declaration
Swift
case Pakistan = "PK"
-
Automatically generated value for country Palau.
Declaration
Swift
case Palau = "PW"
-
Automatically generated value for country PalestinianTerritories.
Declaration
Swift
case PalestinianTerritories = "PS"
-
Automatically generated value for country Panama.
Declaration
Swift
case Panama = "PA"
-
Automatically generated value for country PapuaNewGuinea.
Declaration
Swift
case PapuaNewGuinea = "PG"
-
Automatically generated value for country Paraguay.
Declaration
Swift
case Paraguay = "PY"
-
Automatically generated value for country Peru.
Declaration
Swift
case Peru = "PE"
-
Automatically generated value for country Philippines.
Declaration
Swift
case Philippines = "PH"
-
Automatically generated value for country PitcairnIslands.
Declaration
Swift
case PitcairnIslands = "PN"
-
Automatically generated value for country Poland.
Declaration
Swift
case Poland = "PL"
-
Automatically generated value for country Portugal.
Declaration
Swift
case Portugal = "PT"
-
Automatically generated value for country PuertoRico.
Declaration
Swift
case PuertoRico = "PR"
-
Automatically generated value for country Qatar.
Declaration
Swift
case Qatar = "QA"
-
Automatically generated value for country ReunionIsland.
Declaration
Swift
case ReunionIsland = "RE"
-
Automatically generated value for country Romania.
Declaration
Swift
case Romania = "RO"
-
Automatically generated value for country Russia.
Declaration
Swift
case Russia = "RU"
-
Automatically generated value for country Rwanda.
Declaration
Swift
case Rwanda = "RW"
-
Automatically generated value for country SaintBarthélemy.
Declaration
Swift
case SaintBarthélemy = "BL"
-
Automatically generated value for country SaintHelenaAscensionandTristandaCunha.
Declaration
Swift
case SaintHelenaAscensionandTristandaCunha = "SH"
-
Automatically generated value for country SaintKittsandNevis.
Declaration
Swift
case SaintKittsandNevis = "KN"
-
Automatically generated value for country SaintLucia.
Declaration
Swift
case SaintLucia = "LC"
-
Automatically generated value for country SaintMartin.
Declaration
Swift
case SaintMartin = "MF"
-
Automatically generated value for country SaintPierreandMiquelon.
Declaration
Swift
case SaintPierreandMiquelon = "PM"
-
Automatically generated value for country SaintVincentandtheGrenadines.
Declaration
Swift
case SaintVincentandtheGrenadines = "VC"
-
Automatically generated value for country Samoa.
Declaration
Swift
case Samoa = "WS"
-
Automatically generated value for country SaudiArabia.
Declaration
Swift
case SaudiArabia = "SA"
-
Automatically generated value for country SãoToméandPríncipe.
Declaration
Swift
case SãoToméandPríncipe = "ST"
-
Automatically generated value for country Senegal.
Declaration
Swift
case Senegal = "SN"
-
Automatically generated value for country Serbia.
Declaration
Swift
case Serbia = "CS"
-
Automatically generated value for country Seychelles.
Declaration
Swift
case Seychelles = "SC"
-
Automatically generated value for country SierraLeone.
Declaration
Swift
case SierraLeone = "SL"
-
Automatically generated value for country Singapore.
Declaration
Swift
case Singapore = "SG"
-
Automatically generated value for country SintMaarten.
Declaration
Swift
case SintMaarten = "SX"
-
Automatically generated value for country Slovakia.
Declaration
Swift
case Slovakia = "SK"
-
Automatically generated value for country Slovenia.
Declaration
Swift
case Slovenia = "SI"
-
Automatically generated value for country SolomonIslands.
Declaration
Swift
case SolomonIslands = "SB"
-
Automatically generated value for country Somalia.
Declaration
Swift
case Somalia = "SO"
-
Automatically generated value for country SouthAfrica.
Declaration
Swift
case SouthAfrica = "ZA"
-
Automatically generated value for country SouthGeorgia.
Declaration
Swift
case SouthGeorgia = "GS"
-
Automatically generated value for country SouthKorea.
Declaration
Swift
case SouthKorea = "KR"
-
Automatically generated value for country SouthSudan.
Declaration
Swift
case SouthSudan = "SS"
-
Automatically generated value for country Spain.
Declaration
Swift
case Spain = "ES"
-
Automatically generated value for country SriLanka.
Declaration
Swift
case SriLanka = "LK"
-
Automatically generated value for country Sudan.
Declaration
Swift
case Sudan = "SD"
-
Automatically generated value for country Surinam.
Declaration
Swift
case Surinam = "SR"
-
Automatically generated value for country Swaziland.
Declaration
Swift
case Swaziland = "SZ"
-
Automatically generated value for country Sweden.
Declaration
Swift
case Sweden = "SE"
-
Automatically generated value for country Switzerland.
Declaration
Swift
case Switzerland = "CH"
-
Automatically generated value for country Syria.
Declaration
Swift
case Syria = "SY"
-
Automatically generated value for country Taiwan.
Declaration
Swift
case Taiwan = "TW"
-
Automatically generated value for country Tajikistan.
Declaration
Swift
case Tajikistan = "TJ"
-
Automatically generated value for country Tanzania.
Declaration
Swift
case Tanzania = "TZ"
-
Automatically generated value for country Thailand.
Declaration
Swift
case Thailand = "TH"
-
Automatically generated value for country Togo.
Declaration
Swift
case Togo = "TG"
-
Automatically generated value for country Tokelau.
Declaration
Swift
case Tokelau = "TK"
-
Automatically generated value for country Tonga.
Declaration
Swift
case Tonga = "TO"
-
Automatically generated value for country Tunisia.
Declaration
Swift
case Tunisia = "TN"
-
Automatically generated value for country Turkey.
Declaration
Swift
case Turkey = "TR"
-
Automatically generated value for country Turkmenistan.
Declaration
Swift
case Turkmenistan = "TM"
-
Automatically generated value for country TurksandCaicosIslands.
Declaration
Swift
case TurksandCaicosIslands = "TC"
-
Automatically generated value for country UAE.
Declaration
Swift
case UAE = "AE"
-
Automatically generated value for country USVirginIslands.
Declaration
Swift
case USVirginIslands = "VI"
-
Automatically generated value for country USA.
Declaration
Swift
case USA = "US"
-
Automatically generated value for country Uganda.
Declaration
Swift
case Uganda = "UG"
-
Automatically generated value for country Ukraine.
Declaration
Swift
case Ukraine = "UA"
-
Automatically generated value for country Uruguay.
Declaration
Swift
case Uruguay = "UY"
-
Automatically generated value for country Uzbekistan.
Declaration
Swift
case Uzbekistan = "UZ"
-
Automatically generated value for country Vanuatu.
Declaration
Swift
case Vanuatu = "VU"
-
Automatically generated value for country Venezuela.
Declaration
Swift
case Venezuela = "VE"
-
Automatically generated value for country Vietnam.
Declaration
Swift
case Vietnam = "VN"
-
Automatically generated value for country WallisandFutuna.
Declaration
Swift
case WallisandFutuna = "WF"
-
Automatically generated value for country WesternSahara.
Declaration
Swift
case WesternSahara = "EH"
-
Automatically generated value for country Yemen.
Declaration
Swift
case Yemen = "YE"
-
Automatically generated value for country Zaire.
Declaration
Swift
case Zaire = "ZR"
-
Automatically generated value for country Zambia.
Declaration
Swift
case Zambia = "ZM"
-
Automatically generated value for country Zimbabwe.
Declaration
Swift
case Zimbabwe = "ZW"


| Up | TOC | Index | |||||
| << 5 Formal Syntax | < 6.9 Euphoria Trouble-Shooting Guide | Up: 6 Mini-Guides | 6.11 Performance Tips > | 7 Included Tools >> |
6.10 Platform Specific Issues
6.10.1 Introduction
OpenEuphoria currently supports Euphoria on many different platforms. More platforms will be added in the future.
**DOS** platform support has been discontinued.
**Windows** in particular, the 32-bit x86 compatible version ofWindows. The minimum version is Windows 95 Original Equipment Manufacturer Service Release 2.5. EUPHORIA will work on all old and new versions of Windows written after Windows 95. However, to use all of the features you must use Windows XP or later. See ''.
Linux. Linux is inspired by the UNIX operating system. It has recently become very popular on PCs. There are many distributors of Linux, including Red Hat, Debian, Ubuntu, and many more. Linux can be obtained on a CD for a very low price. Linux is an open-source operating system.
FreeBSD. FreeBSD is also based on the UNIX operating system. It is very popular on Internet server machines. It's also open source.
Apple's OS X. OS X is also based on the UNIX operating system. While it is closed source, it is gaining a wide following due to it's ease of use and power.
OpenBSD. Open BSD is also a UNIX-like Operating System and is developed by volunteers.
NetBSD. Net BSD is also a UNIX-like Operating System and is designed to be easily portable to other hardware platforms.
Euphoria source files use various file extensions. The common extensions are:
| extension | application |
|---|---|
| .e | Euphoria include file |
| .ew | Euphoria include file for a Windowed (GUI) application only |
| .ex | Console main program file or any executable program |
| .exw | Windowed (GUI) main program file or a Windows specific program |
| .exu | Unix specific program |
It is convenient to use these file extensions, but they are not mandatory.
The Euphoria for Windows installation file contains eui.exe. It runs Euphoria programs on the Windows 32bit platform.
The Euphoria for Linux .tar file contains only eui. It runs Euphoria programs on the Linux platform.
Other versions of Euphoria are installed by first installing the Linux version of Euphoria, replacing eui with the version of eui for that Operating System, then rebuilding the other binaries from the source.
Sometimes you'll find that the majority of your code will be the same on all platforms, but some small parts will have to be written differently for each platform. Use the ifdef statement to tell you which platform you are currently running on.
You can also use the platform and platform_name functions:
printf(1, "Our platform number is: %d", {platform()})
The evaluation of platform occurs at 'runtime', you may even use a switch statement with it.
switch platform() do case WINDOWS then -- Windows code case LINUX then -- LINUX code case FREEBSD,NETBSD then -- BSD code ... etc case else crash("Unsupported platform") end switch
Another way is to use parse-time evaluation using ifdefs.
ifdef WINDOWS then -- Windows code elsifdef LINUX then -- LINUX code elsifdef FREEBSD or NETBSD then -- BSD code elsedef crash("Unsupported platform") end ifdef
With parse-time evalution you get faster execution, for there is no conditional in the final code. You can put this deeply inside a loop without penalty. You can test for UNIX to see if the platform has Unix-like properties and thus will work on new Unix-like platforms without modification. You can even put statements that are top-level, such as constant and routine defintions. However, since the interpreter skips over the platforms you are not running on, syntax errors can hide in this construct and if you misspell an OS name you will not get warned.
ifdef UNIX then public constant SLASH='/' public constant SLASHES = "/" public constant EOLSEP = "\n" public constant PATHSEP = ':' public constant NULLDEVICE = "/dev/null" ifdef OSX then public constant SHARED_LIB_EXT = "dylib" elsedef public constant SHARED_LIB_EXT = "so" end ifdef public constant FOO = SLASH == PATHSEP -- this has a hidden syntax error elsifdef WINDOWS then public constant SLASH='\\' public constant SLASHES = "\\/:" public constant EOLSEP = "\r\n" public constant PATHSEP = ';' public constant NULLDEVICE = "NUL:" public constant SHARED_LIB_EXT = "dll" elsifdef TRASHOS then -- this symbol is never defined -- no error here either end ifdef
In this above example, we have constant declarations which are different according to OS such things. The line with FOO has a syntax error but your interpreter will not catch it if you are running Windows. There is no OS with the name 'TRASHOS'. I simply made it up and this construct will not warn you about mistakes like these.
Run-time evalution provides you something that is always syntax-checked and you can even make expressions using comparatives to avoid both parse-time and run-time branching all together.
add_code = { -- first int argument is at stack offset +4, 2nd int is at +8 #8B, #44, #24, #04, -- mov eax, +4[esp] #03, #44, #24, #08, -- add eax, +8[esp] #C2, #00, #08 * (platform() = WINDOWS) -- ret 8 -- pop 8 bytes off the stack }
This is machine code to be put into memory as an example from .../euphoria/demo/callmach.ex. Here if platform() = WINDOWS is true, then the code will pop 8 bytes off of the stack, if not it will pop 0 bytes off of the stack. This has to be done because of where the function call conventions are implemented in the various compilers. We use Watcom C for Windows and GCC for the others. Now if the programmer had put a non-existent symbol, such as ARCH64, the parser would stop, point out the error, and the programmer would then fix it.
6.10.2 The Discontinued DOS32 Platform
This platform is no longer supported.
Those interested in writing DOS programs in Euphoria may use version 3.1 downloadable from the original ~RapidEuphoria website: http://www.rapideuphoria.com/v20.htm.
The DOS32 platform was for computers without Windows OS, and though people could still use the Euphoria binaries built for this platform on Windows, it was slower than and lacked features available on binaries built for the WINDOWS platform.
The binaries for this platform had support for low-level graphics and though DOS was 16-bit, the Euphoria binaries for DOS32 used techniques that allowed you to use 32-bit addresses transparently, hence the name of the platform: DOS32. However, in this platform you could not use dynamically loaded libraries and filenames had to be in a format of: eight letters, a dot, and three letters when creating a file. You could not use the Windowing system even if your computer had Windows. You were limited to full-sreen mode graphics and the text console.
6.10.3 The Windows Platform
With the Windows platform, your programs can still use the text console. Because most library routines work the same way on each platform most text mode programs can be run using the console interpreter of any platform without any change.
Since the Euphoria interpreter can work directly with your OS you can also create GUI programs. You can use a user submitted library from the archive or handle calls directly into the DLLs. There are high-level graphics libraries for Direct3D and OpenGL available from the Euphoria Web site.
A console window will be created automatically when a Windows Euphoria program first outputs something to the screen or reads from the keyboard. If your program is displaying a screen, you will also see a console window when you read standard input or write to standard output, even when these have been redirected to files. The console will disappear when your program finishes execution, or via a call to free_console.
If you don't want a console to appear, it might help to put the following statements at the top of your Euphoria program:
-- Now, when there is input or output to the console we will get an error -- and see in which line number this happens. close(STDOUT) close(STDIN)
Now with these lines the interpreter is forced to give you a runtime error, report where in the program the standard input or output is used. It can be hard to find the offending I/O statement in programs that contain many commented out or debug mode only console I/O statements.
If you actually *want* to use the console, and there is something on the console that you want your user to read, you should prompt them and wait for his input before terminating. To prevent the console from quickly disappearing you might include a statement such as:
include std/console.e any_key("Press any key to close this Window")
which will wait for the user enters something.
If you want to run an interpreted Euphoria program to use the current console use eui.exe but if you want it to create a new console window use euiw.exe.
Programs translated by the translator for this platform will also pop up a new console whenever input is asked for our output is sent to the screen unless you specify the -CON option.
When running an interpreter or translator for the Windows platform, platform returns WINDOWS and a parsetime branch (with ifdef/end ifdef) with WINDOWS will be followed.
In order to use sockets you must have Windows 2000 Professional or later. In order for the the routines has_console and maybe_any_key to have useful behavior you must have Windows XP or later.
<IP_ADDRESS> High-Level Windows Programming
Thanks to David Cuny, Derek Parnell, Judith Evans and many others, there's a package called Win32Lib that you can use to develop Windows GUI applications in Euphoria. It's remarkably easy to learn and use, and comes with good documentation and many small example programs.
If you have a SVN client, you can get a Euphoria version 4.0-compatible Win32lib at:
https://win32libex.svn.sourceforge.net/svnroot/win32libex/trunk.
Get version 68.
There is also an IDE, by Judith Evans for use with Win32lib. https://euvide.svn.sourceforge.net/svnroot/euvide.
Matt Lewis has developed a wrapper for the wxWidgets library for Euphoria: wxEuphoria. It is cross-platform.
You can download WxEuphoria, Win32Lib and Judith's IDE from the Euphoria Web site.
<IP_ADDRESS> Low-Level WINDOWS Programming
To allow access to Windows at a lower level, Euphoria provides a mechanism for calling any C function in any Windows API .dll file, or indeed in any 32-bit Windows .dll file that you create or someone else creates. There is also a call-back mechanism that lets Windows call your Euphoria routines. Call-backs are necessary when you create a graphical user interface.
To make full use of the Windows platform, you need documentation on 32-bit Windows programming, in particular the Windows Application Program Interface (API), including the C structures defined by the API. There is a large WINDOWS.HLP file (c) Microsoft that is available with many programming tools for Windows. There are numerous books available on the subject of Windows programming for C/C++. You can adapt most of what you find in those books to the world of Euphoria programming for Windows. A good book is Programming Windows by Charles Petzold.
A Windows API Windows help file (8 Mb) can be downloaded from ftp://ftp.borland.com/pub/delphi/techpubs/delphi2/win32.zip, Borland's Web site.
6.10.4 The Unix Platforms
As with Windows, you can write text on a console, or xterm window, in multiple colors and at any line or column position.
Just as in Windows, you can call C routines in shared libraries and C code can call back to your Euphoria routines.
You can get a Euphoria interface to high level graphics library OpenGL from the Euphoria Web site. OpenGL also works with Windows.
Easy X-windows GUI programming is available using either Irv Mullin's EuGTK interface to the GTK GUI library, or wxEuphoria developed by Matt Lewis. wxEuphoria also runs on Windows.
When porting code from Windows to Unix, you'll notice the following differences:
- Some of the numbers assigned to the 16 main colors in graphics.e are different. If you use the constants defined in graphics.e you won't have a problem. If you hard-code your color numbers you will see that blue and red have been switched etc.
- The key codes for special keys such as Home, End, arrow keys are different, and there are some additional differences when you run under XTERM.
- The Enter key is code 10 (line-feed) on Linux, where on Windows it was 13 (carriage-return).
- Other OSes use '/' (slash) on file paths. Windows use '\' (backslash). If you use the SLASH constant from std/filesys.e you don't have to worry about this however.
- Calls to system and system_exec that contain Windows commands will obviously have to be changed to the corresponding Linux or FreeBSD command. e.g. "DEL" becomes "rm", and "MOVE" becomes "mv". Often you can use a standard library call instead and it will be portable across platforms. For example you can use filesys:create_directory or filesys:delete_file.
When running an interpreter or translator for a Unix platform, platform will return one of the several symbols for UNIX and a parsetime branch (with ifdef/end ifdef) with UNIX and the symbol that is that of the specific OS will be followed.
We assume that the environment is always run from some kind of CLI in two routines: The routine has_console always returns 0, and maybe_any_key never waits for key input.
6.10.5 Interfacing with C Code
On Windows and Unix it is possible to interface Euphoria code with C code. Your Euphoria program can call C routines and read and write C variables. C routines can even call ("callback") your Euphoria routines. The C code must reside in a dynamic link or shared library. By interfacing with dynamic link libraries and shared libraries, you can access the full programming interface on these systems.
Using the Euphoria to C Translator, you can translate Euphoria routines to C, and compile them into a shared library file. You can pass Euphoria atoms and sequences to these compiled Euphoria routines, and receive Euphoria data as a result. Translated/compiled routines typically run much faster than interpreted routines. For more information, see the Translator.
<IP_ADDRESS> Calling C Functions
To call a C function in a shared library file you must perform the following steps:
- Open the shared library file that contains the C function by calling open_dll.
- Define the C function, by calling define_c_func or define_c_proc. This tells Euphoria the number and type of the arguments as well as the type of value returned.
Euphoria currently supports all C integer and pointer types as arguments and return values. It also supports floating-point arguments and return values (C double type). It is currently not possible to pass C structures by value or receive a structure as a function result, although you can certainly pass a pointer to a structure and get a pointer to a structure as a return value. Passing C structures by value is rarely required for operating system calls.
Euphoria also supports all forms of Euphoria data - atoms and arbitrarily-complex sequences, as arguments to translated/compiled Euphoria routines. - Call the C function by calling c_func or c_proc
include dll.e atom user32 integer LoadIcon, icon user32 = open_dll("user32.dll") -- The name of the routine in user32.dll is "LoadIconA". -- It takes a pointer and an 32-bit integers as arguments, -- and it returns a 32-bit integer. LoadIcon = define_c_func(user32, "LoadIconA", {C_POINTER, C_INT}, C_INT) icon = c_func(LoadIcon, {NULL, IDI_APPLICATION})
See c_func, c_proc, define_c_func, define_c_proc, open_dll
See demo\win32 or demo/linux for example programs.
On Windows there is more than one C calling convention. The Windows API routines all use the __stdcall convention. Most C compilers however have __cdecl as their default. __cdecl allows for variable numbers of arguments to be passed. Euphoria assumes __stdcall, but if you need to call a C routine that uses __cdecl, you can put a '+' sign at the start of the routine name in define_c_proc and define_c_func. In the example above, you would have "+LoadIconA", instead of "LoadIconA".
You can examine a dll file by right-clicking on it, and choosing "QuickView" (if it's on your system). You will see a list of all the C routines that the dll exports.
To find out which .dll file contains a particular Windows C function, run Euphoria\demo\win32\dsearch.exw
<IP_ADDRESS> Accessing C Variables
You can get the address of a C variable using define_c_var. You can then use poke and peek to access the value of the variable.
<IP_ADDRESS> Accessing C Structures
Many C routines require that you pass pointers to structures. You can simulate C structures using allocated blocks of memory. The address returned by allocate can be passed as if it were a C pointer.
You can read and write members of C structures using peek and poke, or peek4u, peek4s, and poke4. You can allocate space for structures using allocate.
You must calculate the offset of a member of a C structure. This is usually easy, because anything in C that needs 4 bytes will be assigned 4 bytes in the structure. Thus C int's, char's, unsigned int's, pointers to anything, etc. will all take 4 bytes. If the C declaration looks like:
// Warning C code ahead! struct example { int a; // offset 0 char *b; // offset 4 char c; // offset 8 long d; // offset 12 };
To allocate space for "struct example" you would need:
atom p = allocate(16) -- size of "struct example"
The address that you get from allocate is always at least 4-byte aligned. This is useful, since Windows structures are supposed to start on a 4-byte boundary. Fields within a C structure that are 4-bytes or more in size must start on a 4-byte boundary in memory. 2-byte fields must start on a 2-byte boundary. To achieve this you may have to leave small gaps within the structure. In practice it is not hard to align most structures since 90% of the fields are 4-byte pointers or 4-byte integers.
You can set the fields using something like:
poke4(p + 0, a) poke4(p + 4, b) poke4(p + 8, c) poke4(p +12, d)
You can read a field with something like:
d = peek4(p+12)
- Tip:
- For readability, make up Euphoria constants for the field offsets. See Example below.
constant RECT_LEFT = 0, RECT_TOP = 4, RECT_RIGHT = 8, RECT_BOTTOM = 12, RECT_SIZEOF = 16 atom rect = allocate(RECT_SIZEOF) poke4(rect + RECT_LEFT, 10) poke4(rect + RECT_TOP, 20) poke4(rect + RECT_RIGHT, 90) poke4(rect + RECT_BOTTOM, 100) -- pass rect as a pointer to a C structure -- hWnd is a "handle" to the window if not c_func(InvalidateRect, {hWnd, rect, 1}) then puts(2, "InvalidateRect failed\n") end if
The Euphoria code that accesses C routines and data structures may look a bit ugly, but it will typically form just a small part of your program, especially if you use Win32Lib, EuWinGUI, or Irv Mullin's X Windows library. Most of your program will be written in pure Euphoria, which will give you a big advantage over those forced to code in C.
<IP_ADDRESS> Call-backs to your Euphoria routines
When you create a window, the Windows operating system will need to call your Euphoria routine. To set this up, you must get a 32-bit "call-back" address for your routine and give it to Windows. For example (taken from demo\win32\window.exw):
integer id atom WndProcAddress id = routine_id("WndProc") WndProcAddress = call_back(id)
routine_id uniquely identifies a Euphoria procedure or function by returning an integer value. This value can be used later to call the routine. You can also use it as an argument to the call_back function.
In the example above, The 32-bit call-back address, WndProcAddress, can be stored in a C structure and passed to Windows via the ~RegisterClass() C API function.
This gives Windows the ability to call the Euphoria routine, ~WndProc(), whenever the user performs an action on a certain class of window. Actions include clicking the mouse, typing a key, resizing the window etc.
See the window.exw demo program for the whole story.
- Note:
- It is possible to get a call-back address for any Euphoria routine that meets the following conditions: * the routine must be a function, not a procedure * it must have from 0 to 9 parameters * the parameters should all be of type atom (or integer etc.), not sequence * the return value should be an integer value up to 32-bits in size
The values that are passed to your Euphoria routine can be any 32-bit unsigned atoms, i.e. non-negative. Your routine could choose to interpret large positive numbers as negative if that is desirable. For instance, if a C routine tried to pass you -1, it would appear as hex FFFFFFFF. If a value is passed that does not fit the type you have chosen for a given parameter, a Euphoria type-check error may occur (depending on type_check)
No error will occur if you declare all parameters as atom.
Normally, as in the case of ~WndProc() above, Windows initiates these call-backs to your routines. It is also possible for a C routine in any .dll to call one of your Euphoria routines. You just have to declare the C routine properly, and pass it the call-back address.
Here's an example of a WATCOM C routine that takes your call-back address as its only parameter, and then calls your 3-parameter Euphoria routine:
/* 1-parameter C routine that you call from Euphoria */ unsigned EXPORT APIENTRY test1( LRESULT CALLBACK (*eu_callback)(unsigned a, unsigned b, unsigned c)) { /* Your 3-parameter Euphoria routine is called here via eu_callback pointer */ return (*eu_callback)(111, 222, 333); }
The C declaration above declares test1 as an externally-callable C routine that takes a single parameter. The single parameter is a pointer to a routine that takes 3 unsigned parameters - i.e. your Euphoria routine.
In WATCOM C, "CALLBACK" is the same as "__stdcall". This is the calling convention that's used to call Windows API routines, and the C pointer to your Euphoria routine should be declared this way too, or you'll get an error when your Euphoria routine tries to return to your .DLL.
If you need your Euphoria routine to be called using the __cdecl convention, you must code the call to call_back as:
myroutineaddr = call_back({'+', id})
The plus sign and braces indicate the __cdecl convention. The simple case, with no braces, is __stdcall.
In the example above, your Euphoria routine will be passed the three values 111, 222 and 333 as arguments. Your routine will return a value to test1. That value will then be immediately returned to the caller of test1 (which could be at some other place in your Euphoria program).
A call-back address can be passed to the UNIX signal() function to specify a Euphoria routine to handle various signals (e.g. SIGTERM). It can also be passed to C routines such as qsort, to specify a Euphoria comparison function.


Indoor Positioning plugin for Cordova
Kabisa developed a Cordova plugin that wraps Signify's SDK for indoor positioning. This plugin is publicly available for anyone that wants to develop cross-platform mobile apps using Cordova.
This plugin requires Signify's indoor positioning SDK for Android and iOS, which we don't distribute. Contact Signify for more information concerning these SDKs.
The source code, installation instructions, and technical documentation for this plugin is available on Github:
If you need more information or support regarding this plugin, just get in touch with Kabisa.


we need to look in json. then check actual latest db. if db date is newer, then do run for the pair. then check action and date of action. must be date of action: 1. oppisite (if we did real buy, we want to find a sell and oppisite), 2. date of action is after this date of action
| Symbol |
Symbol Name |
Run Date |
Action |
Action Date |
Rate |
First Pair |
Second Pair |
Date Newest db |
Shaar Newest db |
| {{val.symbol}} |
{{val.symbol_name}} |
{{val.run_date}} |
{{val.action}} |
{{val.action_date}} |
{{val.actual_shaar}} |
{{val.first_pair}} |
{{val.second_pair}} |
{{val.newest_date_db}} |
{{val.newest_shaar_db}} |


Package org.bitcoinj.core
The core package contains classes for network messages like
Block
and
Transaction
, peer connectivity via PeerGroup
,
and block chain management.
If what you're doing can be described as basic bitcoin tasks, the code is probably found here.
To learn more please consult the documentation on the website.-
Interface Summary Interface Description Monetary Classes implementing this interface represent a monetary value, such as a Bitcoin or fiat amount.PeerFilterProvider An interface which provides the information required to properly filter data downloaded from Peers.TransactionBag This interface is used to abstract theWallet
and theTransaction
TransactionBroadcast.ProgressCallback An interface for receiving progress information on the propagation of the tx, from 0.0 to 1.0TransactionBroadcaster A general interface which declares the ability to broadcast transactions.TransactionConfidence.Listener A confidence listener is informed when the level ofTransactionConfidence
is updated by something, like for example aWallet
.UTXOProvider A UTXOProvider encapsulates functionality for returning unspent transaction outputs, for use by the wallet or other code that crafts spends. -
Class Summary Class Description AbstractBlockChain An AbstractBlockChain holds a series ofBlock
objects, links them together, and knows how to verify that the chain follows the rules of theNetworkParameters
for this chain.Address Base class for addresses, e.g.AddressMessage Represents an "addr" message on the P2P network, which contains broadcast IP addresses of other peers.AlertMessage Alerts are signed messages that are broadcast on the peer-to-peer network if they match a hard-coded signing key.Base58 Base58 is a way to encode Bitcoin addresses (or arbitrary data) as alphanumeric strings.Bech32 Bech32.Bech32Data BitcoinSerializer Methods to serialize and de-serialize messages to the Bitcoin network format as defined in the protocol specification.BitcoinSerializer.BitcoinPacketHeader Block A block is a group of transactions, and is one of the fundamental data structures of the Bitcoin system.BlockChain A BlockChain implements the simplified payment verification mode of the Bitcoin protocol.BlockLocator Represents Block Locator in GetBlocks and GetHeaders messagesBloomFilter A Bloom filter is a probabilistic data structure which can be sent to another client so that it can avoid sending us transactions that aren't relevant to our set of keys.CheckpointManager Vends hard-codedStoredBlock
s for blocks throughout the chain.ChildMessage Represents a Message type that can be contained within another Message.Coin Represents a monetary Bitcoin value.Context The Context object holds various objects and pieces of configuration that are scoped to a specific instantiation of bitcoinj for a specific network.DumpedPrivateKey Parses and generates private keys in the form used by the Bitcoin "dumpprivkey" command.ECKey Represents an elliptic curve public and (optionally) private key, usable for digital signatures but not encryption.ECKey.ECDSASignature Groups the two components that make up a signature, and provides a way to encode to DER form, which is how ECDSA signatures are represented when embedded in other data structures in the Bitcoin protocol.EmptyMessage Parent class for header only messages that don't have a payload.FilteredBlock A FilteredBlock is used to relay a block with its transactions filtered using aBloomFilter
.FullPrunedBlockChain A FullPrunedBlockChain works in conjunction with aFullPrunedBlockStore
to verify all the rules of the Bitcoin system, with the downside being a large cost in system resources.GetAddrMessage Represents the "getaddr" P2P protocol message, which requests networkAddressMessage
s from a peer.GetBlocksMessage Represents the "getblocks" P2P network message, which requests the hashes of the parts of the block chain we're missing.GetDataMessage Represents the "getdata" P2P network message, which requests the contents of blocks or transactions given their hashes.GetHeadersMessage The "getheaders" command is structurally identical to "getblocks", but has different meaning.GetUTXOsMessage This command is supported only by Bitcoin XT nodes, which advertise themselves using the second service bit flag.HeadersMessage A protocol message that contains a repeated series of block headers, sent in response to the "getheaders" command.InventoryItem InventoryMessage Represents the "inv" P2P network message.LegacyAddress A Bitcoin address looks like 1MsScoe2fTJoq4ZPdQgqyhgWeoNamYPevy and is derived from an elliptic curve public key plus a set of network parameters.ListMessage Abstract superclass of classes with list based payload, ie InventoryMessage and GetDataMessage.MemoryPoolMessage The "mempool" message asks a remote peer to announce all transactions in its memory pool, possibly restricted by any Bloom filter set on the connection.Message A Message is a data structure that can be serialized/deserialized using the Bitcoin serialization format.MessageSerializer Generic interface for classes which serialize/deserialize messages.NetworkParameters NetworkParameters contains the data needed for working with an instantiation of a Bitcoin chain.NotFoundMessage Sent by a peer when a getdata request doesn't find the requested data in the mempool.PartialMerkleTree A data structure that contains proofs of block inclusion for one or more transactions, in an efficient manner.Peer A Peer handles the high level communication with a Bitcoin node, extending aPeerSocketHandler
which handles low-level message (de)serialization.PeerAddress A PeerAddress holds an IP address and port number representing the network location of a peer in the Bitcoin P2P network.PeerGroup Runs a set of connections to the P2P network, brings up connections to replace disconnected nodes and manages the interaction between them all.PeerSocketHandler Handles high-level message (de)serialization for peers, acting as the bridge between theorg.bitcoinj.net
classes andPeer
.Ping Instances of this class are not safe for use by multiple threads.Pong Instances of this class are not safe for use by multiple threads.PrefixedChecksummedBytes The following format is often used to represent some type of data (e.g.RejectMessage A message sent by nodes when a message we sent was rejected (ie a transaction had too little fee/was invalid/etc).SegwitAddress Implementation of native segwit addresses.SendHeadersMessage A new message, "sendheaders", which indicates that a node prefers to receive new block announcements via a "headers" message rather than an "inv".Sha256Hash A Sha256Hash just wraps a byte[] so that equals and hashcode work correctly, allowing it to be used as keys in a map.StoredBlock Wraps aBlock
object with extra data that can be derived from the block chain but is slow or inconvenient to calculate.StoredUndoableBlock Contains minimal data necessary to disconnect/connect the transactions in the stored block at will.Transaction A transaction represents the movement of coins from some addresses to some other addresses.TransactionBroadcast Represents a single transaction broadcast that we are performing.TransactionConfidence A TransactionConfidence object tracks data you can use to make a confidence decision about a transaction.TransactionConfidence.Factory TransactionInput A transfer of coins from one address to another creates a transaction in which the outputs can be claimed by the recipient in the input of another transaction.TransactionOutPoint This message is a reference or pointer to an output of a different transaction.TransactionOutput A TransactionOutput message contains a scriptPubKey that controls who is able to spend its value.TransactionOutputChanges TransactionOutputChanges represents a delta to the set of unspent outputs.TransactionWitness TxConfidenceTable Tracks transactions that are being announced across the network.UnknownMessage Instances of this class are not safe for use by multiple threads.UnsafeByteArrayOutputStream An unsynchronized implementation of ByteArrayOutputStream that will return the backing byte array if its length == size().Utils A collection of various utility methods that are helpful for working with the Bitcoin protocol.UTXO A UTXO message contains the information necessary to check a spending transaction.UTXOsMessage Message representing a list of unspent transaction outputs ("utxos"), returned in response to sending aGetUTXOsMessage
("getutxos").VarInt A variable-length encoded unsigned integer using Satoshi's encoding (a.k.a.VersionAck The verack message, sent by a client accepting the version message they received from their peer.VersionMessage A VersionMessage holds information exchanged during connection setup with another peer. -
Enum Summary Enum Description AbstractBlockChain.NewBlockType Block.VerifyFlag Flags used to control which elements of block validation are done on received blocks.BloomFilter.BloomUpdate The BLOOM_UPDATE_* constants control when the bloom filter is auto-updated by the peer using it as a filter, either never, for all outputs or only for P2PK outputs (default)InventoryItem.Type NetworkParameters.ProtocolVersion PeerGroup.FilterRecalculateMode RejectMessage.RejectCode Transaction.Purpose This enum describes the underlying reason the transaction was created.Transaction.SigHash These constants are a part of a scriptSig signature on the inputs.TransactionConfidence.ConfidenceType Describes the state of the transaction in general terms.TransactionConfidence.Listener.ChangeReason An enum that describes why a transaction confidence listener is being invoked (i.e.TransactionConfidence.Source Information about where the transaction was first seen (network, sent direct from peer, created by ourselves).TransactionInput.ConnectionResult TransactionInput.ConnectMode -
Exception Summary Exception Description AddressFormatException AddressFormatException.InvalidCharacter This exception is thrown byBase58
,Bech32
and thePrefixedChecksummedBytes
hierarchy of classes when you try to decode data and a character isn't valid.AddressFormatException.InvalidChecksum This exception is thrown byBase58
,Bech32
and thePrefixedChecksummedBytes
hierarchy of classes when you try to decode data and the checksum isn't valid.AddressFormatException.InvalidDataLength This exception is thrown byBase58
,Bech32
and thePrefixedChecksummedBytes
hierarchy of classes when you try to decode data and the data isn't of the right size.AddressFormatException.InvalidPrefix This exception is thrown by thePrefixedChecksummedBytes
hierarchy of classes when you try and decode an address or private key with an invalid prefix (version header or human-readable part).AddressFormatException.WrongNetwork This exception is thrown by thePrefixedChecksummedBytes
hierarchy of classes when you try and decode an address with a prefix (version header or human-readable part) that used by another network (usually: mainnet vs testnet).ECKey.KeyIsEncryptedException ECKey.MissingPrivateKeyException InsufficientMoneyException Thrown to indicate that you don't have enough money available to perform the requested operation.PeerException Thrown when a problem occurs in communicating with a peer, and we should retry.ProtocolException PrunedException PrunedException is thrown in cases where a fully verifying node has deleted (pruned) old block data that turned out to be necessary for handling a re-org.RejectedTransactionException This exception is used by the TransactionBroadcast class to indicate that a broadcast Transaction has been rejected by the network, for example because it violates a protocol rule.SignatureDecodeException UTXOProviderException VerificationException VerificationException.BlockVersionOutOfDate VerificationException.CoinbaseHeightMismatch VerificationException.CoinbaseScriptSizeOutOfRange VerificationException.DuplicatedOutPoint VerificationException.EmptyInputsOrOutputs VerificationException.ExcessiveValue VerificationException.LargerThanMaxBlockSize VerificationException.NegativeValueOutput VerificationException.UnexpectedCoinbaseInput


Dermot O'Leary claims Nicole is 'most committed' X Factor: Celebrity judge
Dermot O’Leary has revealed his pick for the most committed judge on The X Factor: Celebrity – and if you’re Simon Cowell or Louis Walsh, look away now please.
Apparently, according to the long-serving host himself, Nicole Scherzinger is the most ‘committed’ judge on the show.
A maker of bops and an excellent reality TV show judge? Is there anything this woman can’t do?
Speaking to the former Pussycat Doll on his Radio 2 show today, Dermot said: ‘You’re THE judge. Like if I went on that show and I got in someone else’s category I’d just walk.’
‘You are by far and away the best judge on that show.
‘Because Simon [Cowell]’s always doing, like, 50 million things, Louis [Walsh]’s not even in the room.
‘You are the most committed. And you’re fun.’
Nicole, ever the voice of reason, decided to take on more of a diplomatic approach to the host’s claims.
Advertisement Advertisement
‘I think I’ve seen Louis in the room more often,’ she added. ‘And I think I’ve seen Simon a little bit.
You’re right, Nicole, he really really has, including the upcoming launch of X Factor: The Band in the coming weeks, after he gave contestants just days to apply.
The show follows a similar format to one already announced by Little Mix on the BBC, and Cowell has said he’s putting ‘pressure’ on himself to beat his former proteges.
Let’s hope things between the three judges stay cordial, however, as The X Factor: Celebrity airs its live semi-final tonight.
This comes, of course, after quite the controversy last weekend as contestant Vinnie Jones threatened to quit the show live on air.
The Syco mogul was having none of it, however,and Vinnie has confirmed he will be taking to the stage tonight.
The X Factor: Celebrity airs tonight at 7.40pm on ITV.
Got a showbiz story?
If you've got a story, video or pictures get in touch with the Metro.co.uk Entertainment team by emailing us<EMAIL_ADDRESS>calling 020 3615 2145 or by visiting our Submit Stuff page - we'd love to hear from you.


IMC Summer of Code 2016
Boost has participated in the Google Summer of Code program for a decade and is very grateful for Google's generous past support. This program allows college students to have a paid summer internship working on open source projects, giving them an interesting alternative to summer onsite internships. Because the students that work on Boost libraries tend to stay with the same libraries summer after summer, the continuity of this program is important to Boost and to the students that work on Boost projects.
Boost has traditionally been a model GSoC participant receiving a more than average slot allocation, so we were caught by surprise when Google rejected our 2016 application. They asked us to apply again next year but to sit out 2016 to give open-source projects which don't normally get awarded an opportunity. We understand this rationale, but this policy would mean no summer internships for Boost and leave students that have been working on Boost libraries looking for other alternatives for the summer of 2016.
When IMC Financial Markets learned about this situation, they saw it as an opportunity to support the Boost community and demonstrate their commitment to student development and open source.
IMC worked with Boost to create its own "Boost Summer of Code" program, deliberately patterned after Google's program. IMC also stepped up to underwrite all the costs of this program for the summer of 2016.
We thank IMC for their support and community leadership.


Register authenticator
code
Waiting for the authenticator
Register page
name
username
password
Already registered? Login page
Login page
username
password
Not registered yet? Registration
Hey
!
Logout
Add OTP
Add U2F


Transaction #1
{
link0: "1001",
link1: "470023",
link2: "https://meet.google.com/taq-qcyy-kig",
link3: "100043"
}link0: "1001",
link1: "470023",
link2: "https://meet.google.com/taq-qcyy-kig",
link3: "100043"
}


| Map name | |
| Image to display on map selection (Width 662px) | |
| Map image | |
| The map should be 768x435 | |
| Paths to unlock must NOT be visible on the map | |
| Do not place air nodes, they will be added by the event simulator | |
| Allowed fleets | |
| Available LBAS | |
| Available LBAS to sortie |
| You can add rules that will be checked before any sortie. |
| If the returned "node" is empty or false, the fleet won't be allowed to sortie |
| If no rule, starts at the node called "Start" |
| Map BGM | |||||||||||||||||
| Normal battle BGM (day) | |||||||||||||||||
| Normal battle BGM (night) | |||||||||||||||||
| Boss battle BGM (day) | |||||||||||||||||
| Boss battle BGM (night) | |||||||||||||||||
| Custom BGM per node |
Node
Node : {{node}}
|
| Boss node : |
||
| Transport node : |
||
| Allowed fleets | ||
| Map HP | ||
| Casual | ||
| Easy | ||
| Medium | ||
| Hard | ||
| Handle last dance HP ? | ||
| Casual | ||
| Easy | ||
| Medium | ||
| Hard | ||
| X position of air base for this part | ||
| Y position of air base for this part | ||
| Air base part (use this if only if you want to move AB) |
| Ships | |
| First only ? | |
| Equipments |
|
| Ships | |
| First only ? | |
| Equipments |
|
| Trigger per sortie | |
| Trigger chance | |
| High altitude | |
| Comps |
|
| Load existing event | ||
| Event name | ||
| Event date (used for mechanics, ships/equipments availability, ...) | ||
| Event banner | ||
| Available difficulties | ||
| Allowed fleets | ||
| Allow LBAS | ||
| Allow vanguard formation | ||
| Allow strong friend fleets | ||
| Friend fleets waves |
Wave {{index}}
|


Lyrics of Lowly Life
by Paul Laurence Dunbar
"The Wind and the Sea"
Additional Information
- Year Published: 1913
- Language: English
- Country of Origin: United States of America
- Source: Dunbar, P.L. (1913). The Complete Poems of Paul Laurence Dunbar. New York: Dodd, Mead, and Company.
-
Readability:
- Flesch–Kincaid Level: 6.5
- Word Count: 431
- Genre: Poetry
- ✎ Cite This
Downloads
I stood by the shore at the death of day,
As the sun sank flaming red;
And the face of the waters that spread away
Was as gray as the face of the dead.
And I heard the cry of the wanton sea
And the moan of the wailing wind;
For love’s sweet pain in his heart had he,
But the gray old sea had sinned.
The wind was young and the sea was old,
But their cries went up together;
The wind was warm and the sea was cold,
For age makes wintry weather.
So they cried aloud and they wept amain,
Till the sky grew dark to hear it;
And out of its folds crept the misty rain,
In its shroud, like a troubled spirit.
For the wind was wild with a hopeless love,
And the sea was sad at heart
At many a crime that he wot of,
Wherein he had played his part.
He thought of the gallant ships gone down
By the will of his wicked waves;
And he thought how the church–yard in the town
Held the sea–made widows’ graves.
The wild wind thought of the love he had left
Afar in an Eastern land,
And he longed, as long the much bereft,
For the touch of her perfumed hand.
In his winding wail and his deep–heaved sigh
His aching grief found vent;
While the sea looked up at the bending sky
And murmured: “I repent.”
But e’en as he spoke, a ship came by
That bravely ploughed the main,
And a light came into the sea’s green eye,
And his heart grew hard again.
Then he spoke to the wind: “Friend, seest thou not
Yon vessel is eastward bound?
Pray speed with it to the happy spot
Where thy loved one may be found.”
And the wind rose up in a dear delight,
And after the good ship sped;
But the crafty sea by his wicked might
Kept the vessel ever ahead.
Till the wind grew fierce in his despair,
And white on the brow and lip.
He tore his garments and tore his hair,
And fell on the flying ship.
And the ship went down, for a rock was there,
And the sailless sea loomed black;
While burdened again with dole and care,
The wind came moaning back.
And still he moans from his bosom hot
Where his raging grief lies pent,
And ever when the ships come not,
The sea says: “I repent.”


DURING MY INVESTIGATIONS ON THE ABANDONED SUM, I DISCOVERED THE OWNER AS A GERMAN CITIZEN NAMED MR.ANDREAS SCHRANNER WHO DIED IN A PLANE CRASH WITH HIS ENTIRE FAMILY AND SUBSEQUENTLY THERE IS NO NEXT OF KIN TO HIS ACCOUNT .VISIT THE WEB-SITE AS POSTED DATED .     IT IS HIGHLY CONFIDENTIAL AND RISK FREE BY VIRTUE OF MY POSITION AS AN INSIDER IN THE BANK.   Find. Check out the new MSN Search! http://search.msn.click-url.com/go/onm00200636ave/direct/01/


US CENTCOM Confirms Its Military Convoy Came Under Fire in Syria, Patrol Untouched
WASHINGTON (Sputnik) - A US military convoy in northeastern Syria has come under fire from local Turkey-backed radicals but was not hit, a representative of the Central Command (CENTCOM) of the United States said on Monday.
"On 3 November, a US patrol in northeast Syria witnessed several artillery attacks, shells landed a kilometer or more from the road it was moving on. The patrol was not touched," the CENTCOM spokesman said.
The spokesman added that US forces retain inalienable right to self-defence, saying that the security of the troops is given priority.
Earlier, Major General Yuri Borenkov, head of the Russian Centre for the Reconciliation of Opposing Sides in Syria, said at a briefing that the United States had informed the Russian side of the shelling of the American military by militants from nearby town of Tal Tamer.
In October, US President Donald Trump announced that the US troops had begun pulling out from northern Syria to Iraq. The same month Turkey launched Operation Peace Spring in northeastern Syria to clear the area of Kurdish units and Daesh*.
*Daesh (also known as ISIS/ISIL/IS) is a terrorist group banned in Russia


Amazon pulls skin-lightening products after groups’ concerns
St. Paul, Minnesota - Amazon has pulled more than a dozen skin-lightening products with dangerous levels of mercury off its website after Minnesota public-health and environmental activists raised concerns.
The company’s change came after two groups, the BeautyWell Project and the state branch of the Sierra Club, delivered a petition on Wednesday with over 23,000 signatures to Amazon’s fulfillment center in Shakopee, Minnesota Public Radio News reported.
"For a large retail company selling toxic products to individuals of color, I think it’s so wrong. And these are illegal products,” said Amira Adawe, founder of the BeautyWell Project, who has been educating women on the hazards of creams intended to lighten their skin for about eight years.
Amazon spokeswoman Cecilia Fan said sellers who use their site must follow the proper guidelines.
"And those who don’t will be subject to action, including potential removal of their account. The products in question are no longer available,” she said in an emailed statement Friday.
Fan also pointed out the company’s policy that bans suppliers from selling hazardous products, including ones containing mercury.
On the same day of delivering the petition, the organizations also took out a full-page ad in a local newspaper demanding that the Seattle-based company stop selling toxic skin-lightening creams. The ad had three words in bold print: "Dangerous, racist, and illegal.”
Many such creams remain popular among some communities of color despite containing mercury. Adawe, who has worked on this issue for years locally, is now focused on targeting the retail giants.
She collaborated with the Sierra Club, an environmental advocacy group, in addition to the Mercury Policy Project to examine the skin-lightening creams sold on the Amazon site.
Out of the 24 that were tested, 15 showed high levels of mercury.Such products are not heavily regulated despite having illegal toxins in them, said Mary Blitzer of the local Sierra Club branch.
Adawe said in addition to public health concerns, "it’s a racial thing that keeps encouraging that people should change their skin color, and we don’t want to see that.”
She added that the ultimate test is whether the products remain off Amazon’s site for good. As of Thursday evening, all but one of the 15 products appeared to be removed from the site.
Read also
Read More
Hong Kong's clouds of tear gas spark health panic
Hong Kong residents have become distracted this week by fears of dioxin poisoning, as worry grows about the effects of about 10,000 rounds of tear gas fired across the financial hub over more than five months of anti-government protests.
Read More
First-aid workers slam medic arrests at Hong Kong campus
Hong Kong medical workers on Friday expressed outrage over the arrests this week of a number of colleagues at a university campus occupied by pro-democracy protesters, and called on the government to allow them to do their jobs.


let rec normalize_actual = function
| Symbol (s, xs) ->
Symbol (s, map normalize_actual xs)
| Modifier (x, m) ->
Modifier (normalize_actual x, m)
| Anonymous gs ->
let gs = fold_right normalize_group gs [] in
Anonymous gs
| (** Normalize a production by normalizing its actuals. *) |
and normalize_production p =
map normalize_actual p
(** Normalize a group.
Each production of the group is normalized then inserted in a new
singleton group. As a result, normalize_group returns a list of groups
with only one production each. *) |
and normalize_group productions grs =
let productions = map normalize_production productions in
let ps = map (fun x -> [x]) productions in
ps @ grs


Create a Web App Bot Using Azure Bot Services
In my last post, we create a QnA Maker knowledge base that our Azure Web App Bot will use as it’s repository of questions & answers. Now, we are going to create our bot using Azure’s Bot Services.
First thing is that we should go ahead and log into the Azure Portal. In the top left-hand corner click the Create a resource button. You will then need to Search the marketplace in the New blade for Web App Bot.
Select Web App Bot from the list. You will then be presented with a new blade and asked to Create the resource. Click the Create button now.
Before the Web App Bot is created, you need to fill in the required fields. Most of these fields are straight forward but some need further explanation.
You will need to give your Web App Bot a name and select your Subscription plan. Next, you should select your Resource Group (which was created previously), Location, Pricing tier, and App name.
Next, you need to select a Bot Template. Click the Bot template section and new blade will slide out. There are several different Bot templates to choose from but the one that we need to select for our QnAMaker bot is the Question and Answer bot template.
Now, click Create to create your Web App Bot.
You will be redirected to the Azure dashboard. You will be notified that your Web App Bot has been created successfully in the notification center (looks like bell). Select the notification icon and click Go to resource.
Select the Test in Web Client section in your Web App Bot resource blade and enter any text you like. You should receive the following output:
Please set QnAKnowledgebaseId, QnAAuthKey and QnAEndpointHostName (if applicable) in App Settings. Learn how to get them at https://aka.ms/qnaabssetup
If you remember from the previous post I mentioned that we will need the information presented to you when you created your QnAMaker knowledge base. We will use this information now.
First, select the Application Settings section and scroll down until you see a list of application settings. You should see the following settings next to each other:
- QnAAuthKey
- QnAEndpointHostName
- QnAKnowledgebaseId
These three settings will need a value from our Sample HTTP request from the https://qnamaker.ai website.
Enter your values into the Application Settings pane on your Web App Bot resource and click Save. Next, let’s test out our new Web App Bot. Go to Test in web client again and ask your bot a question.


| Module | ActionController::RecordIdentifier |
| In: |
/usr/lib/ruby/gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_controller/record_identifier.rb
|
The record identifier encapsulates a number of naming conventions for dealing with records, like Active Records or Active Resources or pretty much any other model type that has an id. These patterns are then used to try elevate the view actions to a higher logical level. Example:
# routes resources :posts # view <%= div_for(post) do %> <div id="post_45" class="post"> <%= post.body %> What a wonderful world! <% end %> </div> # controller def destroy post = Post.find(params[:id]) post.destroy respond_to do |format| format.html { redirect_to(post) } # Calls polymorphic_url(post) which in turn calls post_url(post) format.js do # Calls: new Effect.fade('post_45'); render(:update) { |page| page[post].visual_effect(:fade) } end end end
As the example above shows, you can stop caring to a large extent what the actual id of the post is. You just know that one is being assigned and that the subsequent calls in redirect_to and the RJS expect that same naming convention and allows you to write less code if you follow it.
| JOIN | = | '_'.freeze |
| NEW | = | 'new'.freeze |
The DOM class convention is to use the singular form of an object or class. Examples:
dom_class(post) # => "post" dom_class(Person) # => "person"
If you need to address multiple instances of the same class in the same view, you can prefix the dom_class:
dom_class(post, :edit) # => "edit_post" dom_class(Person, :edit) # => "edit_person"
# File /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_controller/record_identifier.rb, line 48 48: def dom_class(record_or_class, prefix = nil) 49: singular = singular_class_name(record_or_class) 50: prefix ? "#{prefix}#{JOIN}#{singular}" : singular 51: end
The DOM id convention is to use the singular form of an object or class with the id following an underscore. If no id is found, prefix with "new_" instead. Examples:
dom_id(Post.find(45)) # => "post_45" dom_id(Post.new) # => "new_post"
If you need to address multiple instances of the same class in the same view, you can prefix the dom_id:
dom_id(Post.find(45), :edit) # => "edit_post_45"
# File /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_controller/record_identifier.rb, line 62 62: def dom_id(record, prefix = nil) 63: if record_id = record_key_for_dom_id(record) 64: "#{dom_class(record, prefix)}#{JOIN}#{record_id}" 65: else 66: dom_class(record, prefix || NEW) 67: end 68: end
Returns the plural class name of a record or class. Examples:
plural_class_name(post) # => "posts" plural_class_name(Highrise::Person) # => "highrise_people"
# File /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_controller/record_identifier.rb, line 93 93: def plural_class_name(record_or_class) 94: model_name_from_record_or_class(record_or_class).plural 95: end
Returns a string representation of the key attribute(s) that is suitable for use in an HTML DOM id. This can be overwritten to customize the default generated string representation if desired. If you need to read back a key from a dom_id in order to query for the underlying database record, you should write a helper like ‘person_record_from_dom_id’ that will extract the key either based on the default implementation (which just joins all key attributes with ’-’) or on your own overwritten version of the method. By default, this implementation passes the key string through a method that replaces all characters that are invalid inside DOM ids, with valid ones. You need to make sure yourself that your dom ids are valid, in case you overwrite this method.
# File /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_controller/record_identifier.rb, line 78 78: def record_key_for_dom_id(record) 79: record = record.to_model if record.respond_to?(:to_model) 80: key = record.to_key 81: key ? sanitize_dom_id(key.join('_')) : key 82: end
Replaces characters that are invalid in HTML DOM ids with valid ones.
# File /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_controller/record_identifier.rb, line 85 85: def sanitize_dom_id(candidate_id) 86: candidate_id # TODO implement conversion to valid DOM id values 87: end
Returns the singular class name of a record or class. Examples:
singular_class_name(post) # => "post" singular_class_name(Highrise::Person) # => "highrise_person"
# File /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.0.beta4/lib/action_controller/record_identifier.rb, line 101 101: def singular_class_name(record_or_class) 102: model_name_from_record_or_class(record_or_class).singular 103: end


ExpLookitGeometryAlternation Class
Deprecated: not yet adapted for use with webrtc recorder. Currently kept in codebase as an example of generating & drawing stimuli on the fly, but can be safely removed.
Frame to implement specific test trial structure for geometry alternation experiment. Includes announcement, calibration, and alternation (test) phases. During "alternation," two streams of triangles are shown, in rectangles on the left and right of the screen: one one side both size and shape change, on the other only size changes. Frame is displayed fullscreen and video recording is conducted during calibration/test.
The geometry randomizer generates a series of ExpLookitGeometryAlternation frames.
This frame is displayed fullscreen; if the frame before it is not, that frame needs to include a manual "next" button so that there's a user interaction event to trigger fullscreen mode. (Browsers don't allow us to switch to FS without a user event.)
"frames": {
"alt-trial": {
"kind": "exp-lookit-geometry-alternation",
"triangleLineWidth": 8,
"calibrationVideoSources": [
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/webm/attention.webm",
"type": "video/webm"
},
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp4/attention.mp4",
"type": "video/mp4"
}
],
"trialLength": 60,
"attnLength": 10,
"calibrationLength": 3000,
"fsAudio": [
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp3/fullscreen.mp3",
"type": "audio/mp3"
},
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/ogg/fullscreen.ogg",
"type": "audio/ogg"
}
],
"triangleColor": "#056090",
"unpauseAudio": [
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp3/return_after_pause.mp3",
"type": "audio/mp3"
},
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/ogg/return_after_pause.ogg",
"type": "audio/ogg"
}
],
"pauseAudio": [
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp3/pause.mp3",
"type": "audio/mp3"
},
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/ogg/pause.ogg",
"type": "audio/ogg"
}
],
"videoSources": [
{
"src": "https://s3.amazonaws.com/lookitcontents/exp-physics-final/stimuli/attention/webm/attentiongrabber.webm",
"type": "video/webm"
},
{
"src": "https://s3.amazonaws.com/lookitcontents/exp-physics-final/stimuli/attention/mp4/attentiongrabber.mp4",
"type": "video/mp4"
}
],
"musicSources": [
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp3/happy-stroll.mp3",
"type": "audio/mp3"
},
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/ogg/happy-stroll.ogg",
"type": "audio/ogg"
}
],
"calibrationAudioSources": [
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp3/chimes.mp3",
"type": "audio/mp3"
},
{
"src": "https://s3.amazonaws.com/lookitcontents/geometry/ogg/chimes.ogg",
"type": "audio/ogg"
}
],
"altOnLeft": true,
"context": true,
"audioSources": [
{
"type": "audio/mp3",
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp3/video_01.mp3"
},
{
"type": "audio/ogg",
"src": "https://s3.amazonaws.com/lookitcontents/geometry/ogg/video_01.ogg"
}
],
"endAudioSources": [
{
"type": 'audio/mp3',
"src": "https://s3.amazonaws.com/lookitcontents/geometry/mp3/all_done.mp3"
},
{
"type": "audio/ogg",
"src": "https://s3.amazonaws.com/lookitcontents/geometry/ogg/all_done.ogg"
}
]
}
}
Item Index
Properties
Methods
exitFullscreen
()
makeTimeEvent
-
eventName
-
[extra]
Create the time event payload for a particular frame / event. This can be overridden to add fields to every event sent by a particular frame
Parameters:
Returns:
Event type, time, and any additional metadata provided
serializeContent
-
context
-
altOnLeft
-
videoID
-
hasBeenPaused
-
eventTimings
Parameters captured and sent to the server
Parameters:
-
context
BooleanTrue to use big fat triangle as context figure, or false to use small skinny triangle as context. [same as passed to this frame]
-
altOnLeft
BooleanWhether to put the shape+size alternating stream on the left (other stream alternates only in size) [same as passed to this frame]
-
videoID
StringThe ID of any video recorded during this frame
-
hasBeenPaused
Booleanwhether this trial was paused
-
eventTimings
Object
Returns:
The payload sent to the server
showFullscreen
()
Properties
altOnLeft
Boolean
Whether to put the shape+size alternating stream on the left (other stream alternates only in size)
Default: true
audioSources
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for instructions during attention-getter video
calibrationAudioSources
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for calibration audio (played 4 times during calibration)
calibrationVideoSources
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for calibration video (played from start 4 times during calibration)
context
Boolean
True to use big fat triangle as context figure, or false to use small skinny triangle as context.
Default: true
displayFullscreenOverride
String
endAudioSources
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for audio after completion of trial (optional; used for last trial "okay to open your eyes now" announcement)
fsAudio
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for audio played when study is paused due to not being fullscreen
fullScreenElementId
String
musicSources
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for music during trial
pauseAudio
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for audio played upon pausing study
triangleColor
String
color of triangle outline (3 or 6 char hex, starting with #)
Default: '#056090'
triangleLineWidth
Integer
triangle line width in pixels
Default: 5
unpauseAudio
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for audio played upon unpausing study
videoSources
Object[]
Sources Array of {src: 'url', type: 'MIMEtype'} objects for attention-getter video (should be loopable)
Events
clearTriangles
Records each time triangles are cleared from display
enteredFullscreen
leftFullscreen
nextFrame
Move to next frame
previousFrame
Move to previous frame
recorderReady
When video recorder has been installed
startCalibration
Start of EACH calibration segment
Event Payload:
-
location
Stringlocation of calibration ball, relative to child: 'left', 'right', or 'center'
startIntro
Immediately before starting intro/announcement segment
startTestTrial
Immediately before starting test trial segment
stoppingCapture
Just before stopping webcam video capture
videoStreamConnection
records EACH triangle presentation during test trial
Event Payload:
-
Lshape
Stringshape of left triangle: 'skinny' or 'fat'
-
Rshape
Stringshape of right triangle: 'skinny' or 'fat'
-
LX
NumberHorizontal offset of left triangle from rectangle center, in units where rectangle width = 70; positive = to right
-
LY
NumberVertical offset of left triangle from rectangle center, in units where rectangle height = 100.8; positive = down
-
RX
NumberHorizontal offset of right triangle from rectangle center, in units where screen width = 200 and rectangle width = 70; positive = to right
-
RY
NumberVertical offset of right triangle from rectangle center, in units where rectangle height = 100.8; positive = down
-
LRot
Numberrotation of left triangle in degrees. 0 degrees has long side horizontal and 15 degree angle (skinny triangle) or 60 degree angle (fat triangle) on left.
-
RRot
Numberrotation of right triangle in degrees. 0 degrees has long side horizontal and 15 degree angle (skinny triangle) or 60 degree angle (fat triangle) on left.
-
LFlip
Numberwhether left triangle is flipped (1 = no, -1 = yes)
-
RFlip
Numberwhether right triangle is flipped (1 = no, -1 = yes)
-
LSize
Numbersize of left triangle, relative to standard ('standard' sizes are set so that areas of skinny & fat triangles are equal), in terms of side length (e.g. for a rectangle, 2 would mean take a 1x3 rectangle and make it a 2x6 rectangle, quadrupling the area)
-
RSize
Numbersize of right triangle, relative to standard ('standard' sizes are set so that areas of skinny & fat triangles are equal), in terms of side length (e.g. for a rectangle, 2 would mean take a 1x3 rectangle and make it a 2x6 rectangle, quadrupling the area)