The high level impact of the TLS Renegotiation Attack is that an attacker can arrange to inject traffic into a legitimate client-server exchange such that the TLS server will accept it as if it came from the client. This may allow the attacker to execute operations on the server using the client's credentials (e.g., order a pizza as the client). However, the attacker does not (generally) get to see the response. Obviously this isn't good, but it's not the end of the world. 笔记：TLS Renegotiation Attack，用一种形象的方式来理解就是，attacker购买了1个匹萨饼，由victim来付钱。
The attack exploits TLS's renegotiation feature, which allows a client and server who already have a TLS connection to negotiate new parameters, generate new keys, etc. Renegotiation is carried out in the existing TLS connection, with the new handshake packets being encrypted along with application packets. The difficulty is that they're not otherwise tied to the channel, which gives the attacker a window. The simplest form of the attack is shown below
So, in order to mount the attack, the attacker first connects to the TLS
server. He can communicate with the server as much as he wants, including
making an arbitrary number of requests/responses, etc. This traffic is all
encrypted and shown as ==
. Then when he's ready, he hijacks
the client's connection to the server (in practice he might start by hijacking
the connection and then connect to the server but it doesn't matter) and
just proxies the client's traffic over the encrypted channel. The client
negotiates with the server and from that point on the client and the server
communicate directly. Note that the client is communicating with the attacker
in the clear but the second handshake is encrypted and goes over the attacker's
channel. Thus, the client does not know that he is renegotiating. However,
the server thinks that the initial traffic with the attacker is also from
the client. There are also other (probably less useful) variants where both
sides see a renegotiation but of different connections.
TLS itself is just a security protocol, so the impact of this attack depends on the application protocol running over TLS. The most important of these protocols is of course HTTP over TLS (HTTPS). Most Web applications do initial authentication via a username/password pair and then persist that authentication state with HTTP cookies (a secret token that is sent with any request). An attacker might exploit this issue by sending a partial HTTP request of his own that requested some resource. This then gets prefixed to the client's real request. 笔记：TLS只是一个security protocol，而application protocol是在security protocol基础上构建的，这里的attack是在application protocol的层面发生的。
E.g., the attacker would send:
And leave the last line empty without a carriage return line feed. Then when the client makes his own request
the two requests get glued together into:
And the server uses the victim's account to send a pizza to the attacker.
It's important to note that the attacker doesn't get to see any sensitive information directly: that's just sent back encrypted to the client. However, he can exploit side effects of the exchange, e.g., to get a pizza. It may also be possible to exploit HTTP features to directly access the data. For instance, he might be able to generate a combined request that would cause the server (or perhaps somehow mirrored through the client) to send the original client request to the attacker. If the request contains the client's cookie or password, this would cause their credentials to leak. It's not clear to me if this is possible, but I'm hoping some of the Web security specialists will weigh in. 笔记：这种Renegotiation Attack并没有将victim的sensitive information泄露掉，说明TLS对于数据的保密性是做的很好的，它是利用了TLS的renegotiation功能和HTTP协议的特点（内容是明文的）来实现Attack的。
For 99+% of applications, the mitigation is very simple: the server should simply disable all renegotiation, which stops the attack. Unfortunately, there is no similar defense on the client side. The client is unaware that renegotiation happened. Moreover, the client can't tell that the server will refuse renegotiation (it could explicitly probe but the attacker could of course fake a failure). So, the client can't really do anything useful to protect itself. 笔记：对于server来说，只要disable这个renegotiation就行了；但是，对于client来说，却无技可施。
There are a small number of cases where renegotiation actually should happen. The most practical defense on the server side is to restructure the site so that requests which require client auth are redirected to a different address or port which always requests a certificate and itself refuses renegotiation. However, this obviously requires major work on many sites. 笔记：在有些场景下，需要在server端开启renegotiation。
There are a few other legitimate reasons for renegotiation, but they're mostly things one doesn't need to do. For instance, people sometimes renegotiate to force the generation of fresh keying material. This is not necessary with modern cryptographic algorithms. Another example provided by Ray is sites that support algorithms with differential strength. Again, this isn't really necessary. It's very unlikely you need to renegotiate. 笔记：而在其他场景下，server端开启renegotiation没有很大的必要。


With the Mixin inter-blockchain protocol, it's easier than ever to send and accept any popular cryptocurrencies. The Mixin Messenger API has simplified the process further, please be sure to read the get started guide to help understand the following content.
Any Mixin user can send you a payment if they have your Mixin ID or phone number, you can also request a payment by redirect a user to the following URL.
https://mixin.one/pay?recipient=USER_ID&asset=ASSET_ID&amount=FLOAT&trace=UUID&memo=TEXT
USER_ID is the UUID of you, or the CLIENT_ID of your Mixin App.
ASSET_ID is the UUID of a cryptocurrency uniquely identified in Mixin Network, you can typically get the ID by requesting a user's assets list with the ASSETS:READ scope.
The FLOAT is the amount of your selected cryptocurrency that you would love the user to pay.
The trace UUID is recommended to set to help relate a transfer to your purpose, and prevent a payment to be made twice, as a single trace UUID can only be paid once.
Then the user will be guided to scan the QR code on the payment page, or they will be prompted the payment dialog automatically if the URL is opened in Mixin App.
To send a transfer with your App, you should get a new session with asset PIN. Please go to the developers dashboard to generate a new session.
The 6 digit number is your asset PIN, the UUID is the new session ID and the RSA PRIVATE KEY is your session KEY.
A new generated session will expire all previous sessions, so please make sure your old session is not in used before generating a new one.
With the new session ID and KEY, you can generate an JWT ACCESS_TOKEN with payload CLIENT_ID as uid and session ID as sid, sign the payload with KEY.
POST -H "Authorization: Bearer ACCESS_TOKEN" https://api.mixin.one/transfers { "asset_id": ASSET, "counter_user_id": RECIPIENT, "amount": STRING, "pin": PIN, "trace_id": UUID } => { "data": { "type": "transfer", "trace_id": "UUID", ... } }Please access these assets related API cautiously and protect your session and PIN, any loss is permanent and can't be recovered.


This website is still subject to improvements. I would appreciate any feedback.
This website is still subject to improvements. I would appreciate
any feedback.
Contact Form
Name:
Comment:
Submit
Cancel


Status
Pinned repositories
a free (libre) open source, mobile OS for Ethereum
The Status module that consumes go-ethereum
Nim implementation of Ethash, the Ethereum proof of work
Whosoever commiteth code, abideth issues & entrusts maintainers - shall receiveth reward
re-frame
Forked from Day8/re-frameA Reagent Framework For Writing SPAs, in Clojurescript.
An Ethereum 2.0 Sharding Client for Resource-Restricted Devices
react-native-fs
Forked from itinance/react-native-fsNative filesystem access for react-native
Slack work space directory - more info in Slack Profiles
go-ethereum
Forked from ethereum/go-ethereumOfficial golang implementation of the Ethereum protocol
Status fiddle (react native UI editor)
A wrapper for the keccak-tiny C library
Nim wrapper for evmjit
A reimplementation in pure Nim of eth-keys, the common API for Ethereum key operations.
Efficient and portable multi-precision integers in pure Nim
A wrapper for libsecp256k1
Exploration of various implementations of memory range types
Github bot that automatically funds https://openbounty.status.im bounties
Status Desktop (React Native Web and Electron)
A bot for github
Keeps the baseline settings for probot apps that can be referenced from other repos
A Desktop port of React Native, driven by Qt, forked from Canonical
The Book of Status - our story, our knowledge, our interpretation of the world.
React Native Webview with Javascript Bridge
Online UI editor for status-react
A repository for the #ArtProject website


Я уронил сигарету.  (RIP DUMB ASS)
What is it that you must NEVER DO when Bruce Willis is asleep? 1. DO NOT slap him in the face. 2. Give him a cigarette when he asks( like the guy in the video d…www.youtube.com
Весь последний бойскаут — сплошной best–episode.


Hot Restaurant
Make your Reservation
View Tables
Home
Name
Phone Number
Email
Unique Id
Submit
Current Reservations
Murphy
Phone Number:
900
Email:
gmail
Unique id:
5


minimesos is an in memory mesos cluster. This script will deploy the demo application to mesos.
minimesos-marathon.sh [OPTION]... [COMMAND]
Starts the weavedemo microservices application on minimesos.
Requirements: Docker, weave and minimesos must be installed.
Commands:
start Starts weave, minimesos and the demo application
stop Stops weave, minimesos and the demo application
Options:
--force Skip all user interaction. Implied 'Yes' to all actions.
-q, --quiet Quiet (no output)
-l, --log Print log to file
-s, --strict Exit script with null variables. i.e 'set -o nounset'
-v, --verbose Output more information. (Items echoed to 'verbose')
-d, --debug Runs script in BASH debug mode (set -x)
-h, --help Display this help and exit
--version Output version information and exit
minimesos
weave
curl
sudo curl -sSL https://get.docker.com/ | sh
sudo curl -sSL https://minimesos.org/install | sh
sudo mv ~/.minimesos/bin/minimesos /usr/bin/
sudo curl -L git.io/weave -o /usr/local/bin/weave
sudo chmod a+x /usr/local/bin/weave
cd deploy/minimesos-marathon
./minimesos-marathon.sh start
There is a separate load-test available to simulate user traffic to the application. For more information see Load Test. This will send some traffic to the application, which will form the connection graph that you can view in Scope or Weave Cloud.
cd deploy/minimesos-marathon
docker run --rm --net=host weaveworksdemos/load-test -d 300 -h localhost -c 2 -r 100
cd deploy/minimesos-marathon
./minimesos-marathon.sh stop


What time and channel is Artem Lobov v Jason Knight II on in Ireland? Key information for Bare Knuckle FC 9
Lobov emerged victorious in the first fight between the pair earlier in the year and is confident of doing so again
by Robert HynesArtem Lobov and Jason Knight clash in a bare knuckle boxing rematch this weekend.
Lobov emerged victorious in the first fight between the pair earlier in the year and is confident of doing so again.
He was last seen in action when beating Paulie Malignaggi and wants to fight the former professional boxer again.
Here's everything you need to know about Artem Lobov v Jason Knight II:
Where and when is the fight?
It takes place at the Mississippi Coast Convention Centre in the early hours of Sunday, November 17 Irish time.
What time does it start at?
The main card starts at 2am Irish time, with the main event between Lobov and Knight expected to get underway around 4am.
What channel is it on?
The fight is not being shown on Irish TV, but you can watch it online.
Full details can be found here.
Quotes corner
Artem Lobov told Sporting News: "Number one, preparing for the first fight, I was doing it blindfolded.
"I didn’t know what to expect because I had never tried it before. I couldn’t train properly because I didn’t know anyone who did bare-knuckle. So my preparation was a little wrong in terms of my cardio work in getting ready for the two-minute rounds.
"What I was doing was incorrect. I was preparing for a marathon, and the fight was a sprint. I had it all wrong. This time around, I completely changed my preparation.
"Being able to train nothing but boxing for a full year made me a much better boxer as I brought in professional boxers helped me make a lot of gains. I look forward to showing the world what I’ve been working on."
Jason Knight speaking to MMA Fighting about the first fight: “My game plan went out the window. I trained a lot better than I fought.
“We went to war. We both got cut up bad. We both got dropped a few times. More or less, we underestimated each other.”
Betting odds
Artem Lobov win: 1/3
Jason Knight win: 2/1
Draw: 16/1
If you haven't already, be sure to like our Irish Mirror Sport and Irish Mirror GAA pages on Facebook and follow us on Twitter.
How to follow the Irish Mirror on social media
You can like our main Facebook page here.
Our Irish Mirror Sports page - which brings you all your Irish and UK sports news - can be found here.
You can also check out our Irish Mirror GAA sports page.
The Irish Mirror Twitter account is @IrishMirror while our sports account is @MirrorSportIE.
Our Instagram account can be found here.


TechStack is an easy way to visualize your techstack in your
README.md
file. Logos provided by
SVG Logos.
-
Paste your
package.json
below
-
Verify your logos are correct, delete the ones that don't apply (tip:
hover over the logos to see the name)
-
Copy the markdown and add it to your
Readme.md
file
{{ img.name }}


Boost Up Top Teams
Investments made to help boost the present and next generation of entrepreneurship.
We are hands-off investors. But, when you need our help, we will be there for you.
FAQ
Why Butt Ventures:
First, Butt Ventures is not just a VC that makes an investment. It's a mission. We're here to help people and businesses through entrepreneurship.
That being said…
Startups aren't an investment of money. They're an investment of sweat. There's pride on the line. We support your business, not your product. We invest in people, not products.
Also, we make investments in assets like stocks, bonds, commodities, and real estate.
We are a group of people with experience in creating and scaling products. We have experience with remote teams, hiring, and specialty in different segments such as Marketplaces, SaaS, and others.
Entrepreneurs can change the world.
And if we can, we'd like to help to make it happen.
What we look for:
- - Startups that adds values to society
- - Startups that are creating new value propositions and not just copying others
- - Startups that have a crystal clear validation about the problem they are helping to solve
That can mean…
- - Tools to improve productivity
- - Products that opens up a whole new world for users
- - Products with a high entry barrier
- - Good addressable market
How do we invest:
- - USD $10,000 – $30,000
- - Preseed and seed
- - Brazil but also Global (yes incl. Africa, LATAM, Asia, Oceania)
- - We like to bring in other investors with us
How can we help:
- - Product Management, Growth & Fundraising
- - Network with leaders, entrepreneurs, investors and potential hires
- - Leadership and management
Competition:
- - We invest in different stages
- - Teams might pivot or launch something new. We´re ok with that as long it makes sense for the company
- - Products might tackle the same problem from different angle
- - We might end up investing in competitive startups
Who we invested in so far:
- - Chatpay
- - HomeAgent (via UrcaAngels)
- - Jestor
- - ... more to come
Stock market portfolio:
click here


Toggle navigation
BLOG
SEARCH
SHARE
Signup
Username
{{usererror}}
Password
{{passworderror}}
Verify Password
{{verifyerror}}
Email (optional)
{{emailerror}}
Sign up
Have an Account?
If you already have a password, please
sign in
.


{% extends '_base.html' %} {% load crispy_forms_tags %} {% block title %}{{ block.super }} - DELETE {{ comment.widget.name }} Comment {% endblock title %} {% block content %}
Are you sure you want to delete comment for "{{ comment.widget.name }}"?


Currently Learning:
To be continued …
- Sams Teach Yourself SQL in 24 Hours ::: Chapter 8 - Page 136 of 495
-
The Deep Learning Textbook by Ian Goodfellow, Yoshua Bengio and Aaron Courville ::: Chapter 6 - 6.1 - Learning XOR - Page - 185 of 802
- Cracking the Coding Interview by Gayle Laakmann McDowell, 5th Edition - Interview Questions - 1.1 - Page 82 of 510
- The Algorithm Design Manual by Steven Skiena - Dictionaries - Page 84 of 739
-
Data Structures and Algorithms in Python by Michael H. Goldwasser, Michael T. Goodrich, and Roberto Tamassia - Chapter 3 - Page 183 of 770
-
How to Win a Data Science Competition: Learn from Top Kagglers by National Research University Higher School of Economics on Coursera
- Mastering Apache Spark - GitBook - Page 15 of 1192
Wishlist:
2018
Courses
- SQL Basics by Vertablo Academy
- Operating on Data in SQL by Vertablo Academy
- Creating Tables in SQL by Vertablo Academy
- Neural Networks and Deep Learning by deeplearning.ai on Coursera
- Introduction to Linux LFS101x by Linux Foundation on edX
Books:
- Introduction to Statistical Learning by Gareth James, Daniela Witten, Trevor Hastie and Robert Tibshirani
- From Python to Numpy by Nicolas P. Rougier - http://www.labri.fr/perso/nrougier/from-python-to-numpy/
- Statistical Inference 2nd edition by Casella and Berger
- Applied Regression Analysis, 3rd Edition by Norman R. Draper, Harry Smith
- Categorical Data Analysis 3rd Edition by Alan Agresti
- Practical Statistics for Data Scientists by Peter Bruce, Andrew Bruce
List of Interesting Papers:
2017
Courses
Books
- R Programming for Data Science
- Linear Algebra and its Applications by Prof. Gilbert Strang, Fourth Edition
- Support Vector Machine Succinctly by Alexandre Kowalczyk
- Schaum’s Linear Algebra
- Schaum’s Advanced Calculus
- Single and Multivariate Calculus by Hughes-Hallett Gleason McCallum et al
- A First Course in Probability by Sheldon Ross
- Statistics and Data Analysis: From Elementary to Intermediate by Ajit C. Tamhane and Dorothy D. Dunlop
- Programming Hive
2016
Courses
Books


Contains functionality to impose a binary expression tree structure over the underlying query model capable of modeling and evaluating complex binary and unary logical, relational and arithmetic query expressions under various contexts.


pic format
pic files contain images in an uncompressed format. both the original animator
and animator pro from autodesk produce pic files. the file formats are
different; animator pro produces a hierarchial block oriented file, while the
original animator file is a simpler fixed format. see pic(pro) for further
information on the animator pro pic format.
the original animator uses this format to store a single-frame picture image.
this format description applies to both pic and original animator cel files. the
file begins with a 32 byte header, as follows:
offset count type description
0000h 1 word id=9119h
0002h 1 word width of image; pic files have always a width
of 320, cel images may have any value.
0004h 1 word height of image, 200 for a pic, any value for
a cel file.
0006h 1 word x offset of image, always 0 for a pic image,
may be nonzero in a cel image.
0008h 1 word y offset of image. zero for a pic file.
000ah 1 byte bits per pixel (8)
000bh 1 byte compresion flag, always zero
000ch 1 dword size of the image data in bytes
0010h 16 byte reserved(0)
immediately following the header is the color map. it contains all 256 palette
entries in rgb order. each of the r, g, and b components is a single byte in the
range of 0-63. following the color palette is the image data, one byte per
pixel, from left to right, top to bottom.
pic(pro) format
this format description applies to both pic and msk files created with the
autodesk animator pro package. the file begins with a 64-byte header defined
as follows:
offset length name description
0000h 1 dword the size of the whole file including the size
of this header.
0004h 1 word id=9500h
0006h 1 word width of the image
0008h 1 word height of the image
000ah 1 word x offset of image
000ch 1 word y offset of image
000eh 1 dword user id, set to zero
0012h 1 byte bits per pixel (8 for pic, 1 for msk)
0013h 45 byte reserved (0)
following the file header are the data blocks for the image. each data block
within a pic or msk file is formatted as follows:
offset count type description
0000h 1 dword the size of the block, including this header.
0004h 1 word data type id :
0 - color palette info
1 - byte-per-pixel image data
2 - bit-per-pixel mask data
0006h ? byte data
the type values in the block headers indicate what type of graphics data the
block contains.
in a pic_cmap block, the first 2-byte word is a version code;
currently this is set to zero. following the version word are all 256 palette
entries in rgb order. each of the r, g, and b components is a single byte in the
range of 0-255. this type of block appears in pic files; there will generally be
no color map block in a msk file.
in a pic_bytepixels block, the image data appears immediately following the
6-byte block header. the data is stored as one byte per pixel, in left-to-right,
topd to-bottom sequence.
in a pic_bitpixels block, the bitmap data appears immediately following the
6-byte block header. the data is stored as bits packed into bytes such that the
leftmost bits appear in the high-order positions of each byte. the bits are
stored in left-to-right, top-to bottom sequence. when the width of the bitmap is
not a multiple of 8, there will be unused bits in the low order positions of the
last byte on each line. the number of bytes per line is ((width+7)/8). this type
of block appears in msk files.
|


Across
Down
(Keys: Tab to next word. Arrows go around boxes. Backspace to delete letter. Double click boxes to switch across/down)


{% extends 'base.html' %} {% block content %}
The confirmation link was invalid, possibly because it has already been used.


With any straight line AB, and at the point B on it, let the two straight lines BC and BD not lying on the same side make the sum of the adjacent angles ABC and ABD equal to two right angles.
I say that BD is in a straight line with CB.
If BD is not in a straight line with BC, then produce BE in a straight line with CB.
Since the straight line AB stands on the straight line CBE, therefore the sum of the angles ABC and ABE equals two right angles. But the sum of the angles ABC and ABD also equals two right angles, therefore the sum of the angles CBA and ABE equals the sum of the angles CBA and ABD.
Subtract the angle CBA from each. Then the remaining angle ABE equals the remaining angle ABD, the less equals the greater, which is impossible. Therefore BE is not in a straight line with CB.
Similarly we can prove that neither is any other straight line except BD. Therefore CB is in a straight line with BD.
Therefore if with any straight line, and at a point on it, two straight lines not lying on the same side make the sum of the adjacent angles equal to two right angles, then the two straight lines are in a straight line with one another.
This is a proposition in plane geometry. If A, B, C, and D do not lie in a plane, then CBD cannot be a straight line. An ambient plane is necessary to talk about the sides of the line AB
The qualifying sentence, “Similarly we can prove that neither is any other straight line except BD,” is meant to take care of the cases when E does not lie inside the angle ABD.
This is the first use of Postulate 4 that all right angles are equal.


Hawaii Tourism Authority marketing now includes teaching tourists to be responsible | Honolulu Star-Advertiser
The Hawaii Tourism Authority is adding “responsible tourism” to its traditional marketing, a departure from its past focus on promoting Hawaii’s beaches, weather, natural beauty and unique Hawaiian culture. Read more
Mahalo for reading the Honolulu Star-Advertiser!
You're reading a premium story. Read the full story with our Print & Digital Subscription.
Already a subscriber? Log in now to continue reading this story.
Print subscriber but without online access? Activate your Digital Account now.


PAM_FAILLOCK
Section: Linux\-PAM Manual (8)Updated: 04/16/2012
Index Return to Main Contents
NAME
pam_faillock - Module counting authentication failures during a specified intervalSYNOPSIS
-
auth ... pam_faillock.so {preauth|authfail|authsucc} [dir=/path/to/tally-directory] [even_deny_root] [deny=n] [fail_interval=n] [unlock_time=n] [root_unlock_time=n] [audit] [silent] [no_log_info]
- account ... pam_faillock.so [dir=/path/to/tally-directory] [no_log_info]
DESCRIPTION
Normally, failed attempts to authenticate root will not cause the root account to become blocked, to prevent denial-of-service: if your users aren't given shell accounts and root may only login via su or at the machine console (not telnet/rsh, etc), this is safe.
OPTIONS
{preauth|authfail|authsucc}
-
This argument must be set accordingly to the position of this module instance in the PAM stack.
The preauth argument must be used when the module is called before the modules which ask for the user credentials such as the password. The module just examines whether the user should be blocked from accessing the service in case there were anomalous number of failed consecutive authentication attempts recently. This call is optional if authsucc is used.
The authfail argument must be used when the module is called after the modules which determine the authentication outcome, failed. Unless the user is already blocked due to previous authentication failures, the module will record the failure into the appropriate user tally file.
The authsucc argument must be used when the module is called after the modules which determine the authentication outcome, succeded. Unless the user is already blocked due to previous authentication failures, the module will then clear the record of the failures in the respective user tally file. Otherwise it will return authentication error. If this call is not done, the pam_faillock will not distinguish between consecutive and non-consecutive failed authentication attempts. The preauth call must be used in such case. Due to complications in the way the PAM stack can be configured it is also possible to call pam_faillock as an account module. In such configuration the module must be also called in the preauth stage.
dir=/path/to/tally-directory
- The directory where the user files with the failure records are kept. The default is /var/run/faillock.
audit
- Will log the user name into the system log if the user is not found.
silent
- Don't print informative messages. This option is implicite in the authfail and authsucc functions.
no_log_info
- Don't log informative messages via syslog(3).
deny=n
- Deny access if the number of consecutive authentication failures for this user during the recent interval exceeds n. The default is 3.
fail_interval=n
- The length of the interval during which the consecutive authentication failures must happen for the user account lock out is n seconds. The default is 900 (15 minutes).
unlock_time=n
- The access will be reenabled after n seconds after the lock out. The default is 600 (10 minutes).
even_deny_root
- Root account can become locked as well as regular accounts.
root_unlock_time=n
- This option implies even_deny_root option. Allow access after n seconds to root account after the account is locked. In case the option is not specified the value is the same as of the unlock_time option.
MODULE TYPES PROVIDED
The auth and account module types are provided.
RETURN VALUES
PAM_AUTH_ERR
- A invalid option was given, the module was not able to retrieve the user name, no valid counter file was found, or too many failed logins.
PAM_SUCCESS
- Everything was successful.
PAM_IGNORE
- User not present in passwd database.
NOTES
pam_faillock setup in the PAM stack is different from the pam_tally2 module setup.
The individual files with the failure records are created as owned by the user. This allows pam_faillock.so module to work correctly when it is called from a screensaver.
Note that using the module in preauth without the silent option or with requisite control field leaks an information about existence or non-existence of an user account in the system because the failures are not recorded for the unknown users. The message about the user account being locked is never displayed for nonexisting user accounts allowing the adversary to infer that a particular account is not existing on a system.
EXAMPLES
Here are two possible configuration examples for /etc/pam.d/login. They make pam_faillock to lock the account after 4 consecutive failed logins during the default interval of 15 minutes. Root account will be locked as well. The accounts will be automatically unlocked after 20 minutes.
In the first example the module is called only in the auth phase and the module does not print any information about the account blocking by pam_faillock. The preauth call can be added to tell the user that his login is blocked by the module and also to abort the authentication without even asking for password in such case.
-
auth required pam_securetty.so auth required pam_env.so auth required pam_nologin.so # optionally call: auth requisite pam_faillock.so preauth deny=4 even_deny_root unlock_time=1200 # to display the message about account being locked auth [success=1 default=bad] pam_unix.so auth [default=die] pam_faillock.so authfail deny=4 even_deny_root unlock_time=1200 auth sufficient pam_faillock.so authsucc deny=4 even_deny_root unlock_time=1200 auth required pam_deny.so account required pam_unix.so password required pam_unix.so shadow session required pam_selinux.so close session required pam_loginuid.so session required pam_unix.so session required pam_selinux.so open
In the second example the module is called both in the auth and account phases and the module gives the authenticating user message when the account is locked
-
auth required pam_securetty.so auth required pam_env.so auth required pam_nologin.so auth required pam_faillock.so preauth silent deny=4 even_deny_root unlock_time=1200 # optionally use requisite above if you do not want to prompt for the password # on locked accounts, possibly with removing the silent option as well auth sufficient pam_unix.so auth [default=die] pam_faillock.so authfail deny=4 even_deny_root unlock_time=1200 auth required pam_deny.so account required pam_faillock.so # if you drop the above call to pam_faillock.so the lock will be done also # on non-consecutive authentication failures account required pam_unix.so password required pam_unix.so shadow session required pam_selinux.so close session required pam_loginuid.so session required pam_unix.so session required pam_selinux.so open
FILES
/var/run/faillock/*
- the files logging the authentication failures for users
SEE ALSO
faillock(8), pam.conf(5), pam.d(5), pam(8)
AUTHOR
pam_faillock was written by Tomas Mraz.
Index
- NAME
- SYNOPSIS
- DESCRIPTION
- OPTIONS
- MODULE TYPES PROVIDED
- RETURN VALUES
- NOTES
- EXAMPLES
- FILES
- SEE ALSO
- AUTHOR
This document was created by man2html, using the manual pages.
Time: 05:34:28 GMT, December 24, 2015


{% extends 'base.html' %} {% block title %} {{page_title}} {% endblock %} {% block content %} List View Map View + Add {{model_type}}
Some quick example text to build on the card title and make up the bulk of the card's content.
None available.


Input
The input for worldmap
is described in the docstrings worldmap.worldmap.plot()
and is as following:
Color countries.
- param county_names
Names of countries or regions within a county to be colored.
- type county_names
list of str
- param map_name
Name of the county to be colored. The default is ‘world’.
- type map_name
str, optional
- param opacity
Set the opacity for each of the map_name(s). The default is []. If values are >1, it is scaled between [0-1] 0 = full transparancy, 1= no transparancy
- type opacity
list of float [0-1], optional
- param cmap
Colormap to be used. Colors is set on the unique county_names. The default is ‘Set1’. All colormaps can be reverted using the “_r”: e.g., binary_r [‘#ffffff’,’#1f1f1f’]: Each map with a specified color [‘#ff0000’]: All maps have a red color ‘Set1’ : Discrete colors (default) ‘Pastel1’ : Discrete colors ‘Paired’ : Discrete colors ‘bwr’ : Blue-white-red ‘RdBu’ : Red-white-Blue ‘binary’ : black-white ‘seismic’ : Blue-white-red ‘rainbow’ : all coors ‘Blues’ : white-to-blue
- type cmap
str, optional
- param filename
filepath to write the output file. The default is ‘custom_map.svg’.
- type filename
str, optional
- param showfig
Open figure in browser. The default is False.
- type showfig
bool, optional
- param verbose
print message to screen. The default is True.
- type verbose
int, optional
- returns
Containing dataframe with the plotted regions, with its colors and the filename.
- rtype
tuple (pd.DataFrame, filename)
Examples
>>> # Import library
>>> import worldmap as wm
>>>
>>> # Set the regions to plot
>>> region = ['zeeland','Overijssel', 'flevoland']
>>>
>>> # Color the regions
>>> opacity = [0.1, 0.2, 0.6]
>>>
>>> # Create the SVG
>>> results = wm.plot(region, opacity=opacity, cmap='Set1', map_name='netherlands')
Output
The output of worldmap
worldmap.worldmap.plot()
is a tuple
containing the following information:
pd.DataFrame : Dataframe with the plotted regions, and colors
filename : Filename
print(results[0])
# county_names SVGcity opacity fill
# 0 zeeland zeeland 0.4 #e41a1c
# 1 Overijssel overijssel 0.6 #377eb8
# 2 flevoland flevoland 0.9 #4daf4a
# 3 Drenthe Drenthe 1.0 #CCCCCC
# 4 Friesland Friesland 1.0 #CCCCCC
# 5 Gelderland Gelderland 1.0 #CCCCCC
# 6 Groningen Groningen 1.0 #CCCCCC
# 7 Limburg Limburg 1.0 #CCCCCC
# 8 Noord-Brabant Noord-Brabant 1.0 #CCCCCC
# 9 Noord-Holland Noord-Holland 1.0 #CCCCCC
# 10 Utrecht Utrecht 1.0 #CCCCCC
# 11 Zuid-Holland Zuid-Holland 1.0 #CCCCCC
print(results[1])
'Netherlands_map.svg'


No Access !!!
You do not have access to this site.This site has been blocked using IENanny.Please try going to another site to which you have access.


Students evacuated after chip pan fire in university halls
by Michael StewardStudents were evacuated after a kitchen chip pan blaze at a university halls building in Colchester.
Two crews from Colchester attended the building around 3.50am today at Boundary Road in the town and all Essex University students based in the halls were evacuated immediately after the fire alarm sounded.
On arrival, firefighters found the blaze in a second floor kitchen and managed to extinguish it by 4.37am.
The kitchen suffered fire damage and adjoining flats suffered smoke damage.
No injuries were reported, according to Essex Fire and Rescue Service.
Watch manager Richard Lark, Colchester Fire Station, said: "This incident shows how quickly a chip pan fire can spread and how much damage it can cause.
"Thankfully the students did the right thing once the pan caught fire - they did not attempt to extinguish it, but instead immediately left the building.
"I urge anyone who is cooking food in oil to follow our safety instructions."


Trolley
@objcMembers public final class Trolley: NSObject
The entry point for our Trolley SDKs.
Initialize and configure FIRApp using +Trolley configure or other customized ways as shown below.
The logging system
-
Undocumented
Declaration
Swift
@objcMembers public final class Trolley: NSObject
-
Opens and configures the default Trolley shop.
This method should be called after the app is launched and before using any Trolley services.
Note
This method is thread safe.Warning
Raises an exception if any configuration step fails.Declaration
Swift
@objc public class func open()
-
Open and configures the default trolley shop with custom options.
This method should be called after the app is launched and before using any Trolley services.
Note
This method is thread safe.Warning
Raises an exception if any configuration step fails.Declaration
Swift
@objc(openWithOptions:) public class func open(with options: TRLOptions)
Parameters
options
The Trolley shop options used to configure the service.
-
Cleans up the current Trolley Shop and releases any objects.
Note
This method is thread safe.Declaration
Swift
public func deleteShop(handler: ((Bool) -> Void)?)
Parameters
handler
A handler that returns a true if the shop has been deleted or false if the shop could not be deleted.
-
Cleans up the current Trolley Shop and releases any objects.
Note
This method is thread safe.Declaration
Swift
public func deleteShop()
-
Method to set the Global logger level
Declaration
Swift
public class func setLoggingLevel(_ level: LoggerLevel)
-
<#Description#>
Declaration
Swift
@objc public var shopName: String
-
Note
Maybe have this as initaliser too, so it creates the default shop upon calling if the aTRLShop is not created yetDeclaration
Swift
@objc public static var shop: Trolley?
-
<#Description#>
Declaration
Swift
@objc public static var isShopOpen: Bool


Welcome to the Jasper.
Please select github.com or GitHub Enterprise.
github.com
GitHub Enterprise
Please enter your GitHub Enterprise host.
Please enter your personal-access-token of GitHub.
Jasper requires repo and user scopes. GitHub → Settings → Developer settings → Personal access tokens → Generate new token
repo
user
Please confirm your settings.
Access Token
API Host
Path Prefix
Web Host
OK


Hi, welcome to this site. This page contains a few broken links:
Foo does not exist
Non-existent domain
Invalid host
Has no valid protocol


Powered by
jQuery
© 2013, Lexey111
Here you can see live examples and detailed descriptions of SquareSelectors by Lexey111 (blog article).
Descriptions of methods you can see below, in the Public methods section, as well as examples of code.
jQuery 1.8+. Making a 'vanilla' version isn't big deal, but in practice I use these controls where jQuery already used a lot anyway.
List does not check available size, i.e. you have to check is enough place at the bottom and side to show list in open state. It is doesn't matter for my projects so I don't care yet.
SquareSelector is a runtime-creation kind of UI controls. This mean that you have to make new Javascript object to use it.
First step is prepare container for item(s) in html-file. Next, you need to call constructor explicitly to make and embed selector to the prepared place.
Usual way to do this is something like (in documentReady function or later):
Usage example
var item_container = $('#selectors_container1'); var selector1 = new LxSquareSelector({ container: item_container, title: 'Size', subtitle: 'of paper', active: '90x90', list: [ { value: '50x50', display: '5x5cm', line: '5x5 cm (tiny glass)' }, { value: '70x70', display: '7x7cm', line: '7x7 cm (coffee or tea cup)' }, { value: '90x90', display: '9x9cm', line: '9x9 cm (standard)' }, { value: '90x50', display: '9x5cm', line: '9x5 cm (business card)' } ], callback: function (value) { alert('Selected paper: ' + value); } });
If you don't need future interaction with the control except callback function on changing, you can use simple constructions like new LxSquareSelector({...})
If you're planning works with selector's methods, you have to keep it into variable var my_selector = new LxSquareSelector({...}) and call published methods later, e.g., my_selector.disable()
Anyway, you have to set up control's properties, such as:
| Property | Optional | Type | What does it mean |
|---|---|---|---|
| container | No | string|object | jQuery selector (jQuery object or text) of parent container for button |
| active | No | string | currently selected VALUE (not display) |
| list | No | array of objects | Array of dropdown list items, see next table |
| title | Yes | string | Top text line |
| disabled | Yes | boolean | true or false, state of button. Default value is false |
| subtitle | Yes | string | Bottom text line |
| class_name | Yes | string |
Additional class name that will be added to the button while construction. Predefined classes:
|
| custom_item | Yes | string | Additional element that will be inserted inside button while construction. This is useful when you want to make color chooser, for example. You can see how it works here (click red button on the top of page, then change background to solid color). |
| callback | Yes | function | Callback function that calls whan value changed |
| list_header | Yes | string | Header of dropdown list |
| list_footer | Yes | string | Footer of dropdown list |
| list_width | Yes | string | Width of dropdown list in px. Default value is 200px |
| list_align | Yes | string | Alignment of dropdown list relative to the button: left, right or center. Default value is center |
And, last but not least, the list items itself:
| Property | Optional | What does it mean |
|---|---|---|
| value | No | Value |
| display | Yes | Short display value - what users see on the button. If nothing set, then the value will be used. |
| line | Yes | Long display value - what user see in the list |
| separated | Yes | true or false, is this line will be separated from others? (default value is false) |
| disabled | Yes | true or false, is this line will be disabled? (default value is false) |
If list contains only one value, this makes simple button (see example above, green and blue buttons).
| Method | Parameters | What does it mean |
|---|---|---|
| actualize(value) | value, string | Set current button value according to given one |
| disable() | — | Disable button |
| enable() | — | Enable button |
| disabled() | — |
Return true or false according to current state of selector (whole button)
Usage example: button get state and disable/enable var example_selector_1 = new LxSquareSelector({...}); ... if (example_selector_1.disabled()){ example_selector_1.enable(); } else { example_selector_1.disable(); } |
| disableItem(value) | value, string | Disable item |
| enableItem(value) | value, string | Enable item |
| itemDisabled(value) | value, string |
Return true or false according to current state of passed item
Usage example: item get state and disable/enable var example_selector_2 = new LxSquareSelector({...}); ... if (example_selector_2.itemDisabled('orange')){ example_selector_2.enableItem('orange'); } else { example_selector_2.disableItem('orange'); } |
| rebuild(list, active_value) |
list, array
of objects; active_value, string |
Rebuild list
Usage example: rebuild whole list and set new active value var example_selector_3 = new LxSquareSelector({...}); ... var new_list = [ { value: 'owl', display: 'Owl', line: 'Polar owl' }, { value: 'sparrow', display: 'Sparrow', line: 'Jack the Sparrow' }, { value: 'goose', display: 'Goose', line: 'Gray goose' }, { value: 'martlet', display: 'Martlet', line: 'Fast martlet' } ]; example_selector_3.rebuild(new_list, 'sparrow'); |
| Property | Default value | What does it mean |
|---|---|---|
| Sizes | ||
| square_size | 80px | Button size |
| border_size | 4px | Size of semitransparent border around dropdown list |
| corner_triangle_size | 10px | Size of triangle in botom right corner (dropdown mark) |
| top_arrow_size | 8px | Size of top arrow on dropdown list (white pointing arrow) |
| button_border_radius_size | 0px | Roundness of the button's corners |
| list_border_radius_size | 0px | Roundness of corners of the dropdown list |
| list_item_height | 2.2em | Height of list item |
| Normal state colors (not hovered or opened) | ||
| normal_background_color | #f8f8fe | Background of the button |
| normal_border_color | #dddddd | Border color |
| normal_title_color | #828f94 | Color of top and bottom text lines |
| normal_value_color | #3a778b | Color of the current value (line in the middle) |
| normal_corner_triangle_color | #aaaaaa | Color of the bottom right triangle |
| list_shadow | 0 0 6px rgba(0,0,0,.3) | Shadow under the dropped-down list |
| Disabled state colors | ||
| disabled_background_color | #f1f1f7 | Button background in disabled state |
| disabled_border_color | #e3e3e9 | Border color |
| disabled_title_color | #c0c0c0 | Title (top and bottom lines) color |
| disabled_value_color | #a2a2a2 | Current value color |
| disabled_corner_triangle_color | #d5d5db | Color of the bottom right triangle |
| list_disabled_text_color | #ddddee | Text color of disabled item in the list |
| Dropdown menu colors | ||
| list_background_color | #ffffff | Background of dropdown menu list |
| list_item_color | #2c5a69 | Text color of menu item |
| list_hover_color | #0b697a | Background color of menu item in "on-hover" state (text color = list_background_color) |
| list_separor_color | #aaaaaa | Separator line color for list item with class="separated" |
| list_active_border_color | #faa732 | Border of the currently selected item |
| list_active_background_color | #ffe89b | Background of the currently selected item |
| list_active_text_color | #504c34 | Text color of the currently selected item |
| list_hover_active_color | #90a0c5 | Background color of hovered-and-active item |
| list_hovered_item_color | #e7f1ff | Text color of hovered item |
| list_comment_color | #7b8aa1 | Text color of header and footer in the list |
| footer_border_color | #b5c5d4 | Color of separator line for header and footer |
| Active state colors | ||
| active_background_color | #faf7e9 | Button background color when list is dropped down or on hover |
| active_border_color | #eba921 | Button border color |
| active_shadow_color | #ffcc00 | Shadow color |
| active_title_color | #222244 | Title (top and bottom lines) text color |
| active_value_color | #4b3e33 | Current value (text in the middle) text color |
| active_corner_triangle_color | #eba921 | Triangle (dropdown mark) color |
You can download all the source code from Github.
With Best Regards
Lexey111


01 Dec 2015
Solving Relationship Problems With Graph Technology
Before I get started - I am not ranting about a new dating algorithm I wrote. This post is going to be about Graph databases and kickstarting work with python. Before I talk about graph databases, I’ll briefly explain how I found myself hacking with Neo4j graph database at 2 am in the morning.
I wanted to build a tool for finding opportunities. For example - I have an idea for connected shoes. I would like to find a co-founder to work with on this project. Reaching out to my network to find a suitable candidate is troublesome. The manual process includes me having to either open a Facebook chat or shoot an email to get my intentions across.
How useful would it be for me to go to a user interface and type-
Graph Databases
Enter graph databases. They are meant to purely manage relationships and properties of actors. It’s a different data model compared to our traditional Relation Databases. Let’s try my problem mapped to the Graph data model.
As you can see - Naveen is a node and under it has properties. The part missing is relationships to other nodes.
Now we know that Naveen works at a software company specialized in JavaScript.
If a tool could suggest few people like this based on a loose criteria, it would definitely help my search.
Getting dirty with Neo4J & Python
Since the above example is advance, I am going to start work by a simple query. Find me all the people who have skills of “JavaScript” and interests on “IoT”.
I picked the most popular graph database: Neo4j for a spin. It’s made with Java/Scala and it’s fairly easy to get started. You can point a database directory and Neo4j loads up a graph database server.
The browser console can be accessed through http://localhost:7474/browser/
. First I am going to run some queries and enter data into Neo4j.
In case you are wondering - this query language is called Cypher. It’s like a SQL and JSON combination. :Person
is called a label in the graph world. Labels are used to categorize nodes. Properties are defined inside the JSON property bag. In the Graph world below are the main concepts:-
- Nodes
- Relationships
- Properties
- Traversal
Neo4j Docs elaborates more on these concepts.
Next I am using flask to create a quick web api. This web api return “Hello World” for now. The recommended method to access Neo4j from Python is through py2neo.
How do you work with Neo4j? You need to obtain a Graph object. Before getting the graph object, I need to authenticate with the password.
After authenticating - a Cypher query needs to be crafted to match for for the problem I had earlier.
The above query can be translated to: “Find all persons with interests of ‘iot’ and skills of ‘javascript’”. Now I can use this query in python to extract the data.
When I do a curl to the endpoint - I get a JSON response of only naveen’s node.
Footnotes
With workarounds and hacks - we have bended relational databases to perform what graph databases are naturally good at. In many business use cases, the relationships between objects can be used to infer greater knowledge. An example would be: Handing a baby toys coupon for a shopper who bought some napkins. To calculate this using a traditional database - it would take lot of processing power. Graph database hits the sweet spot on these types of problems. Now let me hook this up with LinkedIn API and I’ll have the ultimate stalker tool in my hands.
Till next time mate,
Dulitha
at 18:22


Wall Street opens higher as report sparks trade deal hopes
by Reuters(Reuters) - U.S. stocks opened higher on Monday as expectations of a U.S.-China trade truce were strengthened by a report that the two sides were nearing an agreement, while a raft of blockbuster deals also lifted sentiment.
The Dow Jones Industrial Average (DJI) rose 42.15 points, or 0.15%, at the open to 27,917.77. The S&P 500 (SPX) opened higher by 7.15 points, or 0.23%, at 3,117.44, while the Nasdaq Composite (IXIC) gained 39.76 points, or 0.47%, to 8,559.65 at the opening bell.


Saves your flash cards and all other settings to any place of your choice. Kindly take a backup of configuration when updating.We are working to making it redundant.
Load your Backup
Setting up on a different system or just upgraded to find your flashcards missing.


COVID-19 Trends
Filter by State
About
Charts represent 14 days of new cases.
All chart scales are relative to each county.
Chart axis labels are hidden on mobile devices.
Case rate reflects new cases per 100k population.
Data is sourced from
Johns Hopkins University
.
Charts are updated daily.
Trending
Updated


[I am posting five reviews of STAR TREK VI. I could easily swamp the group with reviews of this movie, so I will probably not post any more unless they say something very different than those posted here (e.g., a review of the fashions in STAR TREK VI :-) ). Followups are directed to rec.arts.startrek to keep the discussion in the appropriate group. -Moderator]
STAR TREK VI: THE UNDISCOVERED COUNTRY [Spoilers] A film review by Mark R. Leeper Copyright 1991 Mark R. Leeper
Capsule review: This is a farewell to the original crew in a minor political thriller about Klingon perestroika and the old-line Cold Warriors who do not want to accept change. True fans of STAR TREK will be amazed at how closely the fall of the Soviet Union predicted what was going to happen in STAR TREK VI. Not the best of the series, but it is entertaining. Rating: +1 (-4 to +4).
Dearly beloved, we are gathered for the final adventure of the original crew of the starship Enterprise. The remote control has been passed to a new generation who are less and less interested in seeing swash-buckling heroes the age of their grandparents. And if the truth be known, Captain Kirk, Scotty, and Uhura are all sporting spare tires around the middle these days. Bones looks old. Spock seems to be ageing the best of the original crew and comes the closest to still being dashing. I guess on at least some level that is not surprising. We always knew there was something very different about Spock and it just sort of rubbed off on Leonard Nimoy.
So what sort of adventure is the final outing? The title implies that the plot in a major way involves "death--the undiscover'd country, from whose bourn no traveller returns," an allusion to the "To be or not to be" speech from Act III, Scene 1 of HAMLET.  Well, that would be telling! In any case, the main story is an end-of-the-Cold-War thriller, much like THE PACKAGE but reset in the "Star Trek" universe.
When the film opens, a Klingon Chernobyl incident has convinced the evil empire that the time has come for perestroika. On each side there are hard-liners who still live with the paranoia of the past, and new-liners who want to see a reconciliation and a new universe order. One Federation hard-liner is that crusty old Cold Warrior, Captain James Kirk (played somewhat against type by William Shatner). One of the new-liners is an old associate of his, Commander Spock (played this time around by Leonard Nimoy). The plot then proceeds to set up a fairly intriguing mystery and puzzle. An incident occurs that seems totally inexplicable. Kirk is framed to appear to have sabotaged the peace. This is the high point of the film. Unfortunately, the mystery's solution is very unconvincing. It is nearly as bad as the strategy puzzle in STAR TREK II: THE WRATH OF KHAN. That one was solved by the scriptwriter saying, "Oh, didn't you know? The Enterprise has the power to shut down the shields on other federation ships!" The solution to the puzzle here is not as bad as that of the WRATH OF KHAN problem, but it is bad. I will explain why in a spoiler after the review.
Other touches were irritating, like repeated allusions to both Shakespeare and Sherlock Holmes. It is a strange and unlikely touch that Klingons revere William Shakespeare and even claim him as a Klingon.
With the exception of one violent scene in zero gravity the special effects are not particularly new or creative, though many of the exteriors in space are still quite beautiful. Occasionally narrow-angle shots were used when showing a new locale on a planet. This was probably to save on the creation of sets since less would be within the range of the camera, but it is a stark contrast to earlier chapters.
Two problems in casting were minor problems. The first was an unaccountable resemblance between the Klingon David Warner played in STAR TREK VI and the kidnapped diplomat he played in STAR TREK V. Also, Christian Slater plays the kid who has won a contest and got to play in a scene of a real "Star Trek" movie. He has one brief, no-talent-needed scene.
All told, this is a minor thriller and a just okay entry in the series. I give it a +1 on the -4 to +4 scale.
**SPOILER**
Spoiler: For two reasons I think that the solution to the mystery torpedo problem is bad. First, it assumes a new piece of technology to come along at a perfect but unlikely moment. That is possible but it seems a plot contrivance. What bothers me more is the geometry of the situation. A photon torpedo travels in a straight line. If that line does not intersect your torpedo tubes, it was not your torpedo. It would be hard to position another torpedo tube so the trajectory could be close enough to fool the bridge. Ideally the attackers would want to be in front of your torpedo tubes, but they could not because of the instantaneous loss of cloaking. Their would have to position themselves so that their torpedo would fly in just the right plane. Even then, if the trajectory was observed from elsewhere on the Enterprise, the jig would have been up. If the victim ship were watching the Enterprise, they would have seen an impossible torpedo trajectory and also, for an instant, the ship that was firing on them.
Question: if a shape-changer wanted to prove she was a shape changer, wouldn't she just change her shape? Evelyn asked this one.
Mark R. Leeper att!mtgzy!leeper<EMAIL_ADDRESS>.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Drag the green ball below to change the time value `t` between
`0` and `1`. Notice how the interpolated color changes based on
the value of `t`. See the equations on the right to understand
how the color's red, green, and blue components are calculated
using linear interpolation of of `t` between a start and end color.
Assume these values:
`Red_{s tart} = 255, Green_{s tart} = 128, Blue_{s tart} = 0`
`Red_{end} = 128, Green_{end} = 0, Blue_{end} = 255`
`t_{s tart} = 0, t_{end} = 1`
Simplify interpolated color equation:
`Colo r = Colo r_{s tart} + (Colo r_{end} - Colo r_{s tart}) * ((t - t_{s tart})/(t_{end} - t_{s tart}))`
`Colo r = Colo r_{s tart} + (Colo r_{end} - Colo r_{s tart}) * ((t - 0)/(1 - 0))`
`Colo r = Colo r_{s tart} + (Colo r_{end} - Colo r_{s tart}) * t`
Solve for red, green, blue:


- Learning (wiki)
- Hebbian Theory (wiki)
- Learning Exercises
- Neuronal Dynamics - From single neurons to networks and models of cognition
- Theoretical Impediments to ML With Seven Sparks from the Causal Revolution (J Pearl Paper!)
- ML Intro (Slides!)
- A Few Useful Things to Know About Machine Learning (Blog!)
- Introduction to Intelligence, Learning, and AI (Blog)
- What’s the difference between learning statistical properties of a dataset and understanding?
- Statistical properties tell you the correlations (associations) between things , which enables you to predict the future. Understanding is the ability to imagine counterfactuals (things that could happen) in order to plan for and reflect on the past, future and present.
- In short, learning statistical properties only lets you passively predict the external world (prediction). Understanding lets you actively interact with it via formulation of symbolic plans representing the world (including yourself) as objects, events and relations (reflection)
- Can we have real understanding if we confined ourselves in language? I think even for human, language understanding means knowing what each word would mean in the world (physical or non-physical). Right?
Learning
- Learning:
Learning is the process of acquiring new, or modifying existing, knowledge, behaviors, skills, values, or preferences.
- Asynchronous:
Types of Learning
-
Hebbian (Associative) Learning:
Hebbian/Associative Learning is the process by which a person or animal learns an association between two stimuli or events, in which, simultaneous activation of cells leads to pronounced increases in synaptic strength between those cells.Hebbian Learning in Artificial Neural Networks:
From the pov of ANNs, Hebb’s principle can be described as a method of determining how to alter the weights between model neurons.- The weight between two neurons:
- Increases if the two neurons activate simultaneously,
- Reduces if they activate separately.
- Nodes that tend to be either both positive or both negative at the same time have strong positive weights, while those that tend to be opposite have strong negative weights.
Hebb’s Rule:
The change in the $i$ th synaptic weight $w_{i}$ is equal to a learning rate $\eta$ times the $i$ th input $x_{i}$ times the postsynapic response $y$:$$\Delta w_{i}=\eta x_{i} y$$
where in the case of a linear neuron:
$$y=\sum_{j} w_{j} x_{j}$$
Notes:
- It is regarded as the neuronal basis of unsupervised learning.
- The weight between two neurons:
-
Supervised Learning: Supervised Learning: the task of learning a function that maps an input to an output based on example input-output pairs.
- Unsupervised Learning:
Unsupervised Learning: the task of making inferences, by learning a better representation, from some datapoints that do not have any labels associated with them.
Unsupervised Learning is another name for Hebbian Learning
- Clustering
- hierarchical clustering
- k-means
- mixture models
- DBSCAN
- Anomaly Detection: Local Outlier Factor
- Neural Networks
- Autoencoders
- Deep Belief Nets
- Hebbian Learning
- Generative Adversarial Networks
- Self-organizing map
- Approaches for learning latent variable models such as
- Expectation–maximization algorithm (EM)
- Method of moments
- Blind signal separation techniques
- Principal component analysis
- Independent component analysis
- Non-negative matrix factorization
- Singular value decomposition
- Clustering
-
Reinforcement Learning:
Reinforcement Leaning: the task of learning how software agents ought to take actions in an environment so as to maximize some notion of cumulative reward.
-
Semi-supervised Learning:
-
Zero-Shot Learning:
-
Transfer Learning:
-
Multitask Learning:
- Domain Adaptation:
Theories of Learning
Reasoning and Inference
-
Logical Reasoning:
- Inductive Learning is the process of using observations to draw conclusions
- It is a method of reasoning in which the premises are viewed as supplying some evidence for the truth of the conclusion.
- It goes from specific to general (“bottom-up logic”).
- The truth of the conclusion of an inductive argument may be probable, based upon the evidence given.
- Deductive Learning is the process of using conclusions to form observations.
- It is the process of reasoning from one or more statements (premises) to reach a logically certain conclusion.
- It goes from general to specific (“top-down logic”).
- The conclusions reached (“observations”) are necessarily True.
- Abductive Learning is a form of inductive learning where we use observations to draw the simplest and most likely conclusions.
It can be understood as “inference to the best explanation”.
It is used by Sherlock Holmes.
In Mathematical Modeling (ML):
In the context of Mathematical Modeling the three kinds of reasoning can be described as follows:- The construction/creation of the structure of the model is abduction.
- Assigning values (or probability distributions) to the parameters of the model is induction.
- Executing/running the model is deduction.
- Inductive Learning is the process of using observations to draw conclusions
- Inference:
Inference has two definitions:- A conclusion reached on the basis of evidence and reasoning.
- The process of reaching such a conclusion.
-
Transductive Inference/Learning (Transduction):
The Goal of Transductive Learning is to “simply” add labels to the unlabeled data by exploiting labelled samples.
While, the goal of inductive learning is to infer the correct mapping from \(X\) to \(Y\).Transductive VS Semi-supervised Learning:
Transductive Learning is only concerned with the unlabeled data.Transductive Learning:
Inductive Learning:
Notes:


>
This is part of the old website. New website begins at fontforge.github.io
Are you a web developer? Help us migrate this page on Github
These differ between OpenType (originally called TrueType Open) and Apple (GX or Apple Advanced Typography). My support for both OpenType and Apple is incomplete.
GPOS
,
GSUB
and GDEF
opentype tables
GPOS,
GSUB,
GDEF
and BASE
opentype tables
The first two tables are used for positioning and substituting glyphs. The GPOS table can control things like: kerning, accent positioning, cursive joining, etc. The GSUB table can control things like: ligatures, arabic forms, vertical rotation, conversion to small caps, indic glyph rearrangement, etc. GDEF contains some rather esoteric glyph information, ligature carets, etc. BASE contains information on baseline placement and line heights.
This page assumes basic familiarity with the abilities of the tables, for more information on them read, study and inwardly digest the opentype docs on:
The basic idea of the GPOS and GSUB tables is that each script (or language within a script) has a set of "features" that are available to it. A feature in turn is associated with a lookup which contains data for the feature. An example of a script is 'latn' for latin, 'arab' for arabic, 'hani' for chinese ideographs. Two examples of features are 'kern' which provides kerning information between pairs of glyphs and 'init' which will transform one set of glyphs to another when those glyphs are at the beginning of a word.
FontForge does not support the full range of possibilities inherent in these tables.
GPOS
table
FontForge will read the following sub tables of the GPOS table:
| name | Reading support | Writing support | |
|---|---|---|---|
| 1 | single adjustment | This sub-table allows the font designer to change the metrics of a specific glyph. The feature tag will provide a context in which the change should occur. For instance the 'tnum' (tabular numbers) feature could change a proportionally spaced digit by adjusting its advance width to be some set value and then centering the digit (by adjusting the left side bearing) within the new width. | These can be created with the Element->Char Info->Position command. |
| 2 | pair adjustment | This sub-table allows the font designer to change the metrics of a specific pair of glyph. The most common use of this is for kerning where the advance width of the first glyph is altered depending on which glyph follows it. But the table is more general than that and could support mark (accent, vowel) positioning over a base glyph (though that is more efficiently done with the mark to base subtable). | 'kern' feature s may be created from the Metrics View. 'vkrn' with Metrics->VKern From HKern. |
| 3 | cursive attachment | This sub-table allows the font designer to force adjacent glyphs to join at specific points. It can be used to generate the slanted script style needed for Urdu. | Only the 'curs' feature is supported for this sub-table. These may be created with the Points->Add Anchor command |
| 4 | mark to base | This sub-table allows the font designer to specify how mark glyphs (accents, vowel signs, etc.) are positioned over base glyphs. Every glyph can have an attachment point and the mark's attachment point will be placed on the base's attachment point so the two join properly. See my example in the overview. | These may be created with the Points->Add Anchor command |
| 5 | mark to ligature | This sub-table is very similar to the previous one except that the base glyph is a ligature and may have several different points at which the same type of accent may be placed. | These may be created with the Points->Add Anchor command |
| 6 | mark to mark | This sub-table is very similar to the previous two except that the base glyph is itself a mark. This may be used when a glyph has two accents each of which would normally be placed at the same attachment point on a base glyph. The second accent will be place relative to the first accent rather than to the base glyph. | These may be created with the Points->Add Anchor command |
| 7 | contextual positioning | This sub-table allows the font designer to control the positioning of glyphs when they occur within a specific string (or class of strings). For instance this table could say "when you see a digit followed by the string "th" then raise the "th" into a superscript position" | These may be created with the Element->Font Info->Contextual command |
| 8 | chaining contextual positioning | This is a slightly more complex version of the above, it doesn't really add new capabilities, but it does provide a more logical approach to the issue. | These may be created with the Element->Font Info->Contextual command |
| 9 | extension positioning | This is used to allow for a GPOS table which is bigger than 64k. Its use should be quite invisible to the font designer | FontForge uses this sub-table when needed. |
| 10+ | reserved for future use | FontForge does not support these sub-tables yet. (nor does anyone) |
FontForge also has built into it knowledge on how to provide default values for some features that use these tables. See Element->Typo. Features->Default ATT command for that.
FontForge will retain the order of features in the GPOS table and when a font is generated the order should be the same as it was before.
GSUB
table
FontForge will read the following sub tables of the GSUB table:
| name | Reading support | Writing support | |
|---|---|---|---|
| 1 | single substitution | This sub-table allows the font designer to change from one glyph to another, with a context provided by the feature tag. For example many scripts have letters which have a different form at the end of a word than they do within (this is true of every letter in arabic, several in hebrew, lower case sigma in greek, and the long-s/short-s pair in renaissance latin). So the 'fina' feature would map the normal form into the final form, and the word processing program would do a lookup at the end of each word to see if a transformation was needed. | These can be created with the Element->Char Info->Substitution command. |
| 2 | multiple substitution | This sub-table allows the font designer to replace one glyph by a series of others. This is generally used for rather technical layout issues. | These can be created with the Element->Char Info->Multiple Substitution command. |
| 3 | alternate substitution | This sub-table allows the font designer to have a series of "alternates" for each glyph. One common example would be an italic font which had several swash variants for each capital letter. The word processing program would allow the user to choose which variant was appropriate | These can be created with the Element->Char Info->Alternate Substitution command. |
| 4 | ligature substitution | This sub-table allows the font designer to replace a string of glyphs with another glyph. A common example is a ligature where the string is replaced by the ligature. | These can be created with the Element->Char Info->Ligature command. |
| 5 | contextual substitution | This subtable allows for a string of glyphs to replace another string of glyphs (or class of strings of glyphs) | These may be created with the Element->Font Info->Contextual command |
| 6 | chaining contextual substitution | This is a slightly more complex version of the above, it doesn't really add new capabilities, but it does provide a more logical approach to the issue. | These may be created with the Element->Font Info->Contextual command |
| 7 | extension positioning | This is used to allow for a GSUB table which is bigger than 64k. Its use should be quite invisible to the font designer | FontForge uses this sub-table when needed. |
| 8 | reverse chaining contextual single substitution | This allows glyph substitutions to happen in reverse order, and it a variant of the chaining contextual subtable. | These may be created with the Element->Font Info->Contextual command |
| 9+ | reserved for future use | FontForge does not support these sub-tables yet. (nor does anyone) |
FontForge also has built into it knowledge on how to provide default values for some features that use these tables. See the [Populate] button of the various lookup subtable dialogs.
FontForge can produce some of these tables, but the text layout/word processing program used has to look up the tables and do the actual work of rearranging the glyphs.
FontForge will retain the order of features in the GSUB table, and the user may adjust it with the Element->Font Info command.
GDEF
table
FontForge will read ligature carets out of a GDEF table.
It will generate a GDEF table containing a glyph class definition sub-table (if needed) or a ligature caret sub-table (if needed).
As above I do not go deeply into the abilities of these tables, for more information see Apple's docs:
FontForge will currently read and produce (if Apple mode is set in font generation) the following tables:
| tag | name | Reading support | Writing support |
|---|---|---|---|
'bsln' |
baseline table | FontForge will read baseline data (except for Apple's ideographic centered baseline, for which there is no OpenType equivalent) | FontForge will produce this table if the user has specified baseline data which apple supports |
| tag | name | Reading support | Writing support |
|---|---|---|---|
'lcar' |
ligature caret table | FontForge will read ligature carets | FontForge will produce this table if the user has specified ligature carets |
'prop' |
glyph properties table | FontForge will read this table to figure out which glyphs are hebrew and arabic, and which have 'r2la' substitutions. | FontForge will generate this table if the font contains some right to left glyphs. |
| tag | name | Reading support | Writing support |
|---|---|---|---|
'kern' |
kerning table | FontForge will read horizontal/vertical kerning pairs and classes. FontForge can read contextual kerning information too into a state machine. | FontForge will produce this if the font contains kerning data -- kerning pairs, kerning by classes, and kerning by state machine. |
'opbd' |
Optical bounds table | FontForge will read optical bounds | FontForge will produce this table if the user has specified right and left bounds as simple positions ('lfbd' and 'rtbd'). |
FontForge has support for the 'mort'
and
'morx'
tables (Glyph metamorphosis and extended
glyph metamorphosis tables). These correspond vaguely to the
GSUB table. Note: Any feature type/setting combinations
which correspond directly to an open type feature will be converted to the
opentype tag when read in. It will be converted back to a feature/setting
when an apple font is generated (use
File->Preferences to extend FontForge's mapping
from feature type/setting to opentype tags).
| name | Reading support | Writing support | |
|---|---|---|---|
| 0 | Indic style rearrangement | FontForge can read these and stores them as state machines (which can be edited with Font Info) | Any indic state machines will be output in the generated font. |
| 1 | contextual glyph substitution | FontForge can read these and stores them as state machines (which can be edited with Font Info) | If the font contains any state machines they will be output here. If
there are no state machines then the following conversions of opentype features
will be done:
|
| 2 | ligature substitution | FontForge can read the unconditional information from these and stores them as opentype ligatures (which can be edited with Font Info or Char Info). | If there are any ligatures with an apple feature/setting (or which have an opentype tag which can be converted to an apple feature/setting) then this table will be output. |
| 4 | non-contextual glyph substitution | FontForge can read these and stores them as opentype simple substitutions (which can be edited with Font Info or Char Info) | If there are any substitutions with an apple feature/setting (or which have an opentype tag which can be converted to an apple feature/setting) then this table will be output. |
| 5 | contextual glyph insertion | FontForge can read these and stores them as state machines (which can be edited with Font Info) | Any glyph insertion state machines will be output in the generated font. |
Some features have almost the same meaning in OpenType and AAT (although they are expressed quite differently), others are similar enough that they can sometimes be converted, and others have essentially no common ground.
| OT Table | AAT Table | Description |
|---|---|---|
GDEF |
lcar |
The ligature caret information in both 'GDEF' and 'lcar' is essentially identical and FontForge has no trouble reading both and converting from one to the other. |
BASE |
bsln |
There is slightly different baseline data in the two formats. 'bsln' does not provide extent information. 'bsln' provides a baseline for every glyph, while 'BASE' provides a baseline for every script -- one hopes all glyphs in a script will have the same baseline, but it isn't guaranteed. Finally 'bsln' and 'BASE' provide a slightly different set of baseline tags, and FontForge only supports the OpenType ones. In particular Apple's ideographic centered baseline will be lost. |
GPOS |
kern |
In most cases kerning information can be converted from one format to
another. Both provide support for vertical kerning and right to left kerning.
Both provide support for kerning by glyph pair and kerning by classes.
OpenType allows kerning commands to be supplied via a contextual chaining feature, Apple allows them to be controled by a state machine. FontForge supports both, but does not interconvert. |
GPOS |
opbd |
The GPOS features 'lfbd' and 'rtbd' provide the information needed to generate an Apple opbd table. If FontForge reads a font with an opbd table it will generate appropriate 'lfbd' and 'rtbd' features. If FontForge generates a font in apple mode that has these features it will create an opbd table. Similarly when FontForge reads an opbd table it will create 'lfbd' and 'rtbd' features. |
GPOS |
|
I am not aware of any way to convert other GPOS features to AAT. |
GSUB |
morx |
The 'mort' and 'morx' tables have the same capabilities ('mort' tables are an old format and Apple currently encourages that 'morx' tables be used instead). FontForge can read either one, but only generates 'morx' tables. Interconversion depends on specific feature types and the sub-table formats, see below |
GSUB |
mort |
OpenType uses a four character feature tag (like 'liga') while Apple uses two numbers to represent a feature setting (<1,2>). For FontForge to be able to inter-convert an OpenType feature into an Apple feature there must first be a correspondence between the two naming conventions. Sometimes there is an easy direct conversion (above 'liga' and <1,2> both represent "Common Ligatures") but far more often there is none. See below for a list of the tags and feature settings that FontForge considers similar enough to interconvert.
GSUB tables have 7 sub-table formats, while morx tables have 5.
| GSUB sub- table |
morx sub- table |
Description |
|---|---|---|
Single |
Non- |
These two sub-tables have almost exactly the same capabilities. Each allows one glyph to be substituted for another. The morx sub-table also allows a glyph to be deleted, while the GSUB sub-table does not. |
Multiple |
This GSUB subtable allows a single glyph to be replaced by multiple glyphs.
It has some similarities to Apple's Glyph Insertion sub-table except:
|
|
Glyph |
This morx subtable allows a string of glyphs to be inserted before or after the current glyph (the current glyph always remains). This sub-table is contextual (ie. the insertion can be restricted to certain contexts). It bears some similarities to the GSUB Multiple subtable above. | |
| Alternate | This GSUB subtable allows a single glyph to be replaced by any one of several alternatives (presumably with help from a word processor's UI). An example of this would be a character which had several swash variants. There is nothing like this in the 'morx' table. | |
Ligature |
Ligature |
Both formats have ligature sub-tables. The 'GSUB' version is unconditional
(the ligature is always applied -- though a ligature substitution could be
embedded in an OpenType contextual substitution to make it condtional). The
'morx' version can be contextual (though in fonts I have examined it is usually
uncontextual). FontForge only supports unconditional ligatures.
FontForge can read all the unconditional ligatures from a 'morx' sub-table. FontForge loses all contextual ligatures. In OpenType, contextual ligatures can be built by wrapping a ligature sub-table inside a Context or Chaining Context subtable. |
Contextual |
This morx subtable allows single glyph substitutions to be applied within certain contexts. At first glance it seems that this could be converted into an opentype Context subtable, but this is rarely the case. | |
Context |
These GSUB subtables allow any collection of other substitutions to be applied contextually. At first glance one might think that these (with appropriate nested substitutions) might be converted to 'morx' contextual glyph substitutions, contextual ligatures, or even glyph insertion. Unfortunately this is rarely the case. | |
Chaining |
||
Reverse |
This GSUB subtable is applied backwards to the stream of glyphs, it allows a single glyph substitution per contextual match. There is nothing like it in 'morx'. | |
Indic |
This 'morx' subtable allows for several glyphs to interchange their positions in the glyph stream. There is nothing like it in GSUB (or GPOS for that matter). |
Sadly OpenType and AAT provide disjoint capabilities when it comes to contextual matching. AAT is more capable in some areas, OpenType more capable in others. FontForge is able to convert an OpenType contextual substitution into an AAT one if FontForge can detect that the OpenType substitution does not use capabilities beyond those of AAT. Currently this means:
| Rule | a | b | c | d | e | f |
|---|---|---|---|---|---|---|
| Rule | a | b | c | d | ||
| Rule | a | b | ||||
| Substitutions | A | B | C | D | E | F |
So the third rule will match an "ab" and convert them to "AB" (and this is valid because we have one internal and one final substitution and that's ok), then if that "ab" is followed by "cd" then rule 2 kicks in and will replace the "cd" with "CD" (again this has one internal and one final substitution, which is ok), and if that is followed by "ef" then they will be converted to "EF".
The following is not valid:
| Substitution | B | ||
|---|---|---|---|
| Rule | a | b | c |
|
|
|||
| Rule | a | b | |
| Substitution | A |
The two rules have substitutions at different places and that can't be expressed in an Apple state machine given that they have the same glyphs.
FontForge does not even try to convert an AAT contextual glyph substitution sub-table, too few of these can be expressed in OpenType to make it worth while.
NOTE: It would be possible to convert more lookups to state machines if FontForge were willing to:
FontForge will do neither of these.
There is a subtle bug involved in converting a chaining contextual substitution into an Apple contextual glyph substitution. AAT does not have the concept of a backtrack list, this means that substitutions may occur in a different order.
Well, obviously there are some thing that just aren't present. The concept of contextual positioning is missing from AAT, while Indic rearrangement is missing from OpenType. So let's concentrate on contextual substitutions, which both appear to support. The argument that follows is based on the capabilities of contextual matching, it applies equally to contextual ligatures, glyph insertion, glyph substitution and kerning, the examples given are only of glyph substitution because it is easier to represent (and because FontForge is only willing to convert contextual glyph substitutions) But even here, there is a very basic mismatch in concepts between the way OpenType and Apple specify contextual substitutions. Consider the following contextual substitution in a glyph list format:
| Initial Sequence | a | b | c | d |
|---|---|---|---|---|
Replace With |
B | C |
Now in OpenType this means if you find the sequence "abcd" then replace the "b" with "B" and the "c" with "C". But this can't be expressed in an Apple state machine. In OpenType the match is done first, and then the substitutions occur. In a state machine the substitutions have to be done (almost) concurrently with the match and so must happen whether the final "d" is present or not. (Note I'm using a glyph sequence because it is easier to display in an example. The same problem applies if the substitution is expressed by classes or by coverage tables)
Consider the following table with two glyph strings
| Initial Sequence | a | b |
c |
d |
|---|---|---|---|---|
Replace With |
B |
|||
| Initial Sequence | a | b |
c |
e |
Replace With |
C |
So replace the "b" if the final "d" is present, otherwise replace the "c". Again this cannot be expressed in Apple's state machines.
Finally consider
| Initial Sequence | a |
b |
c |
d |
|---|---|---|---|---|
Replace With |
|
C | ||
| Initial Sequence | b |
c |
e |
|
Replace With |
B |
|
If this substitution is given the sequence "abce" it cannot work in AAT. When it reads the "a" it will start down the "abcd" branch, the match will not fail until it looks for the "d" and finds "e" instead. At that point it is too late to switch to the "bce" substitution (which does match) because the "b" glyph will not have been marked as a substitution location.
Since Apple's glyph substitutions can delete glyphs a contextual glyph substitution table can create two character ligatures (one glyph is converted to the ligature and the other is deleted), while OpenType tables must use a ligature substitution to do this.
Finally an AAT state machine can match a general regular expression, while OpenType tables can only match fixed length strings. Suppose you were typesetting mathematics and wanted a substitution which would convert an arbitrary digit string following a variable into a subscript (so x23 should become x23). It is easy to write a state machine which will keep substituting as long as it gets more digits, but you'd need an infinite number of OpenType rules to have the same expressive power.
These examples probably seem fairly contrived, and (except for the swash one) they are. But they illustrate the point that the two formats have very different expressive capabilities and it is NOT possible to write a converter which will take any input in one format and produce an equivalent output in the other.
| Apple Feature Setting | OpenType Feature Name | OpenType Tag |
|---|---|---|
| Required Ligatures | Required Ligatures | rlig |
| Common Ligatures | Standard Ligatures | liga |
| Rare Ligatures | Discretionary | dlig |
| Fractions | Fractions | frac |
|
|
||
| Contextual Alternatives | Cursive connection | calt |
|
|
||
| Vertical Forms | Vertical Rotation 2 | vrt2 |
| Monospace numbers | Tabular numbers | tnum |
| Superscript | Superscript | sups |
| Subscript | Subscript | subs |
| Proportional Text | Proportional Widths | pwid |
| Half-width Text | Half Width | hwid |
| Full-width Text | Full Width | fwid |
| Traditional Characters | Traditional | trad |
| Simplified Characters | Simplified | smpl |
| JIS 1978 Characters | JIS 1978 Characters | jp78 |
| JIS 1983 Characters | JIS 1983 Characters | jp83 |
| JIS 1990 Characters | JIS 1990 Characters | jp90 |
FontForge will retain the order of features in the morx table, and the user may adjust it with the Element->Font Info command. (this is the same list as that used for GSUB table. GSUB features that don't correspond to mac features will be ignored).
FontForge does not (yet) support all the advanced typographic features available in either opentype or apple advanced typography.
See here for a complete list of supported tables.
See here for a complete list of supported tables.


This article describes how to Automate Governance, Compliance, Reliability and Risk Monitoring for an enterprise using Azure
To deploy Cloudneeti VM from the Azure Marketplace:
Note: User logging into Azure Portal must have Global admin role to make the necessary configuration changes.
Cloudneeti Enterprise
.Resource Manager
.On the Basics blade, complete the following fields:
Name
: Type a descriptive name for your virtual machine.VM disk type
: Select disk type SSD or HDDUser name
: Type a user name for logging in to your virtual machinePassword
: Enter password for logging in to your virtual machineConfirm password
: Enter the same password for confirmationSubscription
: Select the subscription under which to create your virtual machineResource group
: Specify the resource group to contain all your Cloudneeti VM resources. You can create a new resource group or select an existing resource groupLocation
: Select an Azure region from the Location listCloudneeti uses AD Application for requesting consent accessing your Azure Subscription resources. To create an Active Directory Application. Refer to documentation Integrating applications with Azure Active Directory
You can do both the steps i.e. Create an Active Directory Application using automated script and Authorize Application ID to access your Subscription resources using automated scripts provided below:
<#
Powershell Version : 5.0
Pre-requisites to run this script -
Required Modules & Version-
AzureRM 4.1.0
AzureADPreview <IP_ADDRESS>
You can Install the required modules by executing below command.
Install-Module AzureRM
Install-Module AzureADPreview
Account permissions -
The account to execute this script must be an Azure AD Account with Global Administrator Permission at Tenant level and Owner permission at Subscription level.
Description
This script creates an AD Application, Service Principal, Add Response URL and Grant permission at Subscription or ResourceGroup level. By default this will grant 'Reader'
permission to the App if only SubscriptionID is provided as a parameter input. This script requires SubscriptionID as a mandatory input.
Example
Creates a service principal without response url.
.\Create-ServicePrincipal.ps1 -subscriptionId xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx
Example
Creates a Service Principal with response url.
.\Create-ServicePrincipal.ps1 -subscriptionId xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx -dnsNameLabel tjgj7s-enterprise.eastus.cloudapp.azure.com
Example
Creates an App and grant Contributor permission at Subscription.
.\Create-ServicePrincipal.ps1 -subId 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx' -prefix 'AdApp' -def 'Contributor' -scope Subscription
Example
Creates an App and grant Contributor permission at given Resource Group.
.\Create-ServicePrincipal.ps1 -subId 'xxxxxxx-xxxx-xxxx-xxxx-xxxxxxx' -prefix 'AdApp' -def 'Contributor' -scope ResourceGroup -resourceGroupName 'testResourceGroup'
#>
Param (
# Provide Subscription ID
[Parameter(Mandatory=$true,
Position=0,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[Alias("subId")]
$subscriptionId,
# Provide public DNS name label for cloudneeti application. if you are accessing it using azure dns label then enter the same. e.g. cnbasic.eastus2.cloudapp.azure.com
[Parameter(Mandatory=$false,
Position=1,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[Alias("dnsName")]
$dnsNameLabel = 'null',
# Provide displayname suffix for AD application.
[Parameter(Mandatory=$false,
Position=2,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[Alias("prefix")]
$adApplicationDisplayNamePrefix = 'cloudneeti',
# Name of the RBAC role that needs to be assigned to the principal i.e. Reader, Contributor, Virtual Network Administrator, etc.
[Parameter(Mandatory=$false,
Position=3,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[Alias("def")]
$roleDefinitionName = 'Reader',
# The Scope of the role assignment
[Parameter(Mandatory=$false,
Position=4,
ParameterSetName='Parameter Set 1')]
[ValidateSet ("Subscription", "ResourceGroup")]
$scope = 'Subscription',
# The Resource Group Name to assing permission.
[Parameter(Mandatory=$false,
Position=5,
ParameterSetName='Parameter Set 1')]
[ValidateNotNull()]
[ValidateScript({$scope -eq 'ResourceGroup'})]
$resourceGroupName
)
# Function to create a strong 15 length Strong & Random password
function New-AesManagedObject($key, $IV) {
$aesManaged = New-Object "System.Security.Cryptography.AesManaged"
$aesManaged.Mode = [System.Security.Cryptography.CipherMode]::CBC
$aesManaged.Padding = [System.Security.Cryptography.PaddingMode]::Zeros
$aesManaged.BlockSize = 128
$aesManaged.KeySize = 256
if ($IV) {
if ($IV.getType().Name -eq "String") {
$aesManaged.IV = [System.Convert]::FromBase64String($IV)
}
else {
$aesManaged.IV = $IV
}
}
if ($key) {
if ($key.getType().Name -eq "String") {
$aesManaged.Key = [System.Convert]::FromBase64String($key)
}
else {
$aesManaged.Key = $key
}
}
$aesManaged
}
function New-AesKey() {
$aesManaged = New-AesManagedObject
$aesManaged.GenerateKey()
[System.Convert]::ToBase64String($aesManaged.Key)
}
$ErrorActionPreference = 'Stop'
Import-Module AzureRM.Resources
Import-Module AzureADPreview
try {
# To login to Azure Resource Manager
Write-Host ("1: Logging in to Azure Subscription " + $SubscriptionId) -ForegroundColor Yellow
Try
{
Get-AzureRmSubscription -SubscriptionId $subscriptionId
$context = Set-AzureRmContext -SubscriptionId $subscriptionId
}
Catch
{
Login-AzureRmAccount -SubscriptionId $SubscriptionId
$context = Set-AzureRmContext -SubscriptionId $SubscriptionId
}
switch ($scope) {
'Subscription' { $scopeUri = "/subscriptions/" + $SubscriptionId }
'ResourceGroup' { $scopeUri = "/subscriptions/" + $SubscriptionId + '/resourceGroups/' + $resourceGroupName }
}
$homePageURL = ("http://www.cloudneeti.com")
$applicationDisplayName = ($adApplicationDisplayNamePrefix + (Get-Random -Minimum 100 -Maximum 999))
$identifierUris = "http://" + $applicationDisplayName
# Create Active Directory Application
try
{
Write-Host -ForegroundColor Yellow "2: Creating a new azure active directory application - $applicationDisplayName."
#Create the 44-character key value
$keyValue = New-AesKey
# create the PSADPasswordCredential and populated it with start and end dates, a generated GUID, and my key value:
$psadCredential = New-Object Microsoft.Azure.Commands.Resources.Models.ActiveDirectory.PSADPasswordCredential
$startDate = Get-Date
$psadCredential.StartDate = $startDate
$psadCredential.EndDate = $startDate.AddYears(100)
$psadCredential.KeyId = [guid]::NewGuid()
$psadCredential.Password = $KeyValue
$azureAdApplication = New-AzureRmADApplication -DisplayName $applicationDisplayName -HomePage $homePageURL -IdentifierUris $identifierUris -PasswordCredentials $psadCredential
}
catch [System.Exception]
{
throw $_
}
# Update Azure AD Application with Response URLs.
if($dnsNameLabel -ne 'null'){
$ReplyUrls = "http://" + $dnsNameLabel + '/Account/SignIn'
Set-AzureRmADApplication -ObjectId $azureAdApplication.ObjectId -ReplyUrls $ReplyUrls
}
# Create Service Principal for the AD app
Write-Host -ForegroundColor Yellow "3: Creating a new azure active directory service principal for applicationClientID - $($azureAdApplication.ApplicationId)"
$servicePrincipal = New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId
$newRole = $null
$retries = 0;
While ($newRole -eq $null -and $retries -le 6)
{
# Sleep here for a few seconds to allow the service principal application to become active (should only take a couple of seconds normally)
Start-Sleep 30
New-AzureRMRoleAssignment -RoleDefinitionName $roleDefinitionName -ServicePrincipalName $servicePrincipal.ApplicationId -Scope $scopeUri | Write-Verbose -ErrorAction SilentlyContinue
$newRole = Get-AzureRMRoleAssignment -ServicePrincipalName $servicePrincipal.ApplicationId -ErrorAction SilentlyContinue
$retries++;
}
# Create Access Token Policy for Service Principal with one day expiry.
Write-Host -ForegroundColor Yellow "4: Creating access token policy for service principal with one day expiry."
Connect-AzureAD
$adPolicy = New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1,"AccessTokenLifetime":"23:59:59","MaxAgeSessionSingleFactor":"23:59:59"}}') -DisplayName "CloudneetiAppToken" -IsOrganizationDefault $false -Type "TokenLifetimePolicy"
Add-AzureADServicePrincipalPolicy -Id $servicePrincipal.Id.Guid -RefObjectId $adPolicy.id
############### SCRIPT OUTPUT ##########################
Write-Host -ForegroundColor Yellow "`n5: Copy and provide the below information while configuring Cloudneeti."
$Output = @{
"DomainName" = ($context.Account.Id -split '@')[1];
"TenantId" = $context.Tenant.Id;
"SubscriptionId" = $context.Subscription.Id;
"ADApplicationName" = $azureAdApplication.DisplayName;
"ADApplicationClientId" = $azureAdApplication.ApplicationId;
"ADApplicationPassword" = $KeyValue;
}
Write-Host -ForegroundColor Yellow "$($Output | Out-String)"
}
catch {
Throw $_
}
The following sections will help you configure each App Registration permission sets.
In this step you will modify Windows Azure Active Directory, Microsoft Graph, Windows Azure Service Management API
NOTE the order of your API’s maybe different than listed in this documentation.
Select the Windows Azure Active Directory API
Select the following 2 application permissions
Read and write directory data
Select the following 3 delegated permissions
Read all groups
Read directory data
Click Select
Select Done
Click +Add.
Select the Microsoft Graph API
Select the following 6 application permissions
Read files in all site collections
Read all groups
Read directory data
Read and write directory data
Read all users’ full profiles
Select the following 7 delegated permissions
Sign in and read user profiles
Read all users’ basic profiles
Read all users’ full profiles
Read all groups
Read directory data
Read and write directory data
Click Select
Select Done
Click +Add
Select the Windows Azure Service Management API
Select no application permissions
Select the following 1 delegated permission
Click Select
If the configurations are successful, you will see a table of permissions similar to the following:
| API | Application permissions | Delegated permissions |
|---|---|---|
| Windows Azure Active Directory | 2 | 3 |
| Microsoft Graph | 6 | 7 |
| Windows Azure Service Management | 0 | 1 |


Preparation time
less than 30 mins
Cooking time
less than 10 mins
Serves
Serves 2
A great alternative to the traditional fry-up that’s low in calories but high in flavour. Poached eggs are a great way to make breakfast a little lighter and surprisingly easy to cook.
As part of an
Intermittent diet
plan, 1 serving provides:
Your daily salty food
1 of your 6 daily vegetable portions
This meal provides 212 kcal per portion.
Preheat the grill to its hottest setting. Put the tomatoes on a rack over a grill pan lined with foil. Season with pepper.
Grill for 3 minutes, then add the bacon and grill for a further 4 minutes, turning the bacon after 2 minutes so that it is lightly browned on both sides.
Meanwhile, half-fill a medium pan with water and bring it to the boil. Crack the eggs into two small bowls. Turn the heat down so that the water is bubbling very gently. Slowly add the eggs to the water and cook for 3 minutes or until the white is set but the yolk remains runny.
Using a slotted spoon, scoop the eggs out of the water and divide between two plates. Add the cooked bacon and tomatoes. Season with a little salt and pepper and serve.


A CIVIL ENGINEER's GUIDE
Sim is a Open-Source platform related to Civil Engineering Students and teachers.