class: center, middle, inverse, title-slide # R Developer’s Guide ### Saranjeet Kaur Bhogal --- class: middle # R Contribution Working Group -- ## Mentors Heather Turner, Michael Lawrence -- ## Funded by The R Foundation --- class: middle # R Contribution Working Group -- ## Reviewers (Names are in alphabetical order) Bettina Gruen, Carol Willing, Gabriel Becker, Kara Woo, Lluís Revilla Sancho, Maya Gans, Michael Chirico, Mine Çetinkaya-Rundel, Toby Dylan Hocking --- # Why this Guide? -- - Documentation of how to contribute to R Core is dispersed - This guide will facilitate the onboarding of new contributors to R Core -- ## Some statistics -- - There are 20 R Core Developers at present. Source: [The R Project website](https://www.r-project.org/contributors.html) -- - Out of approximately 57K respondents, 5.7% (approximately 3K) said that they mostly use R. Source: [Stack Overflow Developer Survey 2020](https://insights.stackoverflow.com/survey/2020#most-popular-technologies) --- # Where is the R Developer's Guide hosted? -- As of now, the R Developer's Guide source code is hosted on the [Forwards Github rdevguide repository](https://github.com/forwards/rdevguide) and compiled as the R Developer's Guide which you can find at [bit.ly/rdevguide](https://forwards.github.io/rdevguide/). --- ## Inspiration -- The format and structure of the chapters in this Guide are highly inspired by the [Python Developer's Guide](https://devguide.python.org/). -- .center[ ![First page of the Guide](first_page.png) .caption[ First page of the Guide ] ] --- # Getting Started -- - Instructions on how to install R and tools required to build R and R packages in Windows. -- - Windows is the most widely used platform among general R users, especially in parts of the world that are currently under-represented in the contributor community. -- Three main releases of R available to install: - Official release (`r-release`), - Patched release (`r-patched`), and - Development release (`r-devel`). -- To build R and R packages in Windows you would require to install `RTools` and a distribution of LaTeX. --- # Bug tracking -- - Distinguish between what is a bug and what might not be a bug in R - Once you are confirmed that there is a bug, check if it is already reported - Create an account on Bugzilla. To get a Bugzilla account, please send an e-mail to<EMAIL_ADDRESS>briefly explaining why you need an account, from the address that you want to use as your login. -- Levels of contributing: - Report the bug (if not already reported) - Test the bug - Fix the bug --- # Bug tracking (Continued) -- You may find a bug in: - R-Core supported packages (`Maintainer: R Core Team<EMAIL_ADDRESS>run `maintainer("package_name")`), their documentations, and/ or in the R language implementation - In packages and/or their documentations which are not supported by the R-Core -- In R run the command `bug.report(package = "package_name")` for reporting the bug, whereas on RStudio use `utils::bug.report(package = "package_name")` -- Expectations of a good bug report: provide a minimal reproducible example, mention the software architecture, use inbuilt data sets as far as possible -- Examples of bug reports submitted to the bug tracker are shared --- # Reviewing Bugs -- Help by reviewing the bug reports already present on Bugzilla (advanced search may be used to find reports on specific topics) -- What can you do? - Check if the bug is reproducible and mention the steps to reproduce it - Check if information like the machine architecture, version of R, and the operating system on which the bug occurred is mentioned or not. If not, add it --- # Source of functions -- You may want to have overview of the R codebase just out of curiosity or maybe to gain more insight into what a particular function is actually doing -- - Find the R source code - Find the C source code --- # Lifecycle of a patch -- Submit a patch when you come across a bug in R and you have an idea of how to fix it! -- A patch: The set of differences (additions and/or deletions) between two versions of code. -- To submit a patch, you need the subversion (SVN) client and the latest developer version of R. -- Follow the guidelines for making good patches. -- Get your patch reviewed and also help by reviewing patches already submitted on Bugzilla. --- # Documenting R -- - Follow the .Rd format: Header, Body, Footer. - Follow the basic rules of documentation. - Help by correcting typos in the documentation. --- # Testing pre-release R versions -- You can also help with testing of pre-release versions of R. -- If possible use fresh package library for testing or even better to use virtual machines for testing. -- What can you test? - Your own programs - Your own workflows - Your special ways of installing or setting up R - Things that interact with external libraries - Interactive R packages --- # Where to get help? -- Slack and Mailing Lists -- The [R-devel slack](https://r-devel.slack.com/) channels: - bugreports-for-review - core-dev-help - core-documentation - core-translation - patches-for-review -- Mailing lists: [R-devel](https://stat.ethz.ch/mailman/listinfo/r-devel), [R-help](https://stat.ethz.ch/mailman/listinfo/r-help), and [R-package-devel](https://stat.ethz.ch/mailman/listinfo/r-package-devel). --- # News and announcements -- - [Blog](https://developer.r-project.org/Blog/public/) - [Conferences](https://www.r-project.org/conferences/) - [The R Journal](https://journal.r-project.org/) (The R news is a separate news section on updates to R, though R core members also contribute regular articles on big changes to R.) - Mailing lists: [R-announce](https://stat.ethz.ch/mailman/listinfo/r-announce) and [R-packages](https://stat.ethz.ch/mailman/listinfo/r-packages) - Twitter handle: `@_R_foundation` --- # Developer tools -- This chapter focuses on how Windows users can get these tools (e.g. Windows clients). -- Subversion (svn) client -- [grep](https://en.wikipedia.org/wiki/Grep) -- [Git](https://en.wikipedia.org/wiki/Git) -- GitHub - R Core is maintained in SVN, but some recommended packages are on GitHub - [Creating a pull request](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/creating-a-pull-request) - [Opening an issue from code](https://docs.github.com/en/github/managing-your-work-on-github/opening-an-issue-from-code) - [Resolving a merge conflict on GitHub](https://docs.github.com/en/github/collaborating-with-issues-and-pull-requests/resolving-a-merge-conflict-on-github) --- # How to contribute to the R Developer's Guide? -- To be able to edit this guide, you need to have a GitHub account. After you log-in to GitHub, click on the ‘Edit’ icon highlighted with a red ellipse in the image below: -- .center[ ![Highlighted edit icon for contribution](contribute.png) .caption[ Highlighted edit icon for contribution ] ] -- This will take you to an editable version of the source R Markdown file that generated the page you are on, and you can suggest your edits there. -- To raise an issue about the guide’s content or to make a feature request, use the [issue tracker](https://github.com/forwards/rdevguide/issues). -- Maintainers and contributors are requested to follow the [code of conduct](https://github.com/forwards/rdevguide/blob/master/CONDUCT.md). -- Call for Action: Join us and help in the further development of this guide! --- # Further work -- - In near future we will include materials on how to translate warning messages and errors in R to non-English languages! - We also want to expand this guide to include instructions for non-Windows operating systems. --- class: center, middle # Thanks! Slides created via the R package [**xaringan**](https://github.com/yihui/xaringan).


If you're new to Mesos
See the getting started page for more information about downloading, building, and deploying Mesos.
If you'd like to get involved or you're looking for support
See our community page for more details.
Mesos Architecture
The above figure shows the main components of Mesos. Mesos consists of a master daemon that manages agent daemons running on each cluster node, and Mesos frameworks that run tasks on these agents.
The master enables fine-grained sharing of resources (CPU, RAM, …) across
frameworks by making them resource offers. Each resource offer contains a list
of <agent ID, resource1: amount1, resource2: amount2, ...>
(NOTE: as
keyword ‘slave’ is deprecated in favor of ‘agent’, driver-based frameworks will
still receive offers with slave ID, whereas frameworks using the v1 HTTP API receive offers with agent ID). The master decides how many resources to offer to each framework according to a given organizational policy, such as fair sharing or strict priority. To support a diverse set of policies, the master employs a modular architecture that makes it easy to add new allocation modules via a plugin mechanism.
A framework running on top of Mesos consists of two components: a scheduler that registers with the master to be offered resources, and an executor process that is launched on agent nodes to run the framework’s tasks (see the App/Framework development guide for more details about framework schedulers and executors). While the master determines how many resources are offered to each framework, the frameworks' schedulers select which of the offered resources to use. When a framework accepts offered resources, it passes to Mesos a description of the tasks it wants to run on them. In turn, Mesos launches the tasks on the corresponding agents.
Example of resource offer
The figure below shows an example of how a framework gets scheduled to run a task.
Let’s walk through the events in the figure.
- Agent 1 reports to the master that it has 4 CPUs and 4 GB of memory free. The master then invokes the allocation policy module, which tells it that framework 1 should be offered all available resources.
- The master sends a resource offer describing what is available on agent 1 to framework 1.
- The framework’s scheduler replies to the master with information about two tasks to run on the agent, using <2 CPUs, 1 GB RAM> for the first task, and <1 CPUs, 2 GB RAM> for the second task.
- Finally, the master sends the tasks to the agent, which allocates appropriate resources to the framework’s executor, which in turn launches the two tasks (depicted with dotted-line borders in the figure). Because 1 CPU and 1 GB of RAM are still unallocated, the allocation module may now offer them to framework 2.
In addition, this resource offer process repeats when tasks finish and new resources become free.
While the thin interface provided by Mesos allows it to scale and allows the frameworks to evolve independently, one question remains: how can the constraints of a framework be satisfied without Mesos knowing about these constraints? For example, how can a framework achieve data locality without Mesos knowing which nodes store the data required by the framework? Mesos answers these questions by simply giving frameworks the ability to reject offers. A framework will reject the offers that do not satisfy its constraints and accept the ones that do. In particular, we have found that a simple policy called delay scheduling, in which frameworks wait for a limited time to acquire nodes storing the input data, yields nearly optimal data locality.
You can also read much more about the Mesos architecture in this technical paper.


Contributing to the IntelliJ Platform SDK
This document describes our contribution guidelines for the open source IntelliJ Platform SDK documentation and sample code. Before you begin contributing content to the SDK, please read this page thoroughly as well as the Code of Conduct and License documents. For information about contributing to the IntelliJ Platform itself, please visit Contributing to the IntelliJ Platform.
Here are some useful things to know before authoring SDK content and submitting your Pull Request.
- Setting Up the Documentation Build Environment
- Documentation Repository Submodules
- Creating IntelliJ Platform SDK Content
Setting Up the Documentation Build Environment
This site runs via Jekyll, which is a popular static site generator, written in Ruby. It can be hosted locally to ensure that any changes are correct. Once set up, running the site is as easy as calling rake preview
.
Alternatively, the site can also be hosted in a Docker container. On Mac and Windows, this means the site is hosted in a virtual machine. Docker maintains this container, building it based on the instructions in the Dockerfile
. All dependencies (Ruby, etc.) are automatically installed when building the image, which reduces the manual configuration steps. The Docker image is also used to build the published site, so it is a known working environment.
Developing Documentation with Docker
Follow these steps to work with Docker:
- Firstly, install Docker, using the Docker Toolbox.
- On Windows and Mac, start the Docker host virtual machine (start the “Docker Quickstart terminal” or run “Kitematic.” See the Getting Started guides on docker.com for more details).
- Clone the
intellij-sdk-docs
repo to the local machine, and initialise thesdkdocs-template
submodule. - Change the current directory to the parent directory of the git repo.
- Run
docker build -t intellij-sdk-docs .
to build the docker image from the current folder, and give it the tagintellij-sdk-docs
.- Note that this must be run from a command prompt that has the various
DOCKER_*
environment variables set up, such as the Docker Quickstart Terminal.
- Note that this must be run from a command prompt that has the various
- Run
docker run -p 4000:4000 -v $PWD:/usr/src/app intellij-sdk-docs
. This command will:- Start the docker container called
intellij-sdk-docs
. - Forward port 4000 from the docker container to port 4000 on the docker client.
- Mount the current directory (
$PWD
is a Unix style environment variable. You can use%CD%
on Windows, or specify the full path) as/usr/src/app
inside the docker container. The docker image will see theintellij-sdk-docs
repo as the folder/usr/src/app
.
- Run the commands in the Dockerfile’s
CMD
instruction to execute: rake bootstrap
, which ensures all of the prerequisites are installed,rake preview
, which builds the site and starts to host it.
- Start the docker container called
- Finally, you can access the newly created site by visiting http://localhost:4000/intellij/sdk/docs/, or by using the IP address of the docker client virtual machine (see the note above).
Developing Documentation Locally
To build the documentation site, you need:
- Ruby 2 - Jekyll is a Ruby application.
- Ruby 2 DevKit (for Windows) - Some of Jekyll’s dependencies need to be compiled, and require the DevKit to be installed.
gem install bundler
- the site uses Bundler to manage gem dependencies within the repo, rather than globally installing to the local operating system. Run this command to install the Bundler toolset globally.
macOS
macOS comes with Ruby already installed. The only steps required are:
gem install bundler
Windows
- Install Ruby 2 and the Ruby 2 DevKit (one of the gems needs to build a native component)
- After installing the DevKit, make sure to edit the
config.yml
file to point to the Ruby installation
- After installing the DevKit, make sure to edit the
This installation is easier if you use Chocolatey, a package manager for Windows:
choco install ruby
choco install ruby2.devkit
- After installing the DevKit, make sure to edit the
config.yml
file to point to the Ruby installation. - By default, this is
C:\tools\DevKit\config.yml
- Add the line
- C:\tools\ruby21
(including the leading minus sign)
- After installing the DevKit, make sure to edit the
Bootstrapping the Documentation Build Environment
- Ensure Bundler is installed -
gem install bundler
. - On Windows, ensure the
devkitvars.bat
file has been run in the current command prompt (e.g.c:\tools\DevKit\devkitvars.bat
). - Clone the documentation site.
- Initialize and update the
sdkdocs-template
submodule -git submodule init
andgit submodule update
rake bootstrap
- this uses Bundler to download all required gems.rake preview
- this will build the site, and host it in a local webserver.
Building and Previewing the Site
To build and test the site, run rake preview
. This will build the site and host it, using the config provided. The URL of the hosted site is displayed on the screen and depends on the baseurl
field defined in _config.yml
.
Documentation Repository Submodules
The sdkdocs-template
directory is actually a Git submodule, and it contains a submodule to the private webhelp-template
repository.
The sdkdocs-template
repository contains build scripts and compiled and minified JS and CSS that allow the site to run.
The private webhelp-template
repository contains the code to build the JS and CSS.
It is currently closed source, but the plan is to make it open source at some point, in which case it is likely the two repositories will be merged.
After cloning, a submodule needs to be initialized and updated:
git submodule init
git submodule update
Initialization creates a .gitmodules
file, register a submodule in the sdkdocs-template
folder and check out the files.
Note that when a repo is added as a submodule, it doesn’t get a .git
folder, but instead gets a .git
file that points to the actual location of the .git
folder.
A submodule can be updated using normal git commands such as git pull
.
It can be switched to a different branch using git checkout
, and any changes to the currently checked out revision need to be committed back into the main repository using git commands.
A submodule is initially cloned at a specific revision, and not as part of a branch.update
If changes are made to the submodule, they should be made on a branch to a clone, and a Pull Request sent. Changes can be made and committed, and the hosting repository will need to commit a pointer to the current version of the submodule.
If there are any problems with the sdkdocs-template
, please raise an issue.
Creating IntelliJ Platform SDK Content
Content contributions to the IntelliJ Platform SDK are welcome. Please download or clone the open source SDK project from GitHub, make additions or changes, and submit a pull request. Before creating or altering content, please consult these guides:
- SDK Documentation Style Guide. This guide describes documentation conventions in terms of Markdown syntax. Always test documentation changes using a preview of the site.
- SDK Code Sample Guidelines. Conventions for code sample organization, project settings, and naming conventions are described in this document. Always test code changes by building and testing the SDK code sample.


When I mix mucana purienes ['8 caps'] and alcohol it creates a warm opiate like experience (complete with itch and euphoria). This is something I have come across randomly, while going through heroin withdrawal and beyond. I went through a semester of college right after quitting heroin, detox was three days of suboxen, and it was hell and it was winter. After getting through the worst I was always cold so I ordered mucuna pruriens. Trust me, no tolerance matters...
Topamax helps me forget how it felt to be high plus it calms all the electricity in my mind... after quitting that goes wild.
Lyrica or related medicines: they feel great, I mean like X plus they actually make my mind feel like its high, but not my body and no nods...
Anyway... if you want to quit, well most people say they can never get back on the horse. I have. I used once again and I hated it after years of use I hated it, it scared me made me feel stupid... trust me get yourself back in the game good luck
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


{% extends "base.html" %} {% block title %}
Medieval catalogues > BENEDICTINES: THE SHORTER CATALOGUES > Thorney > Leland, c. 1536-40
{% endif %}5 identified entries found.
All data was derived from the List of Identifications by Professor Richard Sharpe.
{% if not printing %}
A key to codes used in the List is available (opens in new tab).{% endif %}


{% extends "layout_picker.html" %} {% set serviceName = "Apply for a resident's parking permit" %} {% set pageTitle = "Confirm vehicle details" %} {% block content %}
We've received these details from DVLA:
{% set vehicleColours = ['Red', 'Blue', 'Silver', 'Blue'] %} {% set vehicleMakes = ['LAND ROVER', 'FORD', 'VOLKSWAGEN', 'BMW'] %}
Vehicle {{ loop.index }} |
|
|---|---|
| Registration number | {{ registerNumber }} |
| Vehicle colour | {{ vehicleColours[loop.index - 1] }} |
| Vehicle make | {{ vehicleMakes[loop.index - 1] }} |
| Vehicle status | Tax not due |


--- layout: archive title: Zulip Chat Archive permalink: /stream/113489-new-members/topic/lean-mode.20company.html ---
company-complete isn't working for me..(I can run M-x company-company, but nothing shows up). I am using lean mode + emacs
I have company-lean 20171102.1454 installed
via melpa
@petercommand if you have the goal window open, then sometimes it won't work.
Do you get any error or message?
I didn't get any errors when I first tried, but I am getting error messages (Company: backend company-lean error "interrupted" with args) now if the goal window is open. And closing the goal window worked :D
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


Transforming images¶
Images are rarely in the shape, format or condition suitable for training and need to be transformed in some fashion. nuts-ml provides a wide and easily extensible range of transformation functions.
In the following example we resize two input images, read from disk,
to width 64 and height 128, using TransformImage
:
>>> imagenames = ['color.jpg', 'grayscale.jpg']
>>> read_image = ReadImage(None, 'tests/data/img_formats/nut_*')
>>> resize = TransformImage(0).by('resize', 64, 128)
>>> imagenames >> read_image >> resize >> PrintColType() >> Consume()
item 0: <tuple>
0: <ndarray> shape:128x64x3 dtype:uint8 range:0..242
item 1: <tuple>
0: <ndarray> shape:128x64 dtype:uint8 range:23..235
TransformImage
extracts the images from column 0 of the tuples returned
by ReadImage
and applies the transformation specified by by
. As the
output of PrintColType
shows, the resulting images are indeed of the
specified shape with 128 rows, 64 columns and a channel axis in the case of
color images.
Transformation can be chained. For instance, we can easily resize the images, adjust the contrast and convert all images to RGB format:
>>> normalize = TransformImage(0).by('resize', 64, 128).by('contrast', 1.1).by('gray2rgb')
>>> imagenames >> read_image >> normalize >> PrintColType() >> Consume()
item 0: <tuple>
0: <ndarray> shape:128x64x3 dtype:uint8 range:0..250
item 1: <tuple>
0: <ndarray> shape:128x64x3 dtype:uint8 range:0..241
As you can see, all images now have a channel axis, have larger range (due to the contrast adjustment) and are of the specified dimensions.
See TransformImage
in transformer.py
for a list of available transformations or run help(TransformImage.by)
.
Each transformation can also be used for image augmentation (more of that later).
Custom transformations can be added via register
>>> def my_brightness(image, c):
>>> ... return (image * c).astype('uint8')
>>> TransformImage.register('my_brightness', my_brightness)
>>> normalize = TransformImage(0).by('resize', 64, 128).by('my_brightness', 0.5)
>>> imagenames >> read_image >> normalize >> PrintColType() >> Consume()
item 0: <tuple>
0: <ndarray> shape:128x64x3 dtype:uint8 range:0..121
item 1: <tuple>
0: <ndarray> shape:128x64 dtype:uint8 range:11..117
Note
In most cases image transformation expect RGB or grayscale images of
data type uint8
– though there are exceptions (e.g. rerange
).
When chaining transformations make sure that expected input and output
image formats of the transformations do match.
In addition, it is easy to implement custom nuts that can perform arbitrarily
complex operation. For instance, instead of using TransformImage
we can
implement a custom transformation on the samples ourselves
@nut_function
def ChangeBrightness(sample, c):
image, label = sample
new_image = (image * c).astype('uint8')
return new_image, label
samples = [('nut_color.gif', 'color'), ('nut_monochrome.gif', 'mono')]
read_image = ReadImage(0, 'tests/data/img_formats/*')
samples >> read_image >> ChangeBrightness(0.5) >> PrintColType() >> Consume()
however, in this case we also have to extract the image from sample column 0 and return a new sample with the transformed image and the label.
Note
Style guide: names of (custom) nuts are in CamelCase to distinguish them from plain Python functions. Also nuts are implemented as classes, which agrees with the use of CamelCase.
Transformations can be applied to multiple images in a sample. In the following code, each sample contains two images (columns 0 and 1) that are resized and converted to RGB:
>>> samples = [('color.jpg', 'monochrome.jpg'), ('color.png', 'monochrome.png')]
>>> read_image = ReadImage((0,1), 'tests/data/img_formats/nut_*')
>>> normalize = TransformImage((0,1)).by('resize', 64, 128).by('gray2rgb')
>>> samples >> read_image >> normalize >> PrintColType() >> Consume()
item 0: <tuple>
0: <ndarray> shape:128x64x3 dtype:uint8 range:0..242
1: <ndarray> shape:128x64x3 dtype:uint8 range:0..255
item 1: <tuple>
0: <ndarray> shape:128x64x3 dtype:uint8 range:0..242
1: <ndarray> shape:128x64x3 dtype:uint8 range:0..255
TransformImage
converts each input image to a corresponding output image.
A common task, however, is to extend the training data set by creating multiple
output images for an input image. These so called augmentations are the topic
of the next section.


| DOSE: T+ 0:00 |
30 mg |
oral |
AMT |
(capsule) |
| T+ 2:45 |
7.5 mg |
oral |
AMT |
|
| T+ 3:15 |
1 repeated |
inhaled |
Nitrous Oxide |
(gas) |
I have had quite a few experiences with this drug back when it was widley available on the internet in 2002-2003. My experiences with this drug have always been extremely positive and mellow, with great visuals, so I was excited to once again after 3 years get a chance to take this tryptamine.
T + 00:00: Me and J both take 1 capsule, which we estimate contains about 30 mg AMT (the gram was distriubted into rougly 30 equal sized capsules).
T + 01:00: nothing yet, not even nausea.
T + 02:00: nausea not too bad. At this point we make a decision to go to the head shop and buy some 2 boxes of nitrous. This involved driving, not normally a good idea right before you come up but there still isn't much going on.
[Erowid Note: Driving while intoxicated or tripping is dangerous and irresponsible because it endangers other people. Don't do it!]
T +2:30: On the drive home, I am experiencing major tunnel vision. The visual aspect of the trip is starting to come on. Luckily the head shop is about 2 miles from the house so got home safe.
T +2:45: I drink a cup of water which is estimated to have between 5-10 mg of AMT. The smell is awful but all I taste is water and it goes down easy.
T +3:00: We put on G-force and I continue to get lost in the music. I feel very similar to taking ecstasy but with decent visuals.
T +3:15: we take some nitrous. Woah. An intense rush creeps over me that can only be called bliss. The visual element is now more striking than LSD.
We continued to take nitrous and everyone lead to an intense, beautiful rush. Almost like cocaine or something. When we would go out on the porch, the visual element would become insane. While my hallucinations on this drug could easily be blinked away and were not overwhelming, allowing my eyes to blur seems to lead to insane visual patterns and images. Years ago when we used to take the substance, we had a Dali book that was perfect for this drug. Every page would look like a movie - the image will literally transform, melt, turn 3-d, but never become overwhelming and generally wont leave the page of the book... The sky looks gorgeous.
It seems to me this drug feels like E with visuals when I am inside in a dark area, while more trippy with beautful visuals when I am outside with lots of ambient light.
I am happy to have redisovered this substance.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


One important consideration in mobile is handling mouse and touch events. These events differ significantly across mobile platforms, but the common denominator is that click events will work everywhere, but usually after a significant delay of 300-500ms. This delay is necessary for the browser to wait for double tap, scroll and extended hold tap events to potentially occur. To avoid this delay, it's possible to bind to touch events (ex. touchstart) but the issue with this approach is that some mobile platforms (WP7, Blackberry) don't support touch. To compound this issue, some platforms will emit both touch and mouse events so if you bind to both types, duplicate events will be fired for a single interaction.
Our solution is to create a set of virtual events that normalize mouse and touch events. This allows the developer to register listeners for the basic mouse events, such as mousedown, mousemove, mouseup, and click, and the plugin will take care of registering the correct listeners behind the scenes to invoke the listener at the fastest possible time for that device. This still retains the order of event firing in the traditional mouse environment, should multiple handlers be registered on the same element for different events. The virtual mouse system exposes the following virtual events to jQuery bind methods: vmouseover
, vmousedown
, vmousemove
, vmouseup
, vclick
, and vmousecancel
.


JUST IN: Senate Gives Go Ahead On 7.5 Per Cent VAT Increase, Six Other Taxes
It also seeks an increment in the companies income tax, Customs and excise, petroleum profit tax, stamp duties, personal income tax and capital income tax.
by SaharaReporters, New YorkThe Nigerian Senate has passed the Finance Bill, which seeks to amend seven Acts of the National Assembly relating to taxes payable in the country.
The bill, which scaled through on Thursday, seeks an increment of the value-added tax from five per cent to 7.5 per cent.
It also seeks an increment in the companies income tax, Customs and excise, petroleum profit tax, stamp duties, personal income tax and capital income tax.
Senate Minority Leader, Enyinnaya Abaribe, and Senators Ifeanyi Ubah, Gabriel Suswan and Abba Moro, however, raised objections to the bill, according to a report by PUNCH.
They said the increment in taxes would further compound the suffering and pains of Nigerians.


We hit a snag trying to load this page for you. If you continue to see this page, please drop us an email and let us know what you were doing when you got here.


is used to combine two or more words together with spaces.For example : tiimid souls who neither know victory nor defeat
Theodor Roosevelt 1910 © Copyright


{% extends 'rcos/talks/talk.html' %} {% block title %}Educating the Next Generation of FOSS Developers{% endblock %} {% block speaker %}Luis Ibanez (kitware){% endblock %} {% block date %}JEC 3117 7/9/2010 (Friday) Noon{% endblock %} {% block content %}
Abstract:
An entire generation of engineers is currently being educated exclusively with proprietary software. As a consequence, these students do not get to learn how hardware and software systems really work. For three years we have been working on changing this by offering a college course on Open Source Software Practices. Come to hear about our experiences and help us make this a better course.


Put on your headphones and start listening by pressing on this icon
Frequency of non-work, non-event sounds are played at a higher frequency in this sample.


@import uk.gov.hmrc.hmrcfrontend.views.html.components._ @this(hmrcPageHeading : HmrcPageHeading) @() @hmrcPageHeading(PageHeading( text = "Sorry, the service is unavailable" ))
Universal Credit has replaced tax credits.
Contact the Tax Credits Helpline if you need to make changes to your claim or speak to someone about your tax credits.
You can:


Hello! I am Nicholas Pilgrim and I am a freshmen attending Arizona State University for Computer Science. I am passionate about software technology and am currently looking for a summer internship to enhance my coding skills.


Side Story 20.
The last side story: Twelve years later (2).
A shadow of a woman, yet to shed the hints of her teen years, vigorously rose up from the thickly-coagulated clump of blood on the floor
Chwa-ahck!!.
Droplets of blood dripped from the ends of her hair as she took a look around her, her expression one of sheer confusion regarding her current situation . Eventually, though, she spat out pained moans
[Ah… . Ah… . !].
Indeed, it’d be quite painful for her since she retained the memories of her dying moments . Jin-Woo used the authority of the Shadow Sovereign and calmed the shadow for the time being
“Don’t be frightened
The you of now has become an existence untethered from the boundaries of life and pain . ”.
The king’s calming, warm voice helped the woman to compose herself gradually . Jin-Woo then created a new set to clothing for her sake and wrapped them around her figure since she appeared how she died – nude
[Ah… . ].
She cautiously pulled the clothing on her shoulders tighter
Her name used to be Seo Jin-Yi . He named the newly-revived shadow woman the same as back when she was still alive, and began asking his questions
“Did you… willingly take your own life?”.
The shadow woman, no, Seo Jin-Yi, nodded her head
Jin-Woo placed one of his knees lower to the ground so he could match her eye level . He studied her expression and quietly asked her
“Your reason?”.
And when he did, her lips, frozen shut like a block of ice, cautiously parted ways
[I… . ].
***.
Ding-dong
The doorbell resounded out rather late at night; a middle-aged man put a photo frame containing a picture of his daughter down on its original spot and looked away
‘Who could it be at this late hour?’.
He tilted his head this way and that while standing up from his seat, and walked over to the intercom
The monitor on the device showing the scene outside the front door now displayed a man kitted out in a smart business suit standing there . The middle-aged man didn’t think too much about it and pressed the ‘Speak’ button
Beep
The man outside the door pulled out his ID badge and showed it to the camera
– “I’m Detective Seong Jin-Woo from Central Region’s Violent Crimes Unit . I have questions to ask you regarding your daughter’s death, so can we speak for a little while, please?”.
The photo in the ID badge matched the face on the monitor
The middle-aged man forgot that it was far too late in the day for a guest to show up like this when he heard the word ‘Detective’ and hurriedly flung the door open
“Did the investigation’s result come out? How did my little girl die?!”.
Jin-Woo quietly studied the face of Seo Jin-Yi’s father, Seo Gyu-Nam, before shaking his head
“Nothing is certain yet, sir . However, I do have several follow-up questions I’d like to ask you regarding your daughter . ”.
The father of the deceased formed a somewhat disappointed expression when he heard there was nothing to report yet . Jin-Woo made a quiet demand towards the man
“Can you come with me?”.
Seo Gyu-Nam seemed to be in a dilemma, but soon enough, formed a grimly determined expression
“Of course . If I can help in any shape or form in uncovering the truth of my daughter’s death, then I shall cooperate fully . ”.
He came outside and locked the door before turning around to face Jin-Woo
“Let’s get going, Detective . ”.
Jin-Woo nodded his head once and turned towards a certain direction
“This way . ”.
***.
Seo Guy-Nam initially thought that they would go to the police station, but instead, they ended up in a cafe near his place . He asked the detective why they had to come here and only got a vague answer in the form of “We need a place to chat quietly” instead
And so, Jin-Woo and Seo Gyu-Nam sat on the opposite side of the table . The former then began his questioning as the latter formed a heavy expression
“What kind of a student was Miss Seo Jin-Yi usually?”.
“Excuse me?”.
“By any chance, was there anyone who might have been resentful towards… . ”.
Seo Gyu-Nam belatedly realised the implication behind the question and hurriedly shook his hand around
“No, no . Never .  She was really kind and pure and…”.
Seo Gyu-Nam replied up to there before his head faltered and sounds of sobbing escaped from him
How long did it go by like this?.
The sobbing man’s shoulder’s stopped trembling eventually and he raised his head slowly
“I, I’m sorry, Detective . I still can’t believe that my little girl left me in that manner… ”.
“You must’ve cherished your daughter a lot . ”.
“Of course . I’m sure you know this already, but Jin-Yi wasn’t my biological child . That was why I cherished and loved her as much as I would’ve with my real child, no, maybe even more than that . ”.
His gaze lowered as he struggled to swallow back his sadness . He continued on
“If only she told me when she was hurting, when it was getting too much for her… . ”.
Although Seo Gyu-Nam was displaying an intense emotional state, Jin-Woo was quite different in his attitude and kept an icy-cold gleam in his eyes from the beginning right until the end . He then pulled out his own smartphone from his inner pocket
“While we were sifting through your daughter’s personal effects, we uncovered a certain sound file . ”.
“… . Pardon?”.
“Well, let’s listen to it first . ”.
Jin-Woo tapped on the play icon and let the voice of the shadow play out
– [I… . ].
It was the testimony straight from her mouth about the tale of the horrifying abuse she suffered at the hands of her adoptive father, ever since she was a young child
And as the testimony continued on….
Seo Gyu-Nam finally stopped acting like a sorrowful father who lost his daughter, his eyes constantly shaking from shock
The girl deliberately chose to go to a university far away from home, believing that she was finally freed from the torment of her adoptive father, but then, when the b*stard got in contact with her again some time ago, starting with the text message saying ‘I want to see you again’, she chose to end her life, instead
She might have taken her own life, but the culprit that drove her to that decision was someone else
Tap
Once the sound file ended its playback, Seo Gyu-Nam raised his head, his expression frozen-stiff now
“Why… why did you play that in front of me?”.
This middle-aged man could legitimately claim that he possessed quicker wits than most other people
If the real goal of this meeting was to arrest him, then this detective would’ve shown up with a couple of other officers, slap the cuffs on him and be done with the whole thing just like that
However, this cop didn’t take him to the police station, but to a local cafe, saying that they needed to have a quiet chat
That was why Seo Gyu-Nam had a hunch that the detective in front of his eyes had a somewhat different purpose in coming to see him . As if to reply positively to that hunch, the expressionless detective finally revealed a toothy grin
“You now have two options available to you . ”.
Options were available!.

Meanwhile, the detective carried on
“First… . You admit to your wrongdoing, go to the station with me, and confess everything . ”.
“And… the other option is?”.
“Rather than admit to your crime, you pay an appropriate price, instead . ”.
Seo Gyu-Nam had to grit his teeth in order to suppress this powerful wave of jovial laughter gushing out from somewhere deep inside his chest
‘Oh my goodness me . ’.
And the wise old ‘they’ said that, even if the heavens collapsed, there would always be a way out, didn’t they?
Seo Gyu-Nam had lived a pretty great life as a medical doctor .
“That is already enough . ”.
Jin-Woo formed a hollow chuckle and securely pocketed the phone
He knew better than anyone just how many people regretted with their whole being the choice they’ve made just now . This middle-aged man trying his best to hide his laughter came across as utterly disgusting and ridiculous
In an instance, Jin-Woo’s expression changed
“Now, listen well . ”.
With the smile gone from his face, an aura so ominous and bleak oozed out from him, instead
“In reality, this place you’re in isn’t the world you were living in . No, it’s a different world I simply mocked up to resemble the outside scenery . ”.
The land of the dead that no living soul could enter without the express permission of its master – the territory of the eternal rest . Jin-Woo calmly added that that was the name of the prison about to seal Seo Gyu-Nam away
Of course, the middle-aged man became flustered at the suddenly-changed Jin-Woo’s attitude as well as at this strange, hard-to-understand explanation
“E-excuse me, Detective-nim . I, I don’t underst… . ”.
“Think about it carefully . ”.
Seo Gyu-Nam felt his breathing choke up from Jin-Woo’s murderous glare
“Can you remember how you got here?”.
Now that he thought about it…
As the chill ran down on his spine, Seo Gyu-Nam finally realised the oddness of his situation
‘B-but, how… . ?’.
Within this brightly-lit cafe, how was it possible that there was not a single soul around other than himself and this mysterious detective?.
Even if you forget about other patrons, no, maybe even the actual owner of the place, shouldn’t there at least be one waiter or a clerk somewhere??.
However, whether it was inside the building or outside of the glass wall, there was not a single trace of other people at all
“Ah… . ”.
Just as he finally recognised that something unexplainable had happened to him, everything vanished, just like that, leaving only the darkness
The only items left within this inky-black darkness were the table, plus the two chairs . And of course, himself and the detective sitting on those chairs
“U-uwaaaaahhk?!”.
 Is this a dream? It’s a nightmare, isn’t it??”.
The middle-aged man pointed at Jin-Woo in a confused mixture of anger and desperation . Unfortunately for him, his retreating steps couldn’t go too far
Thud
Because he ran into something as hard as a wall, that was why . An inexplicable chill swept him up and his head slowly shifted towards his back
That’s when the ‘wall’ began moving
No, it wasn’t an actual wall, just a giant ‘ant’ standing stiffly like one, and it was moving now
This ant creature shoved its head closer to Seo Gyu-Nam’s face and quietly placed its unfurled index finger against its ‘lips’
[Shh… . ].
In that moment….
“Euph! Eu-euph…!!!”.
Dozens upon dozens of ant arms reached out from the darkness and grabbed onto him, before dragging him deeper into the unknown
He would now be subjected to horrifying torture from here onwards where he’d eventually beg for death, but too bad, he’d not be able to die that easily
See, the thing was, the Shadow now tasked with his punishment was one of the greatest soldiers in the ranks, and at the same time, the greatest ‘Healer’ there ever was, too
[Kkiiehk!].

Jin-Woo wordlessly stared in the direction where Seo Gyu-Nam had disappeared to, and slowly stood up from his chair . This time, not from his front but from behind, another figure watching the proceedings unfold while hiding stepped out of the darkness
It was Jin-Yi
Jin-Woo was well aware that, no matter how badly the guilty suffered, the victim’s pain would never fully disappear . However, if such a thing could console the heart of the deceased just a tiny bit…
He walked over to her and placed his fingertip on her forehead to erase all memories of her adoptive father
[Thank you . Thank you so much, Sovereign-nim . ].
The Shadow bowed her head many times to Jin-Woo afterwards
Now that she was reborn as a Shadow, she instinctively understood what kind of a special existence he was, but well, Jin-Woo never planned to convert her into his Shadow Soldier, to begin with
So, it was now time to return her to the void
Just before their goodbyes, Jin-Woo asked her in a gentle voice
“Is there anything else you’d like to say?”.
The Shadow lightly shook her head, before going, “Ah!”.
[By any chance… . If it’s not too much trouble, can I ask you for a small favour?].
***.
Next day
Jin-Yi’s friend came to the station in the early morning to find out about any new development in the case . Jin-Woo found her first and took her to the corridor outside the office
“By all appearances, the chances of the case being treated as murder is extremely low at this point . The investigation itself will close soon, as well . ”.
The friend looked at Jin-Woo with a disbelieving expression, before speaking up with the voice of a person clutching at a straw
“T-truly… . There isn’t even one percent of any other possibilities??”.
Rather than a verbal reply, Jin-Woo quietly nodded his head up and down . The friend’s head dropped towards the ground next
She seemed to have a million things to say in her mind, but couldn’t say any one of them out aloud – her expression sorrowful but unwilling, she hesitantly spoke
“That means, Jin-Yi, she… . ”.
Jin-Woo studied her for a moment or two, before presenting her with a small gift box covered in a cute wrapper
“This is?”.
“The name written on the gift card is yours, isn’t it?”.
“… It is . ”.
It was none other than a gift the deceased carefully handpicked and prepared for the friend’s birthday . The gift that would’ve never entered its intended owner’s hands finally found its way to its rightful home
“Jin-Yi prepared this… . ?”.
“That’s correct . I thought that Miss Jin-Yi would’ve wanted this gift to find its intended owner . ”.
“Ah… . Thank you… . ”.
The friend thanked Jin-Woo wholeheartedly, her eyes tearing up uncontrollably
If only the adoptive father’s insidious text message didn’t arrive at the victim’s phone one hour before she cut her own wrist, wouldn’t these two friends get to enjoy the birthday party as planned?.
Jin-Woo felt complicated in his heart as several thoughts intersected within his mind and his gaze drifted away to the distance, only for him to feel the familiar vibration coming from within his pocket
“Excuse me for a moment . ”.
He asked for an understanding from the sobbing friend of the victim, turned around, and answered his phone
– “Hyung-niiim!!”.
A voice he felt relieved to hear came out of the phone’s speaker
– “It’s me, Yu Jin-Ho!”.
< Chapter 263 > Fin


The algorithm has diagnosed you with no heart disease based on your inputs. However it might be better to talk to a doctor regardless.


{% include 'header.html' %}
Choice Coin was created by Fortior Blockchain, LLLP in 2021. Foritor Blockchain recieved a grant from the Algorand Foundation to develop software in June 2021. They also won the MIT Hackathon in April.
Visit the main webpage for Fortior Blockchain here.
{% include 'footer.html' %}


Well, maybe you’ve all heard of it. 8 Oscars, 4 hours, bla bla bla… But c’mon! Have you seen the characters? Everyone can relate to them: take Scarlett, she is in love for her whole life with a man who does not reciprocate. But let’s admit it, she doesn’t even see Ashley for who he really is, she has built an ideal, she has created a wonderful dress made of every virtue and quality any woman would desire and put it on Ashely.  And that’s where the grandeur of the film lies: it does not present us a princess, a woman so pure, an unreachable ideal. It shows us a woman prone to weakness. Scarlett does not see the happiness which is right there, in front of her eyes. She passes her life admiring the beautiful dress she has created instead of seizing the moment, grabbing the rare and fleeting moments of joy and happiness life has to offer. One wonders, why? Is she just simple-minded or is she scared that if she lets real happiness get to her she might not be able to let it go?
What if I told you that I never watched Star Wars and that this series made me watch it? We’ve all seen the memes on social media, Baby Yoda (no way he’s Grogu) is probably the cutest little imaginary thing ever created. I mean, have you seen him walking, hugging or trying to talk? I just want to grab him and hug him till his eyes are out. But, I think what is magical about the series is not Baby Yoda’s powers, the Darksaber, but rather the picture of what a man can do to have his kid back. We always see women in tv do the impossible for their kids, but it is rare seeing a man doing everything and more to save a child is not even his. I think my favorite part is when the Mandalorian takes his helmet down, IN FRONT OF OTHER PEOPLE, going against his creed and everything he believes in just to say goodbye to him. Well, those are pretty impressive feelings to display on a male character.
Let’s start with this: you cannot judge until you’ve seen it. And not just one episode, but like a season. I admit it, it’s not the most inspiring series of all times, but there is something that soothes me when I watch it. There might be a good reason for it: I think what the series is trying to show us is either you have parents like Lorelai, or you have parents like Lorelai’s. By fitting into the second category, I totally get her: they are always judging her, controlling her, trying to make her feel miserable so as she does what they want her to, why would she talk to them? Anyway, she makes the effort when her kid needs money to get a good education, so she just must swallow her pride and go to Friday dinners and put up a smiling face. I mean I do admire her, even if she’s a fictional character: she works, she studies to get a degree, provides for her daughter and loves and listens to her. As far as Lorelai’s parents are concerned, I am no psychologist, but could it be that they know no better than the way they are behaving? Are we supposed to just forgive them for that? What about knowing what is right and wrong? But is there a right and wrong when it comes to parenting?
You might have seen it in tv, but the love story between Noah and Allie just melts your hearts. Contrary to Gone With The Wind, well this one is pretty much “unrealistic”. If you have not seen it, this is what happens: Noah and Allie meet during the summer. She’s super rich and he’s penniless. Obviously, her parents don’t approve (God maybe I have an issue with the “parents” theme) so they break up. She goes to university, she’s about to marry a handsome loaded lad when she hears that her ex (Noah) built the house he promised her when they were 17!! So, surprise surprise…she goes back to him, he reveals to her that he wrote to her 365 love letters after their breakup, so she dumps the rich lad and marries Noah. Okay, lame till now. But here’s the thing: she gets Alzheimer’s! So, she forgets everything about him and their children. Anyway, sometimes “she comes back to him”, and one night (here’s my favorite part) they are together in a bed, in one of the rare moments she remembers him, and this is their conversation:
Allie: I need to ask you something.
Noah: What is it, sweetheart?
Allie: do you think that our love can create miracles?
Noah: Yes, I do. That's what brings you back to me each time.
Allie: Do you think our love could take us away together?
Noah: I think our love can do anything we want it to.
 And guess what… apparently it is based on a true story! Don’t lose hope folks! After all, tomorrow is another day


Java applet written to draw the Harrison construction of free electron Fermi surfaces for a 2-D square lattice. After Figure 11, Chapter 9, "Introduction to Solid State Physics", 8th Ed., by Charles Kittel. See also Problem 5, Chapter 9, "Solid State Physics", by Neil W. Ashcroft and N. David Mermin. Use the "Color" choice box to select "Gray" when printing on a black & white printer, or choose "None" for faster display rendering. The left-hand slider controls how many electrons per unit cell. The right-hand slider controls how many Brillouin Zone boundaries are drawn. Set either slider to zero to hide the feature.


Preparation time
less than 30 mins
Cooking time
1 to 2 hours
Serves
Serves 4
Duck breasts in an orange glaze with sautéed potatoes and caramelised apples - plus a side of kale to cut through the richness.
Equipment and preparation: for this recipe you will need a Parisian scoop (also known as a melon baller).
For the squash purée, heat the oil and butter in a large frying pan. Once the butter has melted add the squash and gently fry without colouring. Add the ginger and orange zest and cook until the squash is soft. Once softened, add the cream and season with salt and pepper.
Transfer the cooked squash to a blender and purée until smooth. Pass through a fine sieve into a clean pan to remove any lumps.
For caramelised apples, take a Parisian scoop and cut out spheres of apple and place them in a bowl of acidulated water.
Place a frying pan on the heat and add the butter and sugar. Once melted and the sugar had started to caramelise, drain the apple balls well and add them to the pan. Coat in the caramel, then remove them from the heat and set aside to cool.
For the duck glaze, boil the maple syrup, soy sauce and balsamic vinegar in a pan until reduced to a sticky glaze. Add the orange juice and reduce again.
Preheat the oven to 180C/160C Fan/Gas 4.
For the Derry duck, put the potatoes in a large saucepan and cover with cold water. Bring to the boil and cook the potatoes until soft but not falling apart. Once cooked, remove from the pan and refresh in ice-cold water to stop the cooking process. Carefully peel the cooled potatoes and set aside.
Season the duck breasts with salt and pepper, then fry them skin-side down in an ovenproof frying pan (you may need to do this in batches). Gently cook for about 8 minutes until caramelised all over and the fat has rendered from the skin. Pour the fat from the pan into small bowl. Transfer the duck to the oven and cook for 3 minutes.
Remove the pan from the oven and add the some of the glaze, coat the duck in the glaze, then set aside to rest for 10 minutes before serving.
Heat a large frying pan and add the butter, once melted add the chopped kale and toss to coat. Cook until the kale is tender, then season with salt and pepper.
Heat the duck fat in a separate large pan and add the peeled potatoes. Cook gently until golden-brown on all sides. Season with salt and pepper.
To serve, reheat the caramelised apples and squash purée. Spoon the purée onto serving plates. Slice the duck breasts and place next to the purée. Add the apples next to the duck and the wilted greens in the middle.


UK Labour's Corbyn: We will not do coalition deal after Dec. 12 election
by ReutersLONDON — British oppposition Labour leader Jeremy Corbyn said his party would not form a coalition government if it fails to secure a majority in parliament at a Dec. 12 election.
Four opinion polls published on Saturday put Labour between 10 and 17 percentage points behind Prime Minister Boris Johnson’s Conservatives.
Asked about possible demands for a Scottish independence referendum in return for the support of the Scottish National Party (SNP) if Labour are short of a majority, Corbyn told BBC TV: “We are not doing deals with anybody.”
“We are not forming coalition governments, we will put forward the program on which we will have been elected,” he said. “The SNP will have a choice, do they want to put Boris Johnson back in … or are they going to say a Labour government will deliver for Scotland.” (Reporting by Kylie MacLellan, editing by Louise Heavens)


Welcome to IBM Bluemix Data Store !!!
Home
List of files present on IBM Bluemix:
Filename
Version number
Last Modified Date
{% for n in files %}
{{ n.filename }}
{{ n.versionnumber }}
{{ n.lastmodifieddate }}
Download
Delete
{% endfor %}


With:
Google
Google (text only)
The Internet Archive
The Internet Archive (list all)
archive.is
WebCite
Memento Timetravel
In:
the current tab
a new tab (foreground)
a new tab (background)
a new window


High Priest Agripel:
To tell you of the key I must know where you got the totem. Did you get it from a dark Magus?
"Yes."


>
This is part of the old website. New website begins at fontforge.github.io
Are you a web developer? Help us migrate this page on Github
This file is based on the X11 sources. If something here disagrees with what is found in the sources, my statement is incorrect. The sources are definitive.
The pcf (portable compiled format) file format is a binary representation of a bitmap font used by the XServer. It consists of a file header followed by a series of tables, with the header containing pointers to all the tables.
The file header contains 32 bit integers stored with the least significant byte first.
char header[4]; /* always "\1fcp" */ lsbint32 table_count; struct toc_entry { lsbint32 type; /* See below, indicates which table */ lsbint32 format; /* See below, indicates how the data are formatted in the table */ lsbint32 size; /* In bytes */ lsbint32 offset; /* from start of file */ } tables[table_count];
The type field may be one of:
#define PCF_PROPERTIES (1<<0) #define PCF_ACCELERATORS (1<<1) #define PCF_METRICS (1<<2) #define PCF_BITMAPS (1<<3) #define PCF_INK_METRICS (1<<4) #define PCF_BDF_ENCODINGS (1<<5) #define PCF_SWIDTHS (1<<6) #define PCF_GLYPH_NAMES (1<<7) #define PCF_BDF_ACCELERATORS (1<<8)
The format field may be one of:
#define PCF_DEFAULT_FORMAT 0x00000000 #define PCF_INKBOUNDS 0x00000200 #define PCF_ACCEL_W_INKBOUNDS 0x00000100 #define PCF_COMPRESSED_METRICS 0x00000100
The format field may be modified by:
#define PCF_GLYPH_PAD_MASK (3<<0) /* See the bitmap table for explanation */ #define PCF_BYTE_MASK (1<<2) /* If set then Most Sig Byte First */ #define PCF_BIT_MASK (1<<3) /* If set then Most Sig Bit First */ #define PCF_SCAN_UNIT_MASK (3<<4) /* See the bitmap table for explanation */
The format will be repeated as the first word in each table. Most tables only have one format (default), but some have alternates. The high order three bytes of the format describe the gross format. The way integers and bits are stored can be altered by adding one of the mask bits above.
All tables begin on a 32bit boundary (and will be padded with zeroes).
lsbint32 format; /* Always stored with least significant byte first! */ int32 nprops; /* Stored in whatever byte order is specified in the format */ struct props { int32 name_offset; /* Offset into the following string table */ int8 isStringProp; int32 value; /* The value for integer props, the offset for string props */ } props[nprops]; char padding[(nprops&3)==0?0:(4-(nprops&3))]; /* pad to next int32 boundary */ int string_size; /* total size of all strings (including their terminating NULs) */ char strings[string_size]; char padding2[];
These properties are the Font Atoms that X provides to users. Many are described in xc/doc/specs/XLFD/xlfd.tbl.ms or here (the X protocol does not limit these atoms so others could be defined for some fonts).
To find the name of a property: strings + props[i].name_offset
Several of the tables (PCF_METRICS, PCF_INK_METRICS, and within the accelerator
tables) contain metrics data which may be in either compressed
(PCF_COMPRESSED_METRICS) or uncompressed (DEFAULT) formats. The compressed
format uses bytes to contain values, while the uncompressed uses shorts.
The (compressed) bytes are unsigned bytes which are offset by 0x80 (so the
actual value will be (getc(pcf_file)-0x80)
. The data are stored
as:
Compressed
uint8 left_sided_bearing; uint8 right_side_bearing; uint8 character_width; uint8 character_ascent; uint8 character_descent; /* Implied character attributes field = 0 */
Uncompressed
int16 left_sided_bearing; int16 right_side_bearing; int16 character_width; int16 character_ascent; int16 character_descent; uint16 character_attributes;
This provides the data needed for an XCharStruct.
These data provide various bits of information about the font as a whole. This data structure is used by two tables PCF_ACCELERATORS and PCF_BDF_ACCELERATORS. The tables may either be in DEFAULT format or in PCF_ACCEL_W_INKBOUNDS (in which case they will have some extra metrics data at the end.
The accelerator tables look like:
lsbint32 format; /* Always stored with least significant byte first! */ uint8 noOverlap; /* if for all i, max(metrics[i].rightSideBearing - metrics[i].characterWidth) */ /* <= minbounds.leftSideBearing */ uint8 constantMetrics; /* Means the perchar field of the XFontStruct can be NULL */ uint8 terminalFont; /* constantMetrics true and forall characters: */ /* the left side bearing==0 */ /* the right side bearing== the character's width */ /* the character's ascent==the font's ascent */ /* the character's descent==the font's descent */ uint8 constantWidth; /* monospace font like courier */ uint8 inkInside; /* Means that all inked bits are within the rectangle with x between [0,charwidth] */ /* and y between [-descent,ascent]. So no ink overlaps another char when drawing */ uint8 inkMetrics; /* true if the ink metrics differ from the metrics somewhere */ uint8 drawDirection; /* 0=>left to right, 1=>right to left */ uint8 padding; int32 fontAscent; /* byte order as specified in format */ int32 fontDescent; int32 maxOverlap; /* ??? */ Uncompressed_Metrics minbounds; Uncompressed_Metrics maxbounds; /* If format is PCF_ACCEL_W_INKBOUNDS then include the following fields */ Uncompressed_Metrics ink_minbounds; Uncompressed_Metrics ink_maxbounds; /* Otherwise those fields are not in the file and should be filled by duplicating min/maxbounds above */
BDF Accelerators should be preferred to plain Accelerators if both tables are present. BDF Accelerators contain data that refers only to the encoded characters in the font (while the simple Accelerator table includes all glyphs), therefore the BDF Accelerators are more accurate.
There are two different metrics tables, PCF_METRICS and PCF_INK_METRICS, the former contains the size of the stored bitmaps, while the latter contains the minimum bounding box. The two may contain the same data, but many CJK fonts pad the bitmaps so all bitmaps are the same size. The table format may be either DEFAULT or PCF_COMPRESSED_METRICS (see the section on Metrics Data for an explanation).
lsbint32 format; /* Always stored with least significant byte first! */ /* if the format is compressed */ int16 metrics_count; Compressed_Metrics metrics[metrics_count]; /* else if format is default (uncompressed) */ int32 metrics_count; Uncompressed_Metrics metrics[metrics_count]; /* endif */
The bitmap table has type PCF_BITMAPS. Its format must be PCF_DEFAULT.
lsbint32 format; /* Always stored with least significant byte first! */ int32 glyph_count; /* byte ordering depends on format, should be the same as the metrics count */ int32 offsets[glyph_count]; /* byte offsets to bitmap data */ int32 bitmapSizes[4]; /* the size the bitmap data will take up depending on various padding options */ /* which one is actually used in the file is given by (format&3) */ char bitmap_data[bitmapsizes[format&3]]; /* the bitmap data. format contains flags that indicate: */ /* the byte order (format&4 => LSByte first)*/ /* the bit order (format&8 => LSBit first) */ /* how each row in each glyph's bitmap is padded (format&3) */ /* 0=>bytes, 1=>shorts, 2=>ints */ /* what the bits are stored in (bytes, shorts, ints) (format>>4)&3 */ /* 0=>bytes, 1=>shorts, 2=>ints */
The encoding table has type PCF_BDF_ENCODINGS. Its format must be PCF_DEFAULT.
lsbint32 format; /* Always stored with least significant byte first! */ int16 min_char_or_byte2; /* As in XFontStruct */ int16 max_char_or_byte2; /* As in XFontStruct */ int16 min_byte1; /* As in XFontStruct */ int16 max_byte1; /* As in XFontStruct */ int16 default_char; /* As in XFontStruct */ int16 glyphindeces[(max_char_or_byte2-min_char_or_byte2+1)*(max_byte1-min_byte1+1)]; /* Gives the glyph index that corresponds to each encoding value */ /* a value of 0xffff means no glyph for that encoding */
For single byte encodings min_byte1==max_byte1==0, and encoded values are between [min_char_or_byte2,max_char_or_byte2]. The glyph index corresponding to an encoding is glyphindex[encoding-min_char_or_byte2].
Otherwise [min_byte1,max_byte1] specifies the range allowed for the first (high order) byte of a two byte encoding, while [min_char_or_byte2,max_char_or_byte2] is the range of the second byte. The glyph index corresponding to a double byte encoding (enc1,enc2) is glyph_index[(enc1-min_byte1)*(max_char_or_byte2-min_char_or_byte2+1)+ enc2-min_char_or_byte2].
Not all glyphs need to be encoded. Not all encodings need to be associated with glyphs.
The encoding table has type PCF_SWIDTHS. Its format must be PCF_DEFAULT.
lsbint32 format; /* Always stored with least significant byte first! */ int32 glyph_count; /* byte ordering depends on format, should be the same as the metrics count */ int32 swidths[glyph_count]; /* byte offsets to bitmap data */
The scalable width of a character is the width of the corresponding postscript character in em-units (1/1000ths of an em).
The encoding table has type PCF_GLYPH_NAMES. Its format must be PCF_DEFAULT.
lsbint32 format; /* Always stored with least significant byte first! */ int32 glyph_count; /* byte ordering depends on format, should be the same as the metrics count */ int32 offsets[glyph_count]; /* byte offsets to string data */ int32 string_size; char string[string_size];
The postscript name associated with each character.