Contributing to TMail
Here is a blunt truth, TMail is what we (that is you and me) make it.
I have had a few people asking how to contribute to TMail, so I thought I would quickly do a write up on how to go about it.
First things first, go to the TMail Mailing list and subscribe and let us know what you want to attack, while this is definitely not a requirement to writing a patch, maybe someone else has the same problem and / or is mid fixing it, plus, we're basically a nice bunch of people ;)
Then, if you are new to this sort of thing you should go and read this great write up by Dr Nic which covers the basic steps on how to check out, patch and submit fixes to code. This also applied very well to TMail.
Then, you need to get a copy of the latest TMail trunk code. You do this like so:
baci:~ mikel$ svn checkout http://tmail.rubyforge.org/svn/trunk tmail
This will check out the most recent version of TMail from the source tree at RubyForge. Once you have this, the first thing you should do is run the test suite. There are over 4000 assertions run by the test suite to make sure all is OK. This also gives you a stable datum of "When I got it, it was working so I just have to make sure it stays working...". To run the tests, do this:
baci:~ mikel$ cd tmail baci:~/tmail mikel$ rake test (in /Users/mikel/tmail) /usr/local/bin/ruby -Ilib:test ((SNIP)) Loaded suite /usr/local/lib/ruby/gems/1.8/gems/rake-0.8.1/lib/rake/rake_test_loader Started ........................................................................ ........................................................................ ............................................................ Finished in 0.456426 seconds. 204 tests, 4014 assertions, 0 failures, 0 errors
If you get any errors at this point, post to the TMail Mailing list and let us know, tell us what version of Ruby you are running, and what platform you are on as well as any error output from the tests. If you can fix it, go ahead!
Now that you have the trunk version, you need to write your patch and submit it. If you are making a code change, you should write a test driven change, if you are new to this, you can find a great screen cast by James Edward Gray II on TDD with Textmate. This will give you the basics of what a test drive change is and how to go about it. For all you RSpec fans, I am seriously considering moving the testing framework over to BDD and RSpec, if you want to get on board and help out, that would be great!
Once you have written your test, run rake test again and watch it fail. This is a key part of Test Driven Development. Then write your change in the code.
Once you have written your code, run rake test again, and your test should now pass and every OTHER test should also pass. If this is the case, then well done! You have just made a test driven change to the TMail library.
Now you need to make the diff file of what you have done against the library. You do this using the svn diff command. First however, you should update your code, just in case someone else has updated the source tree between you checking it out and writing your patch. So, you do both like this:
baci:~/tmail mikel$ svn up At revision 206. baci:~/tmail mikel$ svn diff > my_well_named_patch_file.diff baci:~/tmail mikel$
Note: If while doing the SVN UP anything was updated, you should re-run your tests using rake test to make sure your patch didn't just go stale :)
Next step is peer review. Go open a patch ticket on the RubyForge tracker, in it, select the right category and group for the patch you have made (if there isn't one that matches, leave it as none and then mention this in the description field). Give your ticket a name, and then attach your file.
It is a good idea to then go to the TMail Talk list and let everyone know about your patch. Then we can check it out, suggest changes or commit it if all is good.
That's it! Easy hey? Once you have submitted patches, it gets easier and you get to bask in the glory of being a committer to Ruby's most popular mail handling library.


Master the Language of the Web: HTML, CSS and JavaScript. This path will prepare you to build bacic websites and interactive web apps.
These are apps created for a specific platform (iOS or Android) using the software development tools and languages supported by those operating systems.
Application of artificial intelligence (AI) that provides systems the ability to automatically learn and improve from experience without being explicitly programmed.
Learn SQL and Python and build the skills you need to analyze data. Great for anyone trying to use code to be more data-driven.


class="ted pb-pattern o-lines-bold"
.ted:after { background-size: 20px ;}
.ted { background-color: #ffffff ;}
PatternBolt is a fine selection of SVG pattern background, packed in a single CSS or SASS (scss) file, just include the css file in your project and add a class to your element to insert a pattern.
You can change color palette changing the background-color of your element and the pattern size changing the background-size of the ':after' element. As the pattern is added in a ':after' level, you still can manipulate your DOM element as you want, adding a bg-color, a bg-picture, a gradient, or both.
As they are vectors they never pixelate, not even on retina screens ;)
PS: The pattern selection still be under development, go to the bottom to see the showcase.


Laying out charts side by side isn’t hard as long as you pay extra attention to your CSS and you carefully consider how to best use divs, classes and ids.


My name is Ilya.
I will tell about the Document Object Model
When a web page is loaded, the browser creates a Document Object Model (DOM).
The Document Object Model (DOM) is a programming interface for HTML and XML documents. It represents the page so that programs can change the document structure, style, and content. The DOM model represents a document with a logical tree. Each branch of the tree ends in a node, and each node contains objects.
<!DOCTYPE html>

<title>My Title</title>

My Header

My Link

The principal standardization of DOM was handled by the World Wide Web Consortium, which last developed a recommendation in 2004. WHATWG took over development of the standard, publishing it as a living document. The W3C now publishes stable snapshots of the WHATWG standard.
All items in the DOM are defined as nodes. Node is an interface from which a number of DOM API object types inherit.
Methods:
element.appendChild(aChild);
The Node.appendChild() method adds a node to the end of the list of children of a specified parent node.
let p = document.createElement("p");
document.body.appendChild(p);
node.hasChildNodes();
The Node.hasChildNodes() method returns a Boolean value indicating whether the current Node has child nodes or not.
let foo = document.getElementById("foo");
if (foo.hasChildNodes()) {
foo.removeChild( foo.childNodes[0] );
}
let dupNode = node.cloneNode([deep]);
The Node.cloneNode() method returns a duplicate of the node on which this method was called.
let p = document.getElementById("para1");
let p_prime = p.cloneNode(true);
Properties:
let nodeList = elementNodeReference.childNodes;
The Node.childNodes read-only property returns a live NodeList of child nodes of the given element where the first child node is assigned index 0.
while (box.firstChild) {
box.removeChild(box.firstChild);
}
let type = node.nodeType;
Returns an unsigned short representing the type of the node.
let node = document.documentElement.firstChild;
if (node.nodeType != Node.COMMENT_NODE)
console.log("You should comment your code well!");
previousNode = node.previousSibling;
The Node.previousSibling read-only property returns the node immediately preceding the specified one in its parent's childNodes list, or null if the specified node is the first in that list.
console.log(document.getElementById("b1").previousSibling);
console.log(document.getElementById("b2").previousSibling.id);
The Document interface represents any web page loaded in the browser and serves as an entry point into the web page's content, which is the DOM tree. The DOM tree provides functionality globally to the document. The Document interface describes the common properties and methods for any kind of document.
Properties:
let objRef = document.body;
document.body = objRef;
The Document.body property represents the  or <frameset> node of the current document, or null if no such element exists.
// in HTML:
alert(document.body.id); // "oldBodyElement"
let aNewBodyElement = document.createElement("body");
aNewBodyElement.id = "newBodyElement";
document.body = aNewBodyElement;
alert(document.body.id); // "newBodyElement"
let fontFaceSet = document.fonts;
The fonts property of the Document interface returns the FontFaceSet interface of the document.
document.fonts.ready.then(function() {
// Any operation that needs to be done only after all the fonts
// have finished loading can go here.
});
let objRef = document.head;
The head read-only property of the Document interface returns the
element of the current document.<!doctype html>

<title>Example: using document.head </title>

Methods:
let element = document.createElement(tagName[, options]);
In an HTML document, the document.createElement() method creates the HTML element specified by tagName, or an HTMLUnknownElement if tagName isn't recognized.
function addElement() {
let newDiv = document.createElement("div");
}
let event = document.createEvent(type);
Creates an event of the type specified. The returned object should be first initialized and can then be passed to element.dispatchEvent.
// Create the event.
let event = document.createEvent('Event');
// Define that the event name is 'build'.
event.initEvent('build', true, true);


Dan Osborne slams James Jordan for accusing wife Jacqueline Jossa of being 'fake' on I'm A Celebrity
Jacqueline has had a hard time in the jungle
by Rebecca CarterDan Osborne has slammed James Jordan for accusing his wife Jacqueline Jossa of being "fake" on I'm A Celebrity.
The former EastEnders actress has had a tough time in the jungle after being voted to do the last couple Bushtucker trials.
Before each trial, Jacqueline has broke down in tears despite going on to absolutely smash them.
During last night's episode, former Strictly Come Dancing pro James tweeted: "I’m normally a great judge of character I don’t know if it’s just me but I feel Jacqueline is acting the whole time on @imacelebrity.
"Everything she does seems a little fake & trying to be what she thinks the public want to see. Only my opinion guys."
Dan, who has two daughters with Jacqueline, hit back: "Coming from someone who is married to her and lives with her, she isn’t being fake at all mate & she isn’t acting.
"She is dramatic and can be emotional but she would say that herself... but fake, ABSOLUTELY not."
It comes after Dan begged viewers to stop voting for Jacqueline to do the gruesome trials.
Jac broke down in tears on Saturday night's show after she was voted to do the Crevice Of Cruelty task with Ian Wright.
The actress also cried when viewers voted for her to do the Snake Hotel trial with Myles Stephenson.
Dan told his fans on Instagram: "Give her a break please because she's getting upset now."
He also shared a snap of himself and Jacqueline when she tried on her jungle attire before flying to Australia.
He wrote: "Smashing it in there girl!! This is when she had her fitting, trying on her jungle clothes, I’d just got out of bed... it’s come around so quick, now a week in and she’s doing great in there!
"Really appreciate all the support you guys are giving her, literally had hundreds, possibly thousands of messages thank you."
As well as the trials, Jacqueline has also been teary over being away from her children - daughters Ella, four, and Mia, one.

Read more: I'm A Celebrity could face Ofcom investigation over ‘unfair’ live Bushtucker trial
She said in the Bush Telegraph: "I took myself off, had a little moment, looked at my kids on my pillow and I'll do the best I can, for them."
Her campmate Kate Garraway told the camp: "I think she's just really scared and I know exactly that feeling and you just get to a point where you're too tired and you think, I can't do it again."
I'm A Celebrity continues tonight at 9pm on ITV.
Leave us a comment on our Facebook page @EntertainmentDailyFix and let us know what you think of this story.


Poems on Various Subjects, Religious and Moral
by Phillis Wheatley
"To the Hon. T. H. Esq; on the Death of His Daughter."
Additional Information
- Year Published: 1773
- Language: English
- Country of Origin: United States of America
- Source: Wheatley, P. (1773). Poems on Various Subjects, Religious and Moral.London, England: A. Bell.
-
Readability:
- Flesch–Kincaid Level: 2.5
- Word Count: 338
- Genre: Poetry
- Keywords: 18th century literature, american authors, poetry
- ✎ Cite This
Downloads
WHILE deep you mourn beneath the cypress–shade
The hand of Death, and your dear daughter laid
In dust, whose absence gives your tears to flow,
And racks your bosom with incessant woe,
Let Recollection take a tender part,
Assuage the raging tortures of your heart,
Still the wild tempest of tumultuous grief,
And pour the heav'nly nectar of relief:
Suspend the sigh, dear Sir, and check the groan,
Divinely bright your daughter's Virtues shone:
How free from scornful pride her gentle mind,
Which ne'er its aid to indigence declin'd!
Expanding free, it sought the means to prove
Unfailing charity, unbounded love!
She unreluctant flies to see no more
Her dear–lov'd parents on earth's dusky shore:
Impatient heav'n's resplendent goal to gain,
She with swift progress cuts the azure plain,
Where grief subsides, where changes are no more,
And life's tumultuous billows cease to roar;
She leaves her earthly mansion for the skies,
Where new creations feast her wond'ring eyes.
To heav'n's high mandate cheerfully resign'd
She mounts, and leaves the rolling globe behind;
She, who late wish'd that Leonard might return,
Has ceas'd to languish, and forgot to mourn;
To the same high empyreal mansions come,
She joins her spouse, and smiles upon the tomb:
And thus I hear her from the realms above:
"Lo! this the kingdom of celestial love!
"Could ye, fond parents, see our present bliss,
"How soon would you each sigh, each fear dismiss?
"Amidst unutter'd pleasures whilst I play
"In the fair sunshine of celestial day,
"As far as grief affects an happy soul
"So far doth grief my better mind controul,
"To see on earth my aged parents mourn,
"And secret wish for T–––––! to return:
"Let brighter scenes your ev'ning–hours employ:
"Converse with heav'n, and taste the promis'd joy"


It is about time we had a hovel in the Hooting Yard Advent Calendar, so here is one that doubles as a Norbiton allotment shed.
I have taken this snap from Anatomy Of Norbiton, an extraordinary website and a thing of strange and terrible beauty. If you can bear to tear yourself away from Hooting Yard—never an easy task, I know, but with grit and determination it is occasionally possible—I recommend that you immerse yourself in its wonders for several hours.


|
PX4 Firmware
PX4 Autopilot Software http://px4.io
|
Namespace encapsulating all device framework classes, functions and data. More...
Classes | |
| class | CDev |
| Abstract class for any character device. More... | |
| class | Device |
| Fundamental base class for all physical drivers (I2C, SPI). More... | |
| struct | device |
| Character device indirection table. More... | |
| struct | file_operations |
| struct | file_t |
| class | VFile |
Typedefs | |
| using | px4_file_operations_t = struct file_operations |
| using | file_t = struct file |
| using | mode_t = uint32_t |
Functions | |
| static int | cdev_open (file_t *filp) |
| static int | cdev_close (file_t *filp) |
| static ssize_t | cdev_read (file_t *filp, char *buffer, size_t buflen) |
| static ssize_t | cdev_write (file_t *filp, const char *buffer, size_t buflen) |
| static off_t | cdev_seek (file_t *filp, off_t offset, int whence) |
| static int | cdev_ioctl (file_t *filp, int cmd, unsigned long arg) |
| static int | cdev_poll (file_t *filp, px4_pollfd_struct_t *fds, bool setup) |
Namespace encapsulating all device framework classes, functions and data.
| using device::file_t = typedef struct file |
Definition at line 17 of file cdev_platform.hpp.
| using device::mode_t = typedef uint32_t |
Definition at line 17 of file cdev_platform.hpp.
| typedef struct file_operations device::px4_file_operations_t |
Definition at line 16 of file cdev_platform.hpp.
|
static |
Definition at line 96 of file cdev_platform.cpp.
References device::CDev::close().
|
static |
Definition at line 128 of file cdev_platform.cpp.
References device::CDev::ioctl().
|
static |
Definition at line 88 of file cdev_platform.cpp.
References device::CDev::open().
|
static |
Definition at line 136 of file cdev_platform.cpp.
References device::CDev::poll().
|
static |
Definition at line 104 of file cdev_platform.cpp.
References device::CDev::read().
|
static |
Definition at line 120 of file cdev_platform.cpp.
References device::CDev::seek().
|
static |
Definition at line 112 of file cdev_platform.cpp.
References device::CDev::write().


Class Connection
A connection for making HTTP request against URI endpoints.
Inheritance
System.Object
Connection
Implements
Inherited Members
System.Object.Equals(System.Object)
System.Object.Equals(System.Object, System.Object)
System.Object.GetHashCode()
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ReferenceEquals(System.Object, System.Object)
System.Object.ToString()
Namespace: Glosharp.Http
Assembly: Glosharp.dll
Syntax
public class Connection : IConnection
Constructors
| Improve this Doc View SourceConnection(Configuration)
Creates a new connection instance used to make request of the Glo API.
Declaration
public Connection(Configuration configuration)
Parameters
| Type | Name | Description |
|---|---|---|
| Configuration | configuration |
Remarks
This will connect using the default v1 Glo URI.
Connection(Uri, HttpClient, Configuration)
Create a new connection instance used to make request of the Glo API.
Declaration
public Connection(Uri baseAddress, HttpClient httpClient, Configuration configuration)
Parameters
| Type | Name | Description |
|---|---|---|
| System.Uri | baseAddress | The address to point this client to such as https://gloapi.gitkraken.com/v1/glo/ or the URL to a Glo self-hosted instance |
| System.Net.Http.HttpClient | httpClient | A raw System.Net.Http.HttpClient used to make requests. |
| Configuration | configuration |
Remarks
You shouldn't really call this unless, for some strange reason, you're not connecting to the standard Glo URI. You can use this if you are connecting to a self-hosted board.
Exceptions
| Type | Condition |
|---|---|
| System.ArgumentException |
Properties
| Improve this Doc View SourceBaseAddress
Declaration
public Uri BaseAddress { get; }
Property Value
| Type | Description |
|---|---|
| System.Uri |
Configuration
Declaration
public Configuration Configuration { get; }
Property Value
| Type | Description |
|---|---|
| Configuration |


US Dollar Index clinches 6-week highs beyond 98.50
by Pablo Piovano- DXY moves beyond the 98.50 level.
- The index records fresh multi-week highs.
- US 10-year yields climb to highs near 1.78%.
The greenback, in terms of the US Dollar Index (DXY), has accelerated the upside and printed fresh multi-week tops in the 98.50/55 band.
US Dollar Index in monthly peaks
The index has managed to attract further buying interest and moved to monthly tops in the 98.50/55 band, this considered a tough resistance and a key level for the continuation of the rally.
Once again, the persistent selling bias mainly around the euro and the Japanese yen has collaborated with the move up in the dollar, which extends the positive momentum for the second week in a row.
The bull run in the buck has been in tandem with an uptick in yields of the key US 10-year benchmark to daily highs just below 1.80% following the resumption of the activity in the US markets.
Absent releases in the US docket, the next significant event will be on Monday, when the ISM publishes its manufacturing gauge for the month of November. Additional key data out next week will be the ADP report, the ISM Non-Manufacturing, Factory Orders, November’s Non-farm Payrolls and the advanced Consumer Sentiment.
What to look for around USD
The index keeps the topside well and sound so far this week amidst usual rhetoric on the trade front and lack of fresh progress in the ‘Phase One’ deal. In the meantime, investors keep monitoring US fundamentals amidst the ‘wait-and-see’ stance from the Fed. In the US political scenario, the effervescence around President Trump’s impeachment process seems to be dissipating with the day. In the broader view, however, the outlook on the greenback still looks constructive on the back of a cautious Fed vs. the broad-based dovish stance from its G10 peers, the dollar’s safe-haven appeal and the status of ‘global reserve currency’.
US Dollar Index relevant levels
At the moment, the pair is gaining 0.15% at 98.48 and a break above 98.54 (monthly high Nov.29) would open the door to 99.25 (high Oct.8) and then 99.67 (2019 high Oct.1). On the other hand, immediate contention emerges at 98.10 (100-day SMA) seconded by 97.68 (low Nov.18) and finally 97.61 (200-day SMA).


| 1 |
Jeff Bezos |
$156.6 B |
56 |
Amazon |
UnitedStates |
| 2 |
Bill Gates |
$109.8 B |
65 |
Microsoft |
UnitedStates |
| 3 |
Bernard Arnault & family |
$103.1 B |
71 |
LVMH |
France |
| 4 |
Mark Zuckerberg |
$87.3 B |
36 |
Facebook |
UnitedStates |
| 5 |
Warren Buffett |
$72.7 B |
90 |
BerkshireHathaway |
UnitedStates |
| 6 |
Larry Ellison |
$69.2 B |
76 |
software |
UnitedStates |
| 7 |
Steve Ballmer |
$68.5 B |
64 |
Microsoft |
UnitedStates |
| 8 |
Amancio Ortega |
$66.0 B |
84 |
Zara |
Spain |
| 9 |
Larry Page |
$65.2 B |
47 |
Google |
UnitedStates |
| 10 |
Sergey Brin |
$63.5 B |
47 |
Google |
UnitedStates |
| 11 |
Francoise Bettencourt Meyers & family |
$60.4 B |
67 |
L'Oreal |
France |
| 12 |
Michael Bloomberg |
$60.1 B |
78 |
BloombergLP |
UnitedStates |
| 13 |
Mukesh Ambani |
$59.4 B |
63 |
petrochemicals,oil & gas |
India |
| 14 |
Carlos Slim Helu & family |
$54.5 B |
80 |
telecom |
Mexico |
| 15 |
Jim Walton |
$53.4 B |
72 |
Walmart |
UnitedStates |
| 16 |
Alice Walton |
$53.2 B |
71 |
Walmart |
UnitedStates |
| 17 |
Rob Walton |
$53.0 B |
76 |
Walmart |
UnitedStates |
| 18 |
MacKenzie Bezos |
$51.2 B |
50 |
Amazon.com |
UnitedStates |
| 19 |
Ma Huateng |
$50.2 B |
49 |
internetmedia |
China |
| 20 |
Charles Koch |
$48.0 B |
85 |
KochIndustries |
UnitedStates |
| 21 |
Julia Koch & family |
$48.0 B |
58 |
KochIndustries |
UnitedStates |
| 22 |
Jack Ma |
$44.3 B |
56 |
e-commerce |
China |
| 23 |
Elon Musk |
$42.3 B |
49 |
TeslaMotors, SpaceX |
UnitedStates |
| 24 |
Colin Zheng Huang |
$42.0 B |
40 |
e-commerce |
China |
| 25 |
Phil Knight & family |
$39.7 B |
82 |
Nike |
UnitedStates |
| 26 |
Beate Heister & Karl Albrecht Jr. |
$37.8 B |
- |
supermarkets |
Germany |
| 27 |
François Pinault & family |
$37.6 B |
84 |
luxurygoods |
France |
| 28 |
David Thomson & family |
$35.5 B |
63 |
media |
Canada |
| 29 |
Sheldon Adelson |
$32.3 B |
87 |
casinos |
UnitedStates |
| 30 |
Hui Ka Yan |
$31.9 B |
62 |
realestate |
China |
| 31 |
Dieter Schwarz |
$30.8 B |
81 |
retail |
Germany |
| 32 |
Qin Yinglin & family |
$30.7 B |
55 |
pigbreeding |
China |
| 33 |
Michael Dell |
$30.4 B |
55 |
Dellcomputers |
UnitedStates |
| 34 |
Tadashi Yanai & family |
$29.7 B |
71 |
fashionretail |
Japan |
| 35 |
John Mars |
$27.8 B |
85 |
candy,pet food |
UnitedStates |
| 36 |
Jacqueline Mars |
$27.8 B |
81 |
candy,pet food |
UnitedStates |
| 37 |
Len Blavatnik |
$27.8 B |
63 |
diversified |
UnitedStates |
| 38 |
Lee Shau Kee |
$27.2 B |
92 |
realestate |
Hong Kong |
| 39 |
Li Ka-shing |
$26.8 B |
92 |
diversified |
Hong Kong |
| 40 |
Giovanni Ferrero |
$25.5 B |
56 |
Nutella,chocolates |
Italy |
| 41 |
William Lei Ding |
$25.4 B |
49 |
onlinegames |
China |
| 42 |
Dietrich Mateschitz |
$25.2 B |
76 |
Red Bull |
Austria |
| 43 |
Yang Huiyan & family |
$25.1 B |
39 |
realestate |
China |
| 44 |
He Xiangjian |
$24.9 B |
78 |
homeappliances |
China |
| 45 |
Alain Wertheimer |
$24.7 B |
72 |
Chanel |
France |
| 46 |
Gerard Wertheimer |
$24.7 B |
69 |
Chanel |
France |
| 47 |
Vladimir Potanin |
$24.5 B |
59 |
metals |
Russia |
| 48 |
Masayoshi Son |
$24.4 B |
63 |
internet,telecom |
Japan |
| 49 |
Takemitsu Takizaki |
$23.7 B |
75 |
sensors |
Japan |
| 50 |
Leonid Mikhelson |
$22.7 B |
65 |
gas,chemicals |
Russia |


'Bale Was Silly To Celebrate With Flag'
by SL InternationalAfter Gareth Bale controversially posed with a flag that insulted Real Madrid this week, one of his former teammates has branded the Welshman's actions as "silly".
Read: The Highest-Paid EPL Managers After Mourinho Return
The Wales international sparked controversy following his nation's 2-0 win over Hungary, when he was pictured holding a Welsh flag with the words: "Wales. Golf. Madrid. In that order."
Bale, who has endured a frosty relationship with Los Blancos in recent times, has since been widely criticised for his actions, and his former colleague Dimitar Berbatov has joined in on the act.
"Bale was silly to celebrate with that flag," the former Tottenham Hotspur striker told Betfair.
"There is obviously some tension between Gareth Bale and Madrid. Of course, he is Welsh and he is going to put his country first, but I don't know why he needed to celebrate with that flag, I know it is a bit of banter but it springs unwanted attention.
Choose the right winger for SA’s Real Madrid Dream Team & win a replica shirt!
"He didn't need that, it's his decision and maybe he felt he wanted to show something like that, but for me it wasn't necessary. Maybe it was an emotional moment or maybe he didn't know what was on the flag, either way it doesn't look great and I think it was a bit silly.
"He's a quality player, and it's true he isn't treated the right way in Spain, but you have to ask if you aren't treated the right way, why are you still there? If you are good enough, every team will want you and you will play football again."
Read: Bale Insults Real, Nears Exit Door
Bale joined Real in 2013, and has gone on to score 104 goals in 238 appearances for the club since, including three goals in his side's four most recent UEFA Champions League final triumphs.


Nowadays, forms have become a necessary part of our modern life. We need them when we want to google things, send emails, post comments on social media. Many activities on the internet are related to forms. As a result, website designers and developers should create forms thoughtfully.
On the internet, form is a part of the website that people use to send data to the server for a specific action. It can be a search box, the text area where we type in URL, or a text box to write comments on social media.
There are a lot of practices that can improve user experience with web forms. One way to make it convenient for users is by asking for a minimum amount of information related to the action. "Forms are hard to fill out on mobile. The best forms are the ones with the fewest inputs" (LePage Create Amazing Forms developers.google.com). It is an effective way to make users quickly make actions like sign-up or purchasing. Indeed, many websites like Github only ask a user to provide his name, email, and password to create an account. Using appropriate HTML input types and attributes is another effective way to create a comfortable feeling for users. They can provide information like date, time, and phone numbers with less effort. It is especially convenient for users who fill the forms on the phone. An example of using appropriate input types and attributes is using the autofill attribute. It can reduce the amount of typing and problems caused by typos for users. Sometimes people type their emails wrong and click the submit button. Then, the website requests them to verify their email, and they have to start filling the form over again. Autocompleting also makes searching things easier by suggesting keywords related to what users type in the search box.
Another great way to improve the user experience for our forms is by splitting a big form into a multi-step form process. This practice is really effective for large forms like long sign-up forms or surveys. We divide the form into smaller forms that contain a group of related fields. By doing this, we can help users feel less bored and tired when we want them to fill out a lengthy form. "Try to avoid a lot of form elements as much as possible and make it simple and less form elements to fill out" (Simon You Suck at Form Design ((Probably))- YouTube.com).
To sum up, forms are essential for websites and we should make them wisely to create convenience for users.


Safely arrived in Montana. Long day traveling yesterday, but a decent night's sleep, so we're good.
11/26/2008, 10:49:21 AM
Favs: 0
Retweets: 0
link--- layout: tweet ---
Safely arrived in Montana. Long day traveling yesterday, but a decent night's sleep, so we're good.
11/26/2008, 10:49:21 AM
Favs: 0
Retweets: 0
link


Some quick example text to build on the card title and make up the bulk of the card's content.
Some quick example text to build on the card title and make up the bulk of the card's content.
Some quick example text to build on the card title and make up the bulk of the card's content.
| Name | stargazers_count | forks_count | description |
|---|


mart
home
about us
page
shop
blog
contact us
prev button
next button
AFFORDABLE PARIS TOURS
CITY TOURS / TOUR TICKETS / TOUR GUIDES
NEW COLLECTION
like
comparison
clock
add to cart
Blue Tshirt
$26
like
comparison
clock
add to cart
Woman shirt
$31
like
comparison
clock
add to cart
yellow Tshirt
$21
like
comparison
clock
add to cart
cool lingerie
$56


Employee Timesheet
Employee info:
Employee
Role
Start Date (MM/DD/YYYY)
Monthly Rate
Submit
Current Employees
Employee Name
Role
Start Date
Monthly Salary
Months Worked
Total Earned


Book Review: Practical Object-Oriented Design in Ruby: An Agile Primer
Although I am fairly well acquainted with the principles of Object-Oriented Design(OOD), I still yearn for a book on the subject that is great for beginner and intermediate developers, a book that is considered the final word in Object-Oriented Design. Such a book should be:
- Definitive - The book should cover a wide variety of topics.
- Deep - As well as covering a wide variety of subjects, a shallow treatment is just not good enough.
- Prescriptive - The book should have practical rules to follow.
- Easy to read - Some books introduce revolutionary ideas, but are hard to get through. I would classify<PHONE_NUMBER> as not easy to read, conversely<PHONE_NUMBER> is a great read.
- Reasoned - It should provide insight into the author’s reasoning,<PHONE_NUMBER> is a great example of this.
- Have examples - There are many design books out there that don’t have any code. These books can be helpful, but applying the advice within can be difficult.
0321721330(POODR) by Sandi Metz is not that book. It does however, come closer than most other books on the subject.
A quick look at the table of contents confirms it covers the important bits:
- Object-Oriented Design
- Designing Classes with a Single Responsibility
- Managing Dependencies
- Creating Flexible Interfaces
- Reducing Costs with Duck Typing
- Acquiring Behavior Through Inheritance
- Sharing Role Behavior with Modules
- Combining Objects with Composition
- Designing Cost-Effective Tests
Do these bits live up to the ideals I outlined above?
The first chapter gives a general overview of OOD, but as pointed out by Metz in the “How to Read This Book”, people with experience can skip this chapter. I advise you to take her advice, as it is the weakest of the set. In general though, each chapter in the book is better than the last. The chapter on Managing Dependencies has similar problems to other books covering the subject in that it advises people to inject dependencies, but does not adequately discuss the effects on the injecting classes. If a class has all its dependencies injected, then it is the calling classes responsibility to know about those dependencies. This is not always optimal and POODR does not properly discuss this issue and the solutions to it.
The next few chapters do their subjects justice and, thanks to Metz’s casual and engaging writing style, have the best argument against prolific inheritance I have ever read. This is why I consider POODR to be an excellent generic OOD book, it takes all the books, blogs and arguments that have been published and summarises them perfectly. While the treatement is not deep, I don’t think much more needs to be said about inheritance than is mentioned in POODR.
Each chapter is well reasoned, there were a few points when reading the book that the code was not particularly well designed, only to read a paragraph later that this is deliberate in order to demonstrate a point. By using tricks like this, Metz gives good insights into her design process and the reasoning behind her designs.
A special mention must be made of chapter 9. Again, the summary of the Chicago verses London schools of testing (for those not familiar with the terms, these are the mockist verses non-mockist styles of Test Driven Development) is concisely summarised. The main disadvantage of mockist testing is that the classes being mocked can be changed without the tests failing. Metz introduces a simple solution that blew my mind. This solution may not be new, but it was certainly new to me. This is exactly why I have been looking for the definitive OOD book, because there is a vast amount of knowlege out there and despite my best efforts I haven’t been able to read it all. POODR is almost a one stop book for OOD, especially for Ruby.
Back to my ideal OOD book, POODR is an entertaining and easy read, it fully lives up to that requirement. It is not definitive, despite covering a good variety of subjects, there are gaps in the material. Metz’s examples are perhaps too repeditive for me, but I won’t hold that against the book. It is prescriptive, giving specific tips and rules. Despite wanting depth in my perfect OOD book, I didn’t find myself needing more explanation in this book, as the concepts were explained so concisely.
So, should you buy the book? Yes is the easy answer for me. At the moment, it represents the best general OOD book on the market, let alone for Ruby and almost all developers will get something out of the book. If you are disheartened by the first few chapters don’t worry, you will not be dissapointed by the end.


com.innovaphone.client (App API)
This API is used for communicating with the client. It provides the following functionality for apps:
- Presence and dialog subscriptions.
- Manage app links on the home screen.
- Notifying the client, if profile pictures need to be reloaded.
- Displaying status info for active phone calls.
- Information about the user and the myApps client.
Restictions
The API is exclusively provided by the myApps client. The corresponding provider name is "@client".
API model
Service info
The API doesn't define any service info.
Provider model
- user
- An object containing the details about the user that is logged-in.
- home
- An object containing the app links that are attached to home for each app.
- deviceApps
- An array that contains the apps that can be used as a phone app by the user.
- profileApp
- The name of the app that shall be used to configure the user profile.
- lang
- The two-letter code of the user's language.
- scheme
- The current color scheme ("light" or "dark").
- standby
- true if the client is running on a standby PBX. Apps can use this information if they implement a special behaviour in that case.
- launcher
- true if myApps is running inside the myApps launcher for Windows, iOS or Android.
- adminSettings
- An object that contains administrative settings that are used by the launcher, by the myApps client or by apps. Each setting is represented by a named object that contains a "value" and "force" field. If "force" is true, the user should not be allowed to change that setting.
Example
{
"@client": {
"title": "innovaphone myApps",
"url": "http:\/\/pbx.example.com\/PBX0\/APPCLIENT\/13XXXX\/appclient.htm",
"info": { },
"model": {
"user": {
"domain": "example.com",
"sip": "bob",
"guid": "5db8519be826c148a8877f10f8bc2d73",
"dn": "Bob Hansen",
"num": "201",
"email"<EMAIL_ADDRESS>},
"home": {
"phone": [ ],
"contacts": [
"id=3#s=john.doe&d=John%20Doe",
"id=4#s=joe.bloggs&d=Joe%20Bloggs"
]
},
"deviceApps": [
{
"name": "phone",
"title": "Phone",
"deviceapp": "phone"
}
],
"profileApp": "profile",
"launcher": true,
"adminSettings": {
"autostart": {
"value": false,
"force": true
},
"taskbar": {
"value": true,
"force": true
},
"offline": {
"value": 300000,
"force": true
},
"video": {
"value": true,
"force": true
},
"hotkeyDial": {
"value": "F8",
"force": true
},
"hotkeyAccept": {
"value": "CTRL + ALT + F9",
"force": true
},
"hotkeyReject": {
"value": "WIN + F10",
"force": true
},
"logFlags": {
"value": "00000000d6800001",
"force": true
},
"docking": {
"value": 0,
"force": true
},
"notifications": {
"value": false,
"force": true
}
}
}
}
}
API messages
All messages are JSON objects that have a mandatory attribute "mt" that specifies the message type.
The provider will echo the "src" attribute from requests in the corresponding responses.
Requests
- UpdateProfile
- Tells the client that the profile picture of the user has changed and shall be reloaded.
- Example:
{ mt: "UpdateProfile" }
- SetAttachedToHome
- Attaches or detaches an app link to the home screen. Apps can only attach links to itself.
-
- reference
- The app parameters and client parameters of the app link without leading "?".
- attached
- true if the app link shall be attached.
- false if the app link shall be deatached.
- Example:
{ mt: "SetAttachedToHome", reference: "id=13#s=doe&d=John%20Doe", attached: true }
- ShowStatusInfo
-
Opens an HTML page in the client as a status information. It is only shown, while the originating app is in the background.
When the originating app is closed, the client closes all related status informations.
-
- url
- The URL of the HTML page that shall be shown.
- id
- An id that must be unique for the app that created the notification.
- Example:
{ mt: "ShowStatusInfo", url: "https://apps.example.com/phone/activecall.htm?app=phone&call=4", id: "4" }
- CloseStatusInfo
-
Closes a status information that has been opened using
ShowStatusInfo
.
-
- id
- The id that has been used to create the notification.
- If no id is given, the client will close all status informations of the app.
- Example:
{ mt: "CloseStatusInfo", id: "4" }
- SubscribePresence
- Starts a presence subscription to a given SIP URI or phone number.
-
- mt
- "SubscribePresence"
- sip
- The SIP URI of the remote endpoint (optional, sip or num must be specified)
- num
- The phone number of the remote endpoint (optional, sip or num must be specified)
- Example:
{ mt: "SubscribePresence", sip: "atlantis" }
- Example:
{ mt: "SubscribePresence", num: "201" }
- UnsubscribePresence
- Closes a presence subscription that was started using
SubscribePresence
.
- If no
sip
or num
is given, all presence subscriptions of the consumer are closed.
-
- mt
- "UnsubscribePresence"
- sip
- The SIP URI of the remote endpoint (optional)
- num
- The phone number of the remote endpoint (optional)
- Example:
{ mt: "UnsubscribePresence", sip: "atlantis" }
- Example:
{ mt: "UnsubscribePresence", num: "201" }
- SubscribeDialog
- Starts a dialog subscription to a given SIP URI or phone number.
-
- mt
- "SubscribeDialog"
- sip
- The SIP URI of the monitored endpoint (optional, sip or num must be specified)
- num
- The phone number of the monitored endpoint (optional, sip or num must be specified)
- Example:
{ mt: "SubscribeDialog", sip: "atlantis" }
- Example:
{ mt: "SubscribeDialog", num: "201" }
- UnsubscribeDialog
- Closes a dialog subscription that was started using
SubscribeDialog
.
- If no
sip
or num
is given, all dialog subscriptions of the consumer are closed.
-
- mt
- "UnsubscribeDialog"
- sip
- The SIP URI of the monitored endpoint (optional)
- num
- The phone number of the monitored endpoint (optional)
- Example:
{ mt: "UnsubscribeDialog", sip: "atlantis" }
- Example:
{ mt: "UnsubscribeDialog", num: "201" }
Responses
- PresenceUpdated
- An update for a presence subscription that was started using
SubscribePresence
.
-
- mt
- "PresenceUpdated"
- sip
- The SIP URI of the remote endpoint, as specified by the consumer
- num
- The phone number of the remote endpoint, as specified by the consumer
- up
- The connection state of the presence subscription (true or false)
- ep
-
Information about the remote endpoint that was received over the presence subscription.
- sip
- SIP URI
- num
- Phone number
- dn
- Display name
- presence
-
An array containing the list of presences for the different contacts.
- contact
- Presence contact ("tel:", "im:", "calendar:")
- activity
- Presence activity ("", "away", "busy", "dnd")
- displayNote
- An additional text entered by the user that describes the presence in detail. Calendar presences are localized by the provider. Additional parameters (hashtags) are removed.
- note
- Same as displayNote, but not localized and possibly containing hashtags. Should not be used for displaying.
- status
- The availability using that contact ("open", "closed")
- params
- An object containing the parsed parameters from the presence note.
-
Example:
{
"mt": "PresenceUpdated",
"sip": "atlantis",
"up": true,
"ep": {
"sip": "atlantis",
"dn": "Atlantis",
"num": "201"
},
"presence": [
{
"contact": "calendar:",
"status": "open",
"activity": "",
"note": "Frei bis 26.04.2018, 11:00 (Beschäftigt: Fixes) #free #until:1524733200000 #next-activity:busy #next:41:5:42:5",
"displayNote": "Frei bis 26.4.2018 11:00 (Beschäftigt: Fixes)",
"params": {
"free": "",
"until":<PHONE_NUMBER>000,
"next-activity": "busy",
"next": "41:5:42:5"
}
},
{
"contact": "im:",
"status": "closed",
"activity": "",
"displayNote": "",
"params": {}
}
]
}
- DialogInfo
- A call update for a dialog subscription that was started using
SubscribeDialog
.
-
- mt
- "DialogInfo"
- sip
- The SIP URI of the monitored endpoint, as specified by the consumer
- num
- The phone number of the monitored endpoint, as specified by the consumer
- callId
- The unique ID of the call. It can be used for further actions using JSON signalling like pickup.
- confId
- The conference ID of the call.
- remote
-
Information about the remote endpoint of the call.
- sip
- SIP URI
- num
- Phone number
- dn
- Display name
- state
-
An object containing the state of the call.
- name
- The state itself. Possible values are "idle", "calling", "incomplete", "complete", "alerting", "connected", "disconnecting", "disconnected" and "parked".
- outgoing
true
for outgoing calls. false
for incoming calls.
- hold (optional)
true
if the call is put on hold by the monitored endpoint.
- held (optional)
true
if the call is put on hold by the remote endpoint.
- waiting (optional)
true
if the call is waiting.
- deleted (optional)
true
if the call is finished. The consumer can remove the call from its local model.
-
Example:
{
"mt": "DialogInfo",
"sip": "endeavour",
"callId": "e44379a033ec5a01ebd500903328631a",
"confId": "13d9c5a033ec5a01ead500903328631a",
"remote": {
"sip": "atlantis",
"dn": "Atlantis",
"num": "201"
},
"state": {
"name": "connected",
"outgoing": true,
"hold": true
}
}
-
Example:
{
"mt": "DialogInfo",
"sip": "endeavour",
"callId": "e44379a033ec5a01ebd500903328631a",
"deleted": true
}
Concepts
App links
The URI format for app links consists of
- app name
- The name of app as defined in the app object in the PBX. The client will open this app, when the app link is clicked by the user.
- app parameters (optional)
- A search string (?) with the parameters that are passed to the app.
- client parameters (optional)
-
A fragment identifier (#) with parameters for the client. Currently the following parameters are defined:
- d
- The display name that shall be shown on the app tile or in the tooltip of the app icon. If no display name is given, the client will show the name of the app.
- s
- A SIP URI for presence monitoring. The presence will be shown on the app tile on the home screen.
Example: contacts?id=13#s=doe&d=John%20Doe


__description
This zero-dependency project provides a means to define points along the horizontal axis of the window, breakpoints, which can fire JS callbacks when the width crosses those breakpoints. It provides a setting, which will apply CSS classes to designated elements. It provides a PHP class with a similar form, that can be useful if you're using, say, a CMS for coordinating breakpoints.
A breakpoint is defined as a single point along the horizontal axis. To the left lies a segment, and to the right of the highest value breakpoint lies the ray. To the right of all but the highest value breakpoint, likes a segment. See the section below Breakpoint Theory.
Visit <__homepage> for full documentation.
Install using yarn add @aklump/breakpointx
or npm i @aklump/breakpointx
var bp = new BreakpointX([480, 768]);
Get segment info using any point along the axis:
bp.getSegment(200);
bp.getSegment(480);
bp.getSegment(1000);
It can be helpful to name your segments:
var obj = new BreakpointX([480, 768], ['small', 'medium', 'large']);
Then you can also retrieve segment info using a name, which includes items such as the width, from point, to point, media query, image width, name, and more.
bp.getSegment(300);
bp.getSegment('small');
var name = bp.getSegment('small').name;
var query = bp.getSegment('small')['@media'];
var imageWidth = bp.getSegment(300).imageWidth;
To cause CSS classes to be written on an element, pass the appropriate settings, where addClassesTo
is a DOM object. It becomes a property of the instance as .el
, so it can be accessed in callbacks, if necessary. The example shows adding classes to the html
element. If you're using jQuery you could do addClassesTo: $('html').get(0)
.
// Breakpoints only with settings.
var obj = new BreakpointX([768], ['mobile', 'desktop'], {
addClassesTo: document.documentElement,
classPrefix: 'bpx-',
});
The element will look like this when the browser gets larger and crosses 768px.
<html class="bpx-desktop bpx-bigger">
Or when crossing 768px getting smaller.
<html class="bpx-mobile bpx-smaller">
When the window width changes, and a breakpoint is hit or crossed, callbacks can be registered to fire as a result. this
points to the BreakpointX instance.
// When the window crosses any breakpoint in either direction
bp.addCrossAction(function(segment, direction, breakpoint, previousSegment) {
... do something in response.
});
// When the window crosses 768 in either direction
bp.addBreakpointCrossAction(function(segment, direction, breakpoint, previousSegment) {
... do something in response.
});
// When the window crosses 768 getting smaller
bp.addBreakpointCrossSmallerAction(768, function (segment, direction, breakpoint, previousSegment) {
... do something in response.
});
// When the window crosses 768 getting bigger
bp.addBreakpointCrossBiggerAction(768, function (segment, direction, breakpoint, previousSegment) {
... do something in response.
});
Here is an example which demonstrates how you might construct an instance when thinking in terms of physical devices. It's given in PHP, however the JS methods are exactly the same.
<?php
$obj = new BreakpointX();
$obj
->addDevice('iphone', 480)
->addDevice('ipad', 768)
->addDevice('desktop', 1024)
->renameSegment(0, 'small');
You can also generate an object if you have a list of media queries representing the segments and ray. The queries do not need to be in any specific order:
var obj = new BreakpointX();
obj
.addSegmentByMedia('(max-width:768px)') // This is the ray.
.addSegmentByMedia('(min-width:480px) and (max-width:767px)')
.addSegmentByMedia('(max-width:479px)');
While this is foremost a Javascript project, there is a PHP class that may be helpful to your use case. Browser-related methods do not exist, but other methods share the same API as the JS object. The class file is dist/BreakpointX.php or if installing with Node<EMAIL_ADDRESS><?php
$bp = new BreakpointX([480, 768]);
$name = $bp->getSegment(300)['name'];
$query = $bp->getSegment(300)['@media'];
$imageWidth = $bp->getSegment(300)['imageWidth'];
For PSR autoloading, the namespace AKlump\\BreakpointX
should map to node_modules/@aklump/breakpointx/dist. Here's an example for a composer.json in the same directory as the package.json used to install BreakpointX.
{
"autoload": {
"psr-4": {
"AKlump\\BreakpointX\\": "node_modules/@aklump/breakpointx/dist"
}
}
}
If you find this project useful... please consider making a donation.
This cheatsheet will familiarize you with the terms used in this project.
Download this Cheatsheet by In the Loft Studios


The government had to resort to conscription to contain the growing confabulation among its citizens, so they decided to take drastic measures to protect the nation's stability. [G|D]
In order to prevent contamination, the medical experts had to set up strict containment protocols contemporaneously, ensuring that the disease did not spread further. [G|D]
After a long period of convalescence, the coral reefs near the shore were able to benefit from the natural process of convection, which allowed them to thrive in the warm waters. [G|D]
Her courageous spirit was evident when she faced the daunting challenge of trying to crack the code without making a single crackle, and she eventually succeeded. [G|D]


Classes
The following classes are available globally.
-
The schedule of a particular day. Contains the events of a given week day. DaySchedules are stored inside a Schedule object
See moreDeclaration
Swift
class DaySchedule: NSObject, NSCoding
-
Stateful singleton entry point
The singleton is intended to store all aplication’s model state which should be persisted in order for it to be restored in case the application is opened in an offline environment.
See moreDeclaration
Swift
class EnHueco
-
Handles account related operations (i.e. Signup, Login, Logout, Forgot Password, etc)
See moreDeclaration
Swift
class AccountManager
-
Handles operations related to schedules construction like getting schedules for common free time periods and schedules importing from external services
See moreDeclaration
Swift
class ScheduleManager
-
URLS
Declaration
Swift
class EHURLS
-
Default parameters
Declaration
Swift
class EHParameters
-
Represents an object that can be synchronized using the Synchronization Manager
Declaration
Swift
class EHSynchronizable: NSObject, NSCoding
-
ProximityUpdatesManager Notifications
Declaration
Swift
class EHProximityUpdatesManagerNotification
-
Handles operations related to proximity between users, including location reporting.
See moreDeclaration
Swift
class ProximityUpdatesManager: NSObject
-
Handles all operations related to persistence.
See moreDeclaration
Swift
class PersistenceManager
-
Handles all generic network-related operations. All network operations should be executed using this manager.
Declaration
Swift
class ConnectionManager: NSObject
-
A calendar event (class or free time at the moment)
See moreDeclaration
Swift
class Event: EHSynchronizable, Comparable, NSCopying
-
Handles privacy settings
See moreDeclaration
Swift
class PrivacyManager
-
Handles synchronization with the server of data that we must ensure is uplodaded when a connection is available in case the upload fails.
The Synchronization Manager maintains a persistent queue to guarantee that operations are executed in order and when a connection is available.
See moreDeclaration
Swift
class SynchronizationManager: NSObject, NSCoding
-
Handles operations related to the users’ current state (i.e. users’ availability (EnHueco’s core services))
See moreDeclaration
Swift
class CurrentStateManager
-
Handles operations related to friends information fetching, and adding and deleting friends (including friend requests and searching)
See moreDeclaration
Swift
class FriendsManager
-
Handles fetching and sending of the AppUser’s basic information like names, profile picture, username, phone number, and schedule. (Friends are not included)
See moreDeclaration
Swift
class AppUserInformationManager


Main
Home
Classes
Register
Payments
Groups
Students
Employees
Locations
Instructions
Equipment
Settings
Connect


Guard email addresses from being simply scraped by bots.
npm install email-obfuscate --save
import EmailObfuscate from 'email-obfuscate';
var el = document.getElementById('email');
EmailObfuscate(el, {
// Email construct<EMAIL_ADDRESS>name: 'test',
domain: 'example',
tld: 'com',
// Alternate Text
altText: 'Email'
});
Email addresses are harvested from websites using web scrapers. There are many strategies that can be employed to mitigate scrapers: 1 2 3 4.
However, it must be noted that preventing scraping is an arms-race.
This library's aim to prevent searching for mailto
links or using email address regexes.
It does this by constructing an email address from an object then drawing the text as an image using the canvas.
For older browsers without a canvas (IE8) we append an element using the alternate text.


Status: Version 5 passed Jan 89 X3J13Version 6 passed Mar 89 X3J13
Issue: SYMBOL-MACROLET-SEMANTICS
References: SYMBOL-MACROLET (88-002R page 2-81)
Related Issues: SYMBOL-MACROLET-DECLARE
Category: CHANGE
Edit history: 29-July-88, Version 1 by Piazza
21-September-88, Version 2 by Piazza
22-September-88, Version 3 by Piazza
22-September-88, Version 4 by Piazza
30-Nov-88, Version 5 by Masinter
14-Mar-89, Version 6 by Steele
Problem Description:
The SYMBOL-MACROLET construct, introduced with CLOS in X3J13 document
88-002R, profoundly alters the interpretation of symbols appearing as
forms in a Common Lisp program--what previously was necessarily a variable
might now be a symbol macro instead. Macros which appear in the body of a
SYMBOL-MACROLET form are currently unable to determine whether a symbol
form is a variable or a symbol macro, and, if the latter, what the
expansion of the symbol macro is. Consequently, complex macros (such as
SETF or PUSH) which depend on the form of their argument(s), are unable to
produce their desired results in some cases, as in the following example:
(let ((a (make-array 5))
(i 0))
(symbol-macrolet ((place (aref a (incf i))))
(push x place))
i) ==> 2
In addition, it would be both natural and nice to be able to write
(with-slots (rho theta) point
(declare (single-float rho theta))
...computation...)
as well as DECLARE within SYMBOL-MACROLET forms.
Proposal (SYMBOL-MACROLET-SEMANTICS:SPECIAL-FORM):
Change the definition of SYMBOL-MACROLET to specify that it is a special
form, which affects the evaluation environment for symbols. Enhance
MACROEXPAND and MACROEXPAND-1 so that they can expand a symbol macro.
Modify SETF et al to use the new MACROEXPAND and MACROEXPAND-1 to examine
even symbol subforms. Specify that the expansion of a symbol macro IS
subject to further macro expansion in the same lexical environment as the
symbol macro invocation, exactly analogous to normal macros. Clarify that
within the body of a SYMBOL-MACROLET, SETQ of a symbol defined as
a symbol macro will be treated as if it were a SETF.
Furthermore PSETQ of a symbol defined as a symbol macro will
behave as if it were a PSETF, and MULTIPLE-VALUE-SETQ will behave
as if SETQ were used on each variable to be set.
When MACROEXPAND or MACROEXPAND-1 sees a symbol macro, it calls
the value of *MACROEXPAND-HOOK* in the same manner as for an
ordinary macro. The three values given to the hook function
in this case will be an expansion function, a form (in this case
the symbol naming the symbol macro), and an environment. The
only guaranteed property of the expansion function is that when
it is applied to the form and the environment it will return the
correct expansion of the symbol macro. (In particular, nothing
it said in this specification whether the expansion is conceptually
stored in the expansion function, the environment, or both.)
Rationale:
The potential for interaction between macros is exactly why &environment
arguments were originally added to macros. Changing SYMBOL-MACROLET to be
a special form, which communicates through the &environment arguments to
macros with MACROEXPAND and MACROEXPAND-1, would allow PUSH and SETF
(among others) to work with SYMBOL-MACROLET in the same way they work with
This change cannot (reasonably) support the currently specified semantics
that the expansion text is "outside" the scope of the symbol macro. For
indeed, when the symbol macro is expanded, (a copy of) the expansion is
then within the scope of the SYMBOL-MACROLET, and should then be subject
to further scrutiny. The issue of "infinite expansion" of symbol macros is
no more dangerous than that of normal macros.
Current Practice:
Portable Common Loops provides a code-walking implementation of
SYMBOL-MACROLET as specified in 88-002R. Symbolics Cloe has both a
code-walking version of a SYMBOL-MACROLET macro and compiler support for
a SYMBOL-MACROLET special form.
Cost to Implementors:
If SYMBOL-MACROLET is modified to be a special form, compilers and
interpreters will have to change, as well as MACROEXPAND, MACROEXPAND-1,
Cost to Users:
If SYMBOL-MACROLET is converted to a special form, code-walking programs
will have to be modified to handle SYMBOL-MACROLET correctly. Those same
programs would have to be modified to handle the other special forms
specified in CLOS, anyway.
Cost of Non-Adoption:
SYMBOL-MACROLET will retain its confusing semantics, leading to bugs when
it interacts with complex macros and forms which produce side-effects.
Implementations which support ONCE-ONLY will break. For that matter, any
mechanism which examines code and assumes that "variables" have no side
effects will break.
Benefits:
SYMBOL-MACROLET-SEMANTICS:SPECIAL-FORM avoids the hairiest problems
surrounding interaction of macros (like SETF) and side effects, and makes
SYMBOL-MACROLET consistent with MACROLET.
Aesthetics:
If SYMBOL-MACROLET is made to be a special form, aesthetics are improved
by making symbol macros consistent with normal macros.
Discussion:
A case could be made for adding a new function, SYMBOL-MACRO-FUNCTION, as
a dual of MACRO-FUNCTION. However, symbol macros are simpler than normal
macros: a symbol macro is associated with a single expansion form, rather
than an arbitrary function which computes the expansion. For this reason,
the augmented MACROEXPAND-1 proposed here can also fill the role of
SYMBOL-MACRO-FUNCTION: the second value of (macroexpand-1 sym env) will be
T if and only if sym is a symbol macro, while the first value gives the
expansion of sym, if it has one.
Rather than extending the existing MACROEXPAND and MACROEXPAND-1
functions, new functions could be introduced to expand symbol macros.
However, there seems to be no particular reason to do this.
----- End Forwarded Messages -----


This page gives you an overview how to produce bundles from XCode Projects for Libraries and how to consume them out of a XCode Application. This feature is available starting with version 1.1.0 of the Maven Xcode Plugin.
|-- project-root |-- src | |-- xcode The "xcode" folder contains the whole XCode project. Copy your project here. | |-- <sources>, ... | |-- MyNewProject.xcodeproj | |-- MyNewProject.bundle This folder contains the default bundle to be packaged for the library. Optional. | |-- <AdditionalBundle1.bundle> Additional bundles could be defined in parallel folders or in sub-folders | |-- Resources |-- <AdditionalBundle2.bundle> | |-- MyNewProjectTests | |-- <sources>, ... | ..... | |-- pom.xml The pom.xml has to be created on the same level as the "src" folder
The bundle, located parallel to the MyNewProject.xcodeproj and called MyNewProject.bundle will be packaged automatically during the library build from the Maven Xcode Plugin. No configuration steps needed.
A Library project could expose arbitrary number of bundles. In this case they must be explicitly declared in your pom file.
Example snippet:
.... <build> <plugins> <plugin> <groupId>com.sap.prd.mobile.ios.mios</groupId> <artifactId>xcode-maven-plugin</artifactId> <extensions>true</extensions> <configuration> <bundles> <bundle>AdditionalBundle1</bundle> <bundle>Resources/AdditionalBundle2</bundle> </bundles> </configuration> </plugin> .... </plugins> </build>
The dependent project is already specified in the dependencies section of the pom.xml.
In the XCode IDE, just drag and drop the bundles you need into your project.


SYSCONF
Section: Linux Programmer's Manual (3)
Updated: 2014-03-20
Index
Return to Main Contents
NAME
sysconf - get configuration information at run time
SYNOPSIS
#include <unistd.h>
long sysconf(int name);
DESCRIPTION
POSIX allows an application to test at compile or run time
whether certain options are supported, or what the value is
of certain configurable constants or limits.
At compile time this is done by including
<unistd.h>
and/or
<limits.h>
and testing the value of certain macros.
At run time, one can ask for numerical values using the present function
sysconf().
One can ask for numerical values that may depend
on the filesystem a file is in using the calls
fpathconf(3)
and
pathconf(3).
One can ask for string values using
confstr(3).
The values obtained from these functions are system configuration constants.
They do not change during the lifetime of a process.
For options, typically, there is a constant
_POSIX_FOO
that may be defined in
<unistd.h>.
If it is undefined, one should ask at run time.
If it is defined to -1, then the option is not supported.
If it is defined to 0, then relevant functions and headers exist,
but one has to ask at run time what degree of support is available.
If it is defined to a value other than -1 or 0, then the option is
supported.
Usually the value (such as 200112L) indicates the year and month
of the POSIX revision describing the option.
Glibc uses the value 1
to indicate support as long as the POSIX revision has not been published yet.
The
sysconf()
argument will be
_SC_FOO.
For a list of options, see
posixoptions(7).
For variables or limits, typically, there is a constant
_FOO,
maybe defined in
<limits.h>,
or
_POSIX_FOO,
maybe defined in
<unistd.h>.
The constant will not be defined if the limit is unspecified.
If the constant is defined, it gives a guaranteed value, and
a greater value might actually be supported.
If an application wants to take advantage of values which may change
between systems, a call to
sysconf()
can be made.
The
sysconf()
argument will be
_SC_FOO.
POSIX.1 variables
We give the name of the variable, the name of the
sysconf()
argument used to inquire about its value,
and a short description.
First, the POSIX.1 compatible values.
- ARG_MAX - _SC_ARG_MAX
-
The maximum length of the arguments to the
exec(3)
family of functions.
Must not be less than
_POSIX_ARG_MAX
(4096).
- CHILD_MAX - _SC_CHILD_MAX
-
The maximum number of simultaneous processes per user ID.
Must not be less than
_POSIX_CHILD_MAX
(25).
- HOST_NAME_MAX - _SC_HOST_NAME_MAX
-
Maximum length of a hostname, not including the terminating null byte,
as returned by
gethostname(2).
Must not be less than
_POSIX_HOST_NAME_MAX
(255).
- LOGIN_NAME_MAX - _SC_LOGIN_NAME_MAX
-
Maximum length of a login name, including the terminating null byte.
Must not be less than
_POSIX_LOGIN_NAME_MAX
(9).
- clock ticks - _SC_CLK_TCK
-
The number of clock ticks per second.
The corresponding variable is obsolete.
It was of course called
CLK_TCK.
(Note: the macro
CLOCKS_PER_SEC
does not give information: it must equal 1000000.)
- OPEN_MAX - _SC_OPEN_MAX
-
The maximum number of files that a process can have open at any time.
Must not be less than
_POSIX_OPEN_MAX
(20).
- PAGESIZE - _SC_PAGESIZE
-
Size of a page in bytes.
Must not be less than 1.
(Some systems use PAGE_SIZE instead.)
- RE_DUP_MAX - _SC_RE_DUP_MAX
-
The number of repeated occurrences of a BRE permitted by
regexec(3)
and
regcomp(3).
Must not be less than
_POSIX2_RE_DUP_MAX
(255).
- STREAM_MAX - _SC_STREAM_MAX
-
The maximum number of streams that a process can have open at any
time.
If defined, it has the same value as the standard C macro
FOPEN_MAX.
Must not be less than
_POSIX_STREAM_MAX
(8).
- SYMLOOP_MAX - _SC_SYMLOOP_MAX
-
The maximum number of symbolic links seen in a pathname before resolution
returns
ELOOP.
Must not be less than
_POSIX_SYMLOOP_MAX
(8).
- TTY_NAME_MAX - _SC_TTY_NAME_MAX
-
The maximum length of terminal device name,
including the terminating null byte.
Must not be less than
_POSIX_TTY_NAME_MAX
(9).
- TZNAME_MAX - _SC_TZNAME_MAX
-
The maximum number of bytes in a timezone name.
Must not be less than
_POSIX_TZNAME_MAX
(6).
- _POSIX_VERSION - _SC_VERSION
-
indicates the year and month the POSIX.1 standard was approved in the
format
YYYYMML;
the value
199009L
indicates the Sept. 1990 revision.
POSIX.2 variables
Next, the POSIX.2 values, giving limits for utilities.
- BC_BASE_MAX - _SC_BC_BASE_MAX
-
indicates the maximum
obase
value accepted by the
bc(1)
utility.
- BC_DIM_MAX - _SC_BC_DIM_MAX
-
indicates the maximum value of elements permitted in an array by
bc(1).
- BC_SCALE_MAX - _SC_BC_SCALE_MAX
-
indicates the maximum
scale
value allowed by
bc(1).
- BC_STRING_MAX - _SC_BC_STRING_MAX
-
indicates the maximum length of a string accepted by
bc(1).
- COLL_WEIGHTS_MAX - _SC_COLL_WEIGHTS_MAX
-
indicates the maximum numbers of weights that can be assigned to an
entry of the
LC_COLLATE order
keyword in the locale definition file,
- EXPR_NEST_MAX - _SC_EXPR_NEST_MAX
-
is the maximum number of expressions which can be nested within
parentheses by
expr(1).
- LINE_MAX - _SC_LINE_MAX
-
The maximum length of a utility's input line, either from
standard input or from a file.
This includes space for a trailing
newline.
- RE_DUP_MAX - _SC_RE_DUP_MAX
-
The maximum number of repeated occurrences of a regular expression when
the interval notation
\{m,n\}
is used.
- POSIX2_VERSION - _SC_2_VERSION
-
indicates the version of the POSIX.2 standard in the format of
YYYYMML.
- POSIX2_C_DEV - _SC_2_C_DEV
-
indicates whether the POSIX.2 C language development facilities are
supported.
- POSIX2_FORT_DEV - _SC_2_FORT_DEV
-
indicates whether the POSIX.2 FORTRAN development utilities are
supported.
- POSIX2_FORT_RUN - _SC_2_FORT_RUN
-
indicates whether the POSIX.2 FORTRAN run-time utilities are supported.
- _POSIX2_LOCALEDEF - _SC_2_LOCALEDEF
-
indicates whether the POSIX.2 creation of locates via
localedef(1)
is supported.
- POSIX2_SW_DEV - _SC_2_SW_DEV
-
indicates whether the POSIX.2 software development utilities option is
supported.
These values also exist, but may not be standard.
- - _SC_PHYS_PAGES
-
The number of pages of physical memory.
Note that it is possible
for the product of this value and the value of
_SC_PAGESIZE
to overflow.
- - _SC_AVPHYS_PAGES
-
The number of currently available pages of physical memory.
- - _SC_NPROCESSORS_CONF
-
The number of processors configured.
- - _SC_NPROCESSORS_ONLN
-
The number of processors currently online (available).
RETURN VALUE
If
name
is invalid, -1 is returned, and
errno
is set to
EINVAL.
Otherwise, the value returned is the value of the system resource and
errno
is not changed.
In the case of options, a positive value is returned if a queried option
is available, and -1 if it is not.
In the case of limits, -1 means that there is no definite limit.
CONFORMING TO
POSIX.1-2001.
BUGS
It is difficult to use
ARG_MAX
because it is not specified how much of the argument space for
exec(3)
is consumed by the user's environment variables.
Some returned values may be huge; they are not suitable for allocating
memory.
SEE ALSO
bc(1),
expr(1),
getconf(1),
locale(1),
confstr(3),
fpathconf(3),
pathconf(3),
posixoptions(7)
Index
- NAME
-
- SYNOPSIS
-
- DESCRIPTION
-
- POSIX.1 variables
-
- POSIX.2 variables
-
- RETURN VALUE
-
- CONFORMING TO
-
- BUGS
-
- SEE ALSO
-
This document was created by
man2html,
using the manual pages.
Time: 02:54:57 GMT, September 18, 2014


All non Green-Green nuts
All non Green-Green nuts is a Green food. Green foods are safe to eat as a regular part of a diet.
Category Quotes
Guideline related quotes related to Nuts and Green throughout Geoff Bond's publications.
Around half the weight of a nut is oil, much of it omega-6 fatty acids. Nuts are therefore caloriedense and tend to upset the omega-3 to omega-6 balance. For these reasons, nuts should be consumed in moderation. ~Paleo in a Nutshell p.41
All tree nuts are acceptable sources of good protein, as well as products made from them ~Paleo in a Nutshell p.48
Nuts are a natural food for humans to be consuming. All tree nuts are generally fine. ~Paleo in a Nutshell p.72
Nuts should be raw and fresh. ~Paleo in a Nutshell p.72
For Green and Green-Green categories, All nuts must be fresh, raw, and unsalted. ~Paleo in a Nutshell p.73
Examples of one serving include 1/3 cup nuts; 2 tablespoons almond, cashew, etc. butter (not peanut butter). ~Paleo in a Nutshell p.95
For nuts group, Consume at least three servings of “Green” foods per week. ~Paleo in a Nutshell p.103
For nuts group, Restrict total nuts servings per session to one. ~Paleo in a Nutshell p.103
For nuts group, Restrict total nuts servings per day to two. ~Paleo in a Nutshell p.103
Nuts are often called "tree-nuts" to distinguish them from the peanut, which grows underground and is a legume. ~Deadly Harvest p.64
Additional Quotes
Specific references to All non Green-Green nuts throughout Geoff Bond's publications.
foragers routinely roasted foods in the embers of the fire. This would include tubers, nuts, and various parts of the animal carcass. Some authorities believe that cooking (roasting) of some foods was a necessary condition for Homo sapiens to evolve. At any rate, there is no basis for the belief that humans should be eating a totally raw food diet. ~Paleo in a Nutshell p.13
The main sources of fats for the San are nuts and wild creatures, both of which have very different fatty acid profiles to the foods habitually consumed in the West. ~Paleo in a Nutshell p.16
Monounsaturated fats were quite common in our ancestral environment, particularly in the marrow of bones and many nuts. Our bodies know how to handle them in a healthy way. Health benefits of monounsaturated fats include lowering cholesterol levels, reducing the risk of heart disease and stroke, and enhancing cell building and the immune system. Today, our most common source is olive oil. Avocado is another good source. ~Paleo in a Nutshell p.41


What would you do when you’ve been having this weird headache intermittently for a week? Would you directly go to a doctor? Guess the answer is the same for most of us: we Google it first!
This brings us to wonder what google health search trends are telling us. Are people generally becoming more aware of health conditions and health risks? How does search interest for top health issues change over time? Are there huge differences in heath concerns between states?
We believe google searches offer much more information than symptom description or illness diagnose. Thus, we decided to take a further look into the search numbers.


Corbyn under fire for saying IS leader should have been put on trial
The Labour leader said the ‘right thing’ would have been to put Abu Bakr al-Baghdadi before the International Criminal Court.
Jeremy Corbyn is facing criticism after he said Abu Bakr al-Baghdadi, the leader of the so-called Islamic State (IS), should have been taken alive and put on trial if at all possible.
Al-Baghdadi died last month when he blew himself up with a suicide vest during a raid by US special forces on his hideout in Syria.
The Labour leader said that while Al-Baghdadi’s removal was “a very good thing” the “right thing to do” would have been to put him before the International Criminal Court.
He was accused by the Tories of “flawed judgment” and an “inability to stand up to people who reject our values”.
If it’s possible to arrest somebody and put them on trial, then that is what should have been doneJeremy Corbyn
Mr Corbyn faced similar criticism following the death of Osama bin Laden in 2011, when he said it was a “tragedy” the al Qaida leader had been killed rather than put on trial.
Asked by LBC radio about al-Baghdadi’s death, Mr Corbyn said: “If we preach international law and international legal process through the International Court of Justice in the Hague, then we should carry it out and if it’s possible to arrest somebody and put them on trial, then that is what should have been done.
“That is what I said about the death (of bin Laden) in 2011 and it will continue to be my principle.
“If we believe, as we do, in international law and justice and the power of the International Court of Justice, then we should do everything we can to bring people, where they deserve to go on trial, to be put on trial.”
“If we want to live in a world of peace and justice, we should practice it as well.”
Security minister Brandon Lewis said Mr Corbyn’s comments showed he would be a “disaster” for Britain’s national security.
“Corbyn’s comments are yet more proof of his flawed judgment and inability to stand up to people who reject our values,” he said.
“Every time he is given the opportunity to take the side of this country’s enemies he does so.”


Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox browser.
Welcome to the demo of ImpressJS Slide Numbering
This is a slide numbering plugin for impress.js
As you have already seen there are slide numbers on the top left corner of the slide
These slide numbers are independent of the slide <div>
s that to represent a slide
And, there is more to that...
You can jump to any slide you want by typing out the slide number
Type the slide number and then press enter, Eg. 4
then Enter


FONTS-CONF
Section: (5)Updated: 18 November 2009
Index Return to Main Contents
NAME
fonts.conf - Font configuration filesSYNOPSIS
/etc/fonts/fonts.conf /etc/fonts/fonts.dtd /etc/fonts/conf.d ~/.fonts.conf.d ~/.fonts.conf
DESCRIPTION
Fontconfig is a library designed to provide system-wide font configuration, customization and application access.
FUNCTIONAL OVERVIEW
Fontconfig contains two essential modules, the configuration module which builds an internal configuration from XML files and the matching module which accepts font patterns and returns the nearest matching font.
FONT CONFIGURATION
The configuration module consists of the FcConfig datatype, libexpat and FcConfigParse which walks over an XML tree and amends a configuration with data found within. From an external perspective, configuration of the library consists of generating a valid XML tree and feeding that to FcConfigParse. The only other mechanism provided to applications for changing the running configuration is to add fonts and directories to the list of application-provided font files.
The intent is to make font configurations relatively static, and shared by as many applications as possible. It is hoped that this will lead to more stable font selection when passing names from one application to another. XML was chosen as a configuration file format because it provides a format which is easy for external agents to edit while retaining the correct structure and syntax.
Font configuration is separate from font matching; applications needing to do their own matching can access the available fonts from the library and perform private matching. The intent is to permit applications to pick and choose appropriate functionality from the library instead of forcing them to choose between this library and a private configuration mechanism. The hope is that this will ensure that configuration of fonts for all applications can be centralized in one place. Centralizing font configuration will simplify and regularize font installation and customization.
FONT PROPERTIES
While font patterns may contain essentially any properties, there are some well known properties with associated types. Fontconfig uses some of these properties for font matching and font completion. Others are provided as a convenience for the applications' rendering mechanism.
Property Type Description -------------------------------------------------------------- family String Font family names familylang String Languages corresponding to each family style String Font style. Overrides weight and slant stylelang String Languages corresponding to each style fullname String Font full names (often includes style) fullnamelang String Languages corresponding to each fullname slant Int Italic, oblique or roman weight Int Light, medium, demibold, bold or black size Double Point size width Int Condensed, normal or expanded aspect Double Stretches glyphs horizontally before hinting pixelsize Double Pixel size spacing Int Proportional, dual-width, monospace or charcell foundry String Font foundry name antialias Bool Whether glyphs can be antialiased hinting Bool Whether the rasterizer should use hinting hintstyle Int Automatic hinting style verticallayout Bool Use vertical layout autohint Bool Use autohinter instead of normal hinter globaladvance Bool Use font global advance data file String The filename holding the font index Int The index of the font within the file ftface FT_Face Use the specified FreeType face object rasterizer String Which rasterizer is in use outline Bool Whether the glyphs are outlines scalable Bool Whether glyphs can be scaled scale Double Scale factor for point->pixel conversions dpi Double Target dots per inch rgba Int unknown, rgb, bgr, vrgb, vbgr, none - subpixel geometry lcdfilter Int Type of LCD filter minspace Bool Eliminate leading from line spacing charset CharSet Unicode chars encoded by the font lang String List of RFC-3066-style languages this font supports fontversion Int Version number of the font capability String List of layout capabilities in the font embolden Bool Rasterizer should synthetically embolden the font
FONT MATCHING
Fontconfig performs matching by measuring the distance from a provided pattern to all of the available fonts in the system. The closest matching font is selected. This ensures that a font will always be returned, but doesn't ensure that it is anything like the requested pattern.
Font matching starts with an application constructed pattern. The desired attributes of the resulting font are collected together in a pattern. Each property of the pattern can contain one or more values; these are listed in priority order; matches earlier in the list are considered "closer" than matches later in the list.
The initial pattern is modified by applying the list of editing instructions specific to patterns found in the configuration; each consists of a match predicate and a set of editing operations. They are executed in the order they appeared in the configuration. Each match causes the associated sequence of editing operations to be applied.
After the pattern has been edited, a sequence of default substitutions are performed to canonicalize the set of available properties; this avoids the need for the lower layers to constantly provide default values for various font properties during rendering.
The canonical font pattern is finally matched against all available fonts. The distance from the pattern to the font is measured for each of several properties: foundry, charset, family, lang, spacing, pixelsize, style, slant, weight, antialias, rasterizer and outline. This list is in priority order -- results of comparing earlier elements of this list weigh more heavily than later elements.
There is one special case to this rule; family names are split into two bindings; strong and weak. Strong family names are given greater precedence in the match than lang elements while weak family names are given lower precedence than lang elements. This permits the document language to drive font selection when any document specified font is unavailable.
The pattern representing that font is augmented to include any properties found in the pattern but not found in the font itself; this permits the application to pass rendering instructions or any other data through the matching system. Finally, the list of editing instructions specific to fonts found in the configuration are applied to the pattern. This modified pattern is returned to the application.
The return value contains sufficient information to locate and rasterize the font, including the file name, pixel size and other rendering data. As none of the information involved pertains to the FreeType library, applications are free to use any rasterization engine or even to take the identified font file and access it directly.
The match/edit sequences in the configuration are performed in two passes because there are essentially two different operations necessary -- the first is to modify how fonts are selected; aliasing families and adding suitable defaults. The second is to modify how the selected fonts are rasterized. Those must apply to the selected font, not the original pattern as false matches will often occur.
FONT NAMES
Fontconfig provides a textual representation for patterns that the library can both accept and generate. The representation is in three parts, first a list of family names, second a list of point sizes and finally a list of additional properties:
<families>-<point sizes>:<name1>=<values1>:<name2>=<values2>...
Values in a list are separated with commas. The name needn't include either families or point sizes; they can be elided. In addition, there are symbolic constants that simultaneously indicate both a name and a value. Here are some examples:
Name Meaning ---------------------------------------------------------- Times-12 12 point Times Roman Times-12:bold 12 point Times Bold Courier:italic Courier Italic in the default size Monospace:matrix=1 .1 0 1 The users preferred monospace font with artificial obliquing
The '\', '-', ':' and ',' characters in family names must be preceeded by a '\' character to avoid having them misinterpreted. Similarly, values containing '\', '=', '_', ':' and ',' must also have them preceeded by a '\' character. The '\' characters are stripped out of the family name and values as the font name is read.
DEBUGGING APPLICATIONS
To help diagnose font and applications problems, fontconfig is built with a large amount of internal debugging left enabled. It is controlled by means of the FC_DEBUG environment variable. The value of this variable is interpreted as a number, and each bit within that value controls different debugging messages.
Name Value Meaning --------------------------------------------------------- MATCH 1 Brief information about font matching MATCHV 2 Extensive font matching information EDIT 4 Monitor match/test/edit execution FONTSET 8 Track loading of font information at startup CACHE 16 Watch cache files being written CACHEV 32 Extensive cache file writing information PARSE 64 (no longer in use) SCAN 128 Watch font files being scanned to build caches SCANV 256 Verbose font file scanning information MEMORY 512 Monitor fontconfig memory usage CONFIG 1024 Monitor which config files are loaded LANGSET 2048 Dump char sets used to construct lang values OBJTYPES 4096 Display message when value typechecks fail
Add the value of the desired debug levels together and assign that (in base 10) to the FC_DEBUG environment variable before running the application. Output from these statements is sent to stdout.
LANG TAGS
Each font in the database contains a list of languages it supports. This is computed by comparing the Unicode coverage of the font with the orthography of each language. Languages are tagged using an RFC-3066 compatible naming and occur in two parts -- the ISO 639 language tag followed a hyphen and then by the ISO 3166 country code. The hyphen and country code may be elided.
Fontconfig has orthographies for several languages built into the library. No provision has been made for adding new ones aside from rebuilding the library. It currently supports 122 of the 139 languages named in ISO 639-1, 141 of the languages with two-letter codes from ISO 639-2 and another 30 languages with only three-letter codes. Languages with both two and three letter codes are provided with only the two letter code.
For languages used in multiple territories with radically different character sets, fontconfig includes per-territory orthographies. This includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese.
CONFIGURATION FILE FORMAT
Configuration files for fontconfig are stored in XML format; this format makes external configuration tools easier to write and ensures that they will generate syntactically correct configuration files. As XML files are plain text, they can also be manipulated by the expert user using a text editor.
The fontconfig document type definition resides in the external entity "fonts.dtd"; this is normally stored in the default font configuration directory (/etc/fonts). Each configuration file should contain the following structure:
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> ... </fontconfig>
<FONTCONFIG>
This is the top level element for a font configuration and can contain <dir>, <cache>, <include>, <match> and <alias> elements in any order.
<DIR>
This element contains a directory name which will be scanned for font files to include in the set of available fonts.
<CACHE>
This element contains a file name for the per-user cache of font information. If it starts with '~', it refers to a file in the users home directory. This file is used to hold information about fonts that isn't present in the per-directory cache files. It is automatically maintained by the fontconfig library. The default for this file is ``~/.fonts.cache-<version>'', where <version> is the font configuration file version number (currently 2).
<INCLUDE IGNORE_MISSING=NO>
This element contains the name of an additional configuration file or directory. If a directory, every file within that directory starting with an ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When the XML datatype is traversed by FcConfigParse, the contents of the file(s) will also be incorporated into the configuration by passing the filename(s) to FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the default "no", a missing file or directory will elicit no warning message from the library.
<CONFIG>
This element provides a place to consolidate additional configuration information. <config> can contain <blank> and <rescan> elements in any order.
<BLANK>
Fonts often include "broken" glyphs which appear in the encoding but are drawn as blanks on the screen. Within the <blank> element, place each Unicode characters which is supposed to be blank in an <int> element. Characters outside of this set which are drawn as blank will be elided from the set of characters supported by the font.
<RESCAN>
The <rescan> element holds an <int> element which indicates the default interval between automatic checks for font configuration changes. Fontconfig will validate all of the configuration files and directories and automatically rebuild the internal datastructures when this interval passes.
<SELECTFONT>
This element is used to black/white list fonts from being listed or matched against. It holds acceptfont and rejectfont elements.
<ACCEPTFONT>
Fonts matched by an acceptfont element are "whitelisted"; such fonts are explicitly included in the set of fonts used to resolve list and match requests; including them in this list protects them from being "blacklisted" by a rejectfont element. Acceptfont elements include glob and pattern elements which are used to match fonts.
<REJECTFONT>
Fonts matched by an rejectfont element are "blacklisted"; such fonts are excluded from the set of fonts used to resolve list and match requests as if they didn't exist in the system. Rejectfont elements include glob and pattern elements which are used to match fonts.
<GLOB>
Glob elements hold shell-style filename matching patterns (including ? and *) which match fonts based on their complete pathnames. This can be used to exclude a set of directories (/usr/share/fonts/uglyfont*), or particular font file types (*.pcf.gz), but the latter mechanism relies rather heavily on filenaming conventions which can't be relied upon. Note that globs only apply to directories, not to individual fonts.
<PATTERN>
Pattern elements perform list-style matching on incoming fonts; that is, they hold a list of elements and associated values. If all of those elements have a matching value, then the pattern matches the font. This can be used to select fonts based on attributes of the font (scalable, bold, etc), which is a more reliable mechanism than using file extensions. Pattern elements include patelt elements.
<PATELT NAME=PROPERTY>
Patelt elements hold a single pattern element and list of values. They must have a 'name' attribute which indicates the pattern element name. Patelt elements include int, double, string, matrix, bool, charset and const elements.
<MATCH TARGET=PATTERN>
This element holds first a (possibly empty) list of <test> elements and then a (possibly empty) list of <edit> elements. Patterns which match all of the tests are subjected to all the edits. If 'target' is set to "font" instead of the default "pattern", then this element applies to the font name resulting from a match rather than a font pattern to be matched. If 'target' is set to "scan", then this element applies when the font is scanned to build the fontconfig database.
<TEST QUAL=ANY NAME=PROPERTY TARGET=DEFAULT COMPARE=EQ>
This element contains a single value which is compared with the target ('pattern', 'font', 'scan' or 'default') property "property" (substitute any of the property names seen above). 'compare' can be one of "eq", "not_eq", "less", "less_eq", "more", or "more_eq". 'qual' may either be the default, "any", in which case the match succeeds if any value associated with the property matches the test value, or "all", in which case all of the values associated with the property must match the test value. When used in a <match target="font"> element, the target= attribute in the <test> element selects between matching the original pattern or the font. "default" selects whichever target the outer <match> element has selected.
<EDIT NAME=PROPERTY MODE=ASSIGN BINDING=WEAK>
This element contains a list of expression elements (any of the value or operator elements). The expression elements are evaluated at run-time and modify the property "property". The modification depends on whether "property" was matched by one of the associated <test> elements, if so, the modification may affect the first matched value. Any values inserted into the property are given the indicated binding ("strong", "weak" or "same") with "same" binding using the value from the matched pattern element. 'mode' is one of:
Mode With Match Without Match --------------------------------------------------------------------- "assign" Replace matching value Replace all values "assign_replace" Replace all values Replace all values "prepend" Insert before matching Insert at head of list "prepend_first" Insert at head of list Insert at head of list "append" Append after matching Append at end of list "append_last" Append at end of list Append at end of list
<INT>, <DOUBLE>, <STRING>, <BOOL>
These elements hold a single value of the indicated type. <bool> elements hold either true or false. An important limitation exists in the parsing of floating point numbers -- fontconfig requires that the mantissa start with a digit, not a decimal point, so insert a leading zero for purely fractional values (e.g. use 0.5 instead of .5 and -0.5 instead of -.5).
<MATRIX>
This element holds the four <double> elements of an affine transformation.
<NAME>
Holds a property name. Evaluates to the first value from the property of the font, not the pattern.
<CONST>
Holds the name of a constant; these are always integers and serve as symbolic names for common font values:
Constant Property Value ------------------------------------- thin weight 0 extralight weight 40 ultralight weight 40 light weight 50 book weight 75 regular weight 80 normal weight 80 medium weight 100 demibold weight 180 semibold weight 180 bold weight 200 extrabold weight 205 black weight 210 heavy weight 210 roman slant 0 italic slant 100 oblique slant 110 ultracondensed width 50 extracondensed width 63 condensed width 75 semicondensed width 87 normal width 100 semiexpanded width 113 expanded width 125 extraexpanded width 150 ultraexpanded width 200 proportional spacing 0 dual spacing 90 mono spacing 100 charcell spacing 110 unknown rgba 0 rgb rgba 1 bgr rgba 2 vrgb rgba 3 vbgr rgba 4 none rgba 5 lcdnone lcdfilter 0 lcddefault lcdfilter 1 lcdlight lcdfilter 2 lcdlegacy lcdfilter 3 hintnone hintstyle 0 hintslight hintstyle 1 hintmedium hintstyle 2 hintfull hintstyle 3
<OR>, <AND>, <PLUS>, <MINUS>, <TIMES>, <DIVIDE>
These elements perform the specified operation on a list of expression elements. <or> and <and> are boolean, not bitwise.
<EQ>, <NOT_EQ>, <LESS>, <LESS_EQ>, <MORE>, <MORE_EQ>
These elements compare two values, producing a boolean result.
<NOT>
Inverts the boolean sense of its one expression element
<IF>
This element takes three expression elements; if the value of the first is true, it produces the value of the second, otherwise it produces the value of the third.
<ALIAS>
Alias elements provide a shorthand notation for the set of common match operations needed to substitute one font family for another. They contain a <family> element followed by optional <prefer>, <accept> and <default> elements. Fonts matching the <family> element are edited to prepend the list of <prefer>ed families before the matching <family>, append the <accept>able families after the matching <family> and append the <default> families to the end of the family list.
<FAMILY>
Holds a single font family name
<PREFER>, <ACCEPT>, <DEFAULT>
These hold a list of <family> elements to be used by the <alias> element.
EXAMPLE CONFIGURATION FILE
SYSTEM CONFIGURATION FILE
This is an example of a system-wide configuration file
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <!-- /etc/fonts/fonts.conf file to configure system font access --> <fontconfig> <!-- Find fonts in these directories --> <dir>/usr/share/fonts</dir> <dir>/usr/X11R6/lib/X11/fonts</dir> <!-- Accept deprecated 'mono' alias, replacing it with 'monospace' --> <match target="pattern"> <test qual="any" name="family"><string>mono</string></test> <edit name="family" mode="assign"><string>monospace</string></edit> </match> <!-- Names not including any well known alias are given 'sans' --> <match target="pattern"> <test qual="all" name="family" mode="not_eq">sans</test> <test qual="all" name="family" mode="not_eq">serif</test> <test qual="all" name="family" mode="not_eq">monospace</test> <edit name="family" mode="append_last"><string>sans</string></edit> </match> <!-- Load per-user customization file, but don't complain if it doesn't exist --> <include ignore_missing="yes">~/.fonts.conf</include> <!-- Load local customization files, but don't complain if there aren't any --> <include ignore_missing="yes">conf.d</include> <include ignore_missing="yes">local.conf</include> <!-- Alias well known font names to available TrueType fonts. These substitute TrueType faces for similar Type1 faces to improve screen appearance. --> <alias> <family>Times</family> <prefer><family>Times New Roman</family></prefer> <default><family>serif</family></default> </alias> <alias> <family>Helvetica</family> <prefer><family>Arial</family></prefer> <default><family>sans</family></default> </alias> <alias> <family>Courier</family> <prefer><family>Courier New</family></prefer> <default><family>monospace</family></default> </alias> <!-- Provide required aliases for standard names Do these after the users configuration file so that any aliases there are used preferentially --> <alias> <family>serif</family> <prefer><family>Times New Roman</family></prefer> </alias> <alias> <family>sans</family> <prefer><family>Arial</family></prefer> </alias> <alias> <family>monospace</family> <prefer><family>Andale Mono</family></prefer> </alias> </fontconfig>
USER CONFIGURATION FILE
This is an example of a per-user configuration file that lives in ~/.fonts.conf
<?xml version="1.0"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <!-- ~/.fonts.conf for per-user font configuration --> <fontconfig> <!-- Private font directory --> <dir>~/.fonts</dir> <!-- use rgb sub-pixel ordering to improve glyph appearance on LCD screens. Changes affecting rendering, but not matching should always use target="font". --> <match target="font"> <edit name="rgba" mode="assign"><const>rgb</const></edit> </match> </fontconfig>
FILES
fonts.conf contains configuration information for the fontconfig library consisting of directories to look at for font information as well as instructions on editing program specified font patterns before attempting to match the available fonts. It is in xml format.
conf.d is the conventional name for a directory of additional configuration files managed by external applications or the local administrator. The filenames starting with decimal digits are sorted in lexicographic order and used as additional configuration files. All of these files are in xml format. The master fonts.conf file references this directory in an <include> directive.
fonts.dtd is a DTD that describes the format of the configuration files.
~/.fonts.conf.d is the conventional name for a per-user directory of (typically auto-generated) configuration files, although the actual location is specified in the global fonts.conf file.
~/.fonts.conf is the conventional location for per-user font configuration, although the actual location is specified in the global fonts.conf file.
~/.fonts.cache-* is the conventional repository of font information that isn't found in the per-directory caches. This file is automatically maintained by fontconfig.
SEE ALSO
fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1)
VERSION
Fontconfig version 2.8.0
Index
- NAME
- SYNOPSIS
- DESCRIPTION
- FUNCTIONAL OVERVIEW
- DEBUGGING APPLICATIONS
- LANG TAGS
- CONFIGURATION FILE FORMAT
-
- <FONTCONFIG>
- <DIR>
- <CACHE>
- <INCLUDE IGNORE_MISSING=NO>
- <CONFIG>
- <BLANK>
- <RESCAN>
- <SELECTFONT>
- <ACCEPTFONT>
- <REJECTFONT>
- <GLOB>
- <PATTERN>
- <PATELT NAME=PROPERTY>
- <MATCH TARGET=PATTERN>
- <TEST QUAL=ANY NAME=PROPERTY TARGET=DEFAULT COMPARE=EQ>
- <EDIT NAME=PROPERTY MODE=ASSIGN BINDING=WEAK>
- <INT>, <DOUBLE>, <STRING>, <BOOL>
- <MATRIX>
- <NAME>
- <CONST>
- <OR>, <AND>, <PLUS>, <MINUS>, <TIMES>, <DIVIDE>
- <EQ>, <NOT_EQ>, <LESS>, <LESS_EQ>, <MORE>, <MORE_EQ>
- <NOT>
- <IF>
- <ALIAS>
- <FAMILY>
- <PREFER>, <ACCEPT>, <DEFAULT>
- EXAMPLE CONFIGURATION FILE
- FILES
- SEE ALSO
- VERSION
This document was created by man2html, using the manual pages.
Time: 05:33:59 GMT, December 24, 2015