This my contribution to the plethora of useless, personal home pages on the web. I just figured I should have something, so I wouldn't end up like this guy in the cartoon. Feel free to E-mail me your opinion of my efforts.
I've collected quite a few pictures over the years of the staff and students I've worked with. Click here to see some of them.
People with no window in their offices (or ex-Peorians who just miss the lovely Peoria weather) may click here for a real-time view out my office window.
Here's some useless personal information, so I have an excuse to put in all these central Illinois links. I was born July 28, 1953 right here in Peoria, Illinois, but my family moved to Canton, Illinois (about 30 miles away) when I was 5 years old. I graduated from high school there, then came back to Peoria in the fall of 1971 as a Bradley University student, and have been at Bradley in one form or another ever since, although I did commute from Normal, Illinois for a couple of years.
I'm the faculty advisor for Psi Phi, a Science Fiction organization at Bradley University. My job consists of signing a form once per year. Other than that, they take care of themselves. You should check out the impressive reference material that David Henderson maintains about "Star Trek: Deep Space Nine" and "Star Trek: Voyager" on the Psi Phi web site, instead of doing his homework.
On June 5, 1993 I married Tzonglee Wu, who usually goes by Sophia around English-speaking people. She was born and raised in Taiwan and didn't come to the USA until her mid-twenties. Her father was originally from Shanghai in mainland China, but fled under gunfire around the time Chiang Kai-Shek lost China's civil war to the Communists in 1949. Her mother is native Taiwanese, raised during that period of Taiwan's history when it was occupied by Japan.
Here is a map for people who have no clue where Taiwan is.

Sophia wants me to tell everyone that she is now selling Mary Kay products. E-mail her for more information.
Her main job involves writing COBOL programs on IBM mainframes. Besides the modern view of computing this demonstrates, she is also the only person in my circle of friends who thinks Dan Quayle did a good thing when he bashed Murphy Brown.
This is ironic, since my only son, and biggest source of joy in my life, Chris Hibbard, was born May 26, 1988 to (using Mr. Quayle's words) an "unwed" "professional woman" (albeit one who works for the American Red Cross rather than a television network). His mother and I cooperate very well in taking care of him, and he spends roughly half his time with me.
Here is some of his art work from the front of the refrigerator several years
ago, and something else a bit more recent.
His hobbies are sports, video games and watching .
But ever since he got a boom box for Christmas (1997), his main hobby has become driving his parents crazy with loud, obnoxious noise that he seems to think is music.
Here's Chris's latest school picture and a picture from 2nd grade that I really like.
Or check out Chris's debut in the national media.
And here are more snapshots of Chris than any non-relative would want to see


Manyama replaces injured Zwane in Bafana Bafana squad
Cape Town - Kaizer Chiefs midfielder Lebogang Manyama has been called up to the Bafana Bafana squad for their two crucial 2021 Africa Cup of Nations (AFCON) clashes against Ghana and Sudan.
Manyama replaces the injured Themba Zwane from Mamelodi Sundowns.
Bafana Bafana assembled for camp on Sunday and will fly out to Accra on Monday evening.
The overseas-based contingent of Lebohang Phiri, Bongani Zungu, Lebo Mothiba (all France), Thulani Serero (Abu Dhabi), Percy Tau, Darren Keet (both Belgium) as well as Kamohelo Mokotjo (England) will join up with their team-mates in Accra, the capital of Ghana, before the long bus drive to Cape Coast.
This is where Bafana Bafana will take on Ghana in the first match of the qualifiers on Thursday, November 14 at the Cape Coast Stadium.
Kick-off is at 19:00.
The squad will then drive back to Accra after the match, have a short sleep, then board an early morning flight back to Johannesburg.
They are expected to land at OR Tambo International Airport around 17:25.
For the second match of the qualifiers, Bafana Bafana will face Sudan at Orlando Stadium on Sunday, November 17 at 15:00, but prior to that, they will have only one training session at the match venue on Saturday afternoon.
This will be Bafana Bafana’s 12th meeting against the Black Stars of Ghana and their third clash against Sudan.
Tickets for the fixture against Sudan are already on sale and can be purchased at Computicket outlets, Shoprite and Checkers stores for R40.
- Compiled by Baden Gillion


Skip to main content
ATP
Toggle navigation
Test Go!
HTTP Request
Dashboard
Login
Logout
Connecting
Welcome to Anonymous Testing Platform
HTTP Request Test
Configuration
Test Label
Mode
Indirect
Direct
Node Number
Allow Mix Mode
True
False
Loop Count
Activate Period (s)
Delay Base (ms)
Delay Offset (ms)
Task List
Add Task
Url
HTTP Method
GET
POST
Path
Args
Test Node Requirement
If you submit a request without ticking any check-boxes, ATP will randomly select nodes from all available browsers around the world.
Internet Explorer currently
does not
support "Direct" test mode.
Browser
Chrome
Firefox
Opera
Internet Explorer
Test Node Location
Taiwan
Taipei
Hsinchu
U.S.
Japan
Submit
Dashboard
Test Detail
Mode
Node Number
Loop Count
Delay Base and Offset
Test Node Filter
Task List
Download Test Result (.csv)
Latency
Drag to zoom, right click to reset zoom level.
Response Time
Drag to zoom, right click to reset zoom level.
Processing Time
Drag to zoom, right click to reset zoom level.
Request Distribution
Result Table
First column represents the time-point when test node receives first byte from target server.
Sorry...


[§432G-22 Rules; adoption by commissioner.] The commissioner may adopt rules under chapter 91 for the implementation and administration of this chapter. [L 2013, c 191, pt of §1]
Revision Note
This section, enacted as §432G-2(e), was redesignated pursuant to §23G-15.


Newbie tips — 5 Advantage of Using GitHub Pages for Hosting
I am not a web developer, not yet. But you don’t have to be a web developer to set up a website with GitHub Pages.
Recently I have an idea of putting all my work in one place, make it kind of like a portfolio. I brought a domain name — cheuk.dev (try to be cool) and went to the IndieWebCamp in Berlin where they are happy to help with web newbies to get started. They recommended many options, including Wordpress and Blogger, to get your website set up. But since I have experience maintain the website for Python Sprint, which uses Jekyll on GitHub Pages, I feel more comfortable going down the GitHub route.
After playing for a few days, I found there are some nice features of GitHub Pages for newbies to set up their first website:
1.  It will be like a half hacking and half experimentation project so having a free hosting service is definitely encouraging for newbies to try out and get started. The only catch is you have to keep the repo and the code public.
2. Support Custom Domain
GitHub Pages comes with the default domain name like https://<your_account_name>.github.io/
but you have brought a cool domain like I am. GitHub will let you use your own, just set up your custom domain following the easy step by step guide and you are good to go. It may take a day or 2 for it to take effect though depending on your domain provider, after setup you can use your own domain like a pro.
3. Support for HTTPS
Since I got a cool .dev domain, I need to encrypt with https. My friend told me it is not easy for a newbie to get an open SSL certificate. GitHub has partnered with the certificate authority Let’s Encrypt. After setting up your custom domain, select the Enforce HTTPS option.
4. You don’t need Jeykll installed
Yes, even your website is set up with Jekyll you don’t need to have Jekyll installed locally. I have been maintaining Python Sprint for almost a year without installing Jekyll on my computer.
Jekyll is a parsing engine bundled as a ruby gem used to build static websites from dynamic components such as templates, partials, liquid code, markdown, etc. In simpler terms, it’s a simple, blog-aware, static website generator.
GitHub will build your website for you every time when you push to your repo named <username>.github.io
if you have the files required by Jekyll (e.g. _configure.yml
_layouts/default.html
etc.) it will automatically build it for you.
5. Using git version control
If you are an experienced GitHub user and fairly comfortable using git like I am, you will appreciate being able to do version control on your website. You can always try something and commit it, if you want to roll back to the previous version, you can just do a reset. You can get all the benefits that git gives you while designing your website. So for newbies who are no so sure if something works and need to learn from trying, git will give you a safe playground for it and GitHub will happily store all versions of your sites for you.
So here you go, 5 advantage of using GitHub Pages for a starter website. If you are still not convinced to start your first website, I hope to see you at one of the IndieWebCamps and I am happy to help you out.


Setup
Before we can start editing an EPUB, we need to download a few tools. Follow the links below to get started:
- Sigil
Sigil is an open source, multi-platform EPUB ebook editor. We’ll use Sigil to edit EPUBs.
- ePub3-itizer
ePub3-itizer is a plug-in for Sigil that will convert an EPUB 2 into a EPUB 3.
If you’re using a Mac, you’ll also need to download ActiveTcl for this plugin to work.
- Pagelist
Pagelist is another plug-in for Sigil. This will help us generate pagelists from page numbers. Download the zip file(1.8 KB)
- EPUB-Checker
EpubCheck is a tool to validate EPUB files. It can detect many types of errors in EPUB. We can use it to check the EPUB for errors as we work.
Installing plug-ins in Sigil
- Go to Plugins > Manage Plugins in the menu bar
- Click “Add Plugin”
- Locate and select the zip file that you downloaded
- Click “OK”
Once you’ve downloaded the above tools, we can get started with Sigil. Turn to Check the EPUB version.
Resources
It’s not required that you read or understand all about EPUB, HTML, et cetera. However, the below resources are a good place to start if you want to know more about the how’s and why’s of ebook creation and accessibility.
Webpages
Videos
Free courses
Check the EPUB version
This first step to editing an EPUB is to check what version of EPUB the book is. We want it to be an EPUB 3, and not an EPUB 2. If it’s an EPUB 2, then we need to upgrade it.
Follow the steps below to check what version of EPUB you’re working with.
Open the EPUB in Sigil
There are very ways to do this: you can right-click on the EPUB and open with Sigil; you can open Sigil and then go to File > Open; you can open Sigil and press Command+O or ⌘O.
Open the OPF File
In the Book Browser pane on the left, find and open the OPF file. This is a file with the extension “.opf” and is often called “content.opf” or “package.opf”. The OPF file contains the book’s metadata (like title, author, publisher, publication date) as well as the “manifest” (a listing of all the files that compose the EPUB) and the “spine” (an ordered list of all the “chapters” or .html/.xhtml files in the book).
Check the version
Find the package tag, which should be near the very top of the file. Inside the package tag, you’ll see a version attribute. In the below example, we have an EPUB 3.
<?xml version="1.0" encoding="utf-8"?>
<package version="3.0" unique-identifier="BookId" prefix="rendition: http://www.idpf.org/vocab/rendition/#" xmlns="http://www.idpf.org/2007/opf">
Now it’s time to Create a page list
Create a page list
The first step, before we start the nitty-gritty of editing, is to create what’s called a “page list”.
A page list is exactly what it sounds like - a list of all the pages (or, “page breaks”) in the book. These pages correspond to pages in the print edition. The page list allows users in mixed print-digital environments, like classrooms and book clubs, to coordinate their reading. It’s a great navigational aid.
Follow the steps below to create a page list in the EPUB.
Check if a page list already exists
Many publishers already include a page list. (Kudos to those publishers!)
If you’re working with an EPUB 2, the page list will be in the NCX file. This is a file with the extension “.ncx”, and is often called “toc.ncx”. It is specific to EPUB 2, although some EPUB 3 books include them for backwards-compatibility.
The NCX file contains all the points in the book to which the user may navigate. It determines what links appear in the main navigation panel of reading systems.
If the EPUB 2 contains a page list, you’ll find it inside a pagelist element in the NCX file, like below.
<pageList>
<navLabel>
<text>Pages</text>
</navLabel>
<pageTarget id="page11" type="normal" value="11">
<navLabel>
<text>11</text>
</navLabel>
<content src="Text/_05_Contents.xhtml#page11"/>
</pageTarget>
<pageTarget id="page12" type="normal" value="12">
<navLabel>
<text>12</text>
</navLabel>
<content src="Text/_05_Contents.xhtml#page12"/>
</pageTarget>
<pageTarget id="page13" type="normal" value="13">
<navLabel>
<text>13</text>
</navLabel>
<content src="Text/_05_Contents.xhtml#page13"/>
</pageTarget>
.
.
</pageList>
If you find a page list here, continue on to Create an EPUB 3
If there’s no page list, then check if page breaks exist.
If you’re working with an EPUB 3, the page list will be found in a XHTML navigation document (hereafter refered to as the NAV file). This file is often named “nav.xhtml” or contains the word “nav” in the filename. Sometimes you’ll see it as “toc.xhtml”. It’s specific to EPUB 3.
Like the NCX in EPUB 2, this file contains all the navigational points in the book, which appear in the main navigation panel of reading systems. Most commonly this includes: Table of Contents, Landmarks, and, a Page List.
If the EPUB 3 contains a page list, you’ll find it inside a pagelist element in the NAV file, like below.

i

ii

iii

iv

v

vi

vii

viii

ix

x

xi

xii

.
.

If you find a page list here, continue on to Create an EPUB 3.
If there’s no page list, then check if page breaks exist.
Check if page breaks exist
Sometimes page breaks exist in the book, but the publisher hasn’t bothered to use them to create a page list (makes you wonder why they put them there in the first place?). In this case, we can make use of those page breaks to generate a page list so that users can easily navigate to page numbers.
In EPUB 2, page breaks are indicated by the a element. The exact formatting of what’s inside the id attribute may vary (i.e. page126, page_126), but is nothing to worry about.

Search the EPUB for this code. If you find page breaks, move on to convert the page breaks into EPUB 3 format.
If the publisher doesn’t provide page breaks, then unfortunately we’re not able to create a page list. Continue on to Create an EPUB 3.
In EPUB 3, page breaks are indicated by the span element with an epub:type=“pagebreak”. Exact formatting may vary slightly. Below are the common ways to code the page breaks in EPUB 3:

31
Search the EPUB for this code. If you find page breaks, you’ll need to create a page list manually.
If the publisher doesn’t provide page breaks, then unfortunately we’re not able to create a page list. Continue on to INSERT PATTERN.
Convert the page breaks into EPUB 3 format
When working with EPUB 2, you need to convert the EPUB 2 page breaks into EPUB 3 page breaks. This is easy to do with some regex (or, “regular expressions”). Regex lets us do a bulk Find and Replace, and will become your editing friend.
In Sigil, go to the Search menu bar and select “Find and Replace”, or simply press Command+F or ⌘+F. A new pane will appear at the bottom of the page. Here you can enter a Find and Replace expression like:
Find:
Replace: \1
Ensure “regex” and “all HTML files” are selected for the Mode. You may need to modify the regex slightly to capture the specific formatting used in the EPUB. It’s always a good idea to test out your regex before you hit “Replace All”. Once it’s working how you want it to, hit “Replace All”, then double check that the page breaks were converted into EPUB 3 page breaks.
Run the PageList plug-in
Now for the magic. Time to run the Pagelist plug-in, and watch it take those page breaks and create a beautiful page list for the EPUB.
To run it, go to Plugins in the menu bar, select Edit and then PageList. If it runs successfully, you’ll receive a message that page number targets were found, and the NCX file was updated.
Open up the NCX file, and, voilà, there’s now a page list!
Time to to Create an EPUB 3.
Create a page list manually
In an EPUB 3, each type of navigation is contained in it’s own nav element with a corresponding epub:type.
You’ll commonly see: Table Of Contents navigation
, Landmarks navigation
, and Page List navigation .
Below is an example page list for a very short book.

i

ii

iii

iv

v

vi

vii

1

2

3

4

5

6

7

8

9

10

- The

element represents a section with navigation links, or links to other pages or parts within the page.
- The
epub:type
attribute is used to identify structures and add additional semantics. In this case, epub:type="page-list"
tells user agents that this is a page list navigation. We’ll delve further into epub:type
semantics later.

stands for “ordered list”. Navigation is always marked as an ordered list.
- The ordered list contains “list items” represented by

tags.
- In this case, each list item is a link

to the corresponding page.
Since we don’t have a plugin yet (if you can create one for us, contact us!) to do the laborious work of converting EPUB 3 page breaks into a page list, we’ll need to do this manually. This means we need to copy and paste page links into the
tags. Remember, we need to specify the location of the pages relative to the folder they’re in. In the above code, that would be a folder called “Text” or ../Text/
. Don’t forget to include the page break id in the link. The id is always prefixed with the number sign, such as <#pagei>
. We also need to pop the page number in between the opening
and closing
tags.
NOTE TO SELF: HIDE PAGE NUMBERS?
Create an EPUB 3
If you’re working with an EPUB 2, there’s now (hopefully) a page list in the NCX file, and we’re ready to upgrade this book to an EPUB 3.
Follow these 3 simple steps to generate an EPUB 3:
- Go to Plugins in the menu bar
- Click on Output
- Click on ePub3-itizer
Success!
Continue to Structure + Semantics.
Introduction
The contents in this section are in no significant order - where you choose to begin is up to you. What’s important is that you check that each of these components are properly marked up in the book.
TALK ABOUT WHY THIS IS IMPORTANT
Our goal is to create a book that uses meaningful HTML markup to indicate page structure and text language. Meaningful HTML markup makes it easier for users of assistive technology to understand the book’s structure and the arrangement of content, which improves navigation.
Remember, HTML is meant to convey meaning, rather than presentation. Semantically meaningful content is reusable and more meaningful to assistive technologies.
Once everything is structured properly, you can move on to Clean up.
Blockquotes
A blockquote represents a section that is quoted from another source. It’s represented by the

element.
Often times, you will see books that use the

or paragraph element, instead of the semantically correct

. This

element is often followed by a class="quote"
attribute, or a similiar class value (we’ll talk more about getting rid of classes later).
Using the

element when a more specific element is appropriate is a violation of the HTML specification.
Go though the book and replace this meaningless “p soup” with

where appropriate.
Examples
Good example
Below is an example of a properly used blockquote element in code:

In the waning days of 1724, Peter spoke to his closest adviser from his deathbed. He outlined his ideas and plans to his attendants and, “concerned that his end was near,” was eager to get the expedition under way. Calling the general-admiral Count Apraxin (Fedor Matveevich) to his bedside, he said:

Bad health has obliged me to remain home. Recently I have been thinking over a matter which has been on my mind for many years but other affairs have prevented me from carrying it out. I have reference to the finding of a passage to China and India through the Arctic Sea. On the map before me there is indicated such a passage bearing the name of Anian. There must be some reason for that. In my last travels I discussed the subject with learned men and they were of opinion that such a passage could be found. Now that the country is in no danger from enemies we should strive to win for her glory along the lines of the Arts and Sciences. In seeking such a passage who knows but perhaps we may be more successful than the Dutch and English who have made many attempts along the American coast.

Reading systems will render the above code similiar to below. Text-to-speech software will often announce “quote” and “end quote” at the start and end of the quotation.
Bad example
Below is a bad example of code that uses class and id attributes (and CSS) to present the text in a particular way. Not only is this extra work, but it makes for meaningless text - as far as the computer knows, it’s just a bunch of paragraphs as opposed to a quotation.
Indigenous people have been accepting new Canadians to their lands ever since. In Richard’s words:

“…so maybe this is what it comes to mean

this word, this name, this Kanata

the Huron word for village that has

come to mean ‘our home’

maybe in the end it’s a word for one fire

burning where a circle of people gathers

to hear the stories that define them”

Below is how the above code renders visually in the book. It’s indented, just like a blockquote, but the blockquote element has more specific semantics.
References
ADD ABOUT USE OF CITE ELEMENT
Bold and italics
Strong vs. Bold. Emphasis vs. Italics. What’s the difference? And what should we do about it?
In HTML5, there are two types of “bold” - represented by the
and the
elements. There also two types of “italics” - represented by the
and the
elements. Each of these elements conveys different information to the reading system. If you’re curious about their uses, you can explore the links in the References.
These four elements are often misused. Determining whether or not these elements have been applied correctly throughout the book is not only a laborious task, but, arguably, it’s a job for the book’s editor and not the book’s remediators. Therefore, we’re not going to worry about fixing up any code related to italics or bolding. We will assume, for better or worse, that the most appropriate markup has been applied.
If the intent is to use emphasis and bolding for purely stylistic reasons, then CSS may be used. You may come across something similiar to the below example where the
element (which doesn’t have any meaning on its own) is used with the class attribute ital
in order to present the text as italicized using CSS. The text that’s wrapped in span tags will be rendered as italicized text in reading systems, but will have no meaning associated with it.

Reading this book will not be like reading the Reader’s Digest, or The Adventures of Tom Sawyer. You cannot read this book casually or breeze through it quickly.

References
Context breaks
A context break is a thematic break, such as, a scene change in a story, or a transition to another topic within a section of a book.
The

, or horizontal rule, element is used to represent a context break. The use of the hr
element to indicate context breaks allows assistive technologies to inform users of this shift in thought, time, location, or similiar.
You may come across all sorts of different, and creative, ways that are used to denote a change in context in a book (see Examples). These ways may be useful cues for visual readers, but for non-visual readers they are meaningless. Only one way - the hr
- is meaningful to assistive technologies.
Go through the book and add in the

element wherever a context break occurs. Note that the hr
element is self-closing.
Examples
Context breaks are represented in books in many ways. Below are just a few examples. You can see more types of context breaks in this article from The Book Designer.
Extra blank space between paragraphs is commonly used to identify a change in context. This is done by using CSS, and you’ll see the guilty class attribute lingering nearby in the code.
In the below example, the paragraph class value bodytext_epspbe
is the offending culprit. If you’re curious, you can search the CSS file to see exactly what’s going on; in this case, the text with this class value has a top margin of 36 pixels.
You can insert a

between the two paragraphs.

They also paid a visit to the security guards at the Intercity mall. One of the guards had torn down a missing persons poster of Jordan that was posted in the mall and thrown it into the trash.

Here’s the thing about the north: Everybody knows everyone else.

Below is how the above code renders in the book:
A sentence within a chapter that begins with drop caps or all caps is usually a sure sign that there’s a break in the continuity of the narrative.
You can insert a

right before that sentence.

To a certain degree, this is normal. Historians are not eyewitnesses—they construct knowledge—others transmit experience.

I HAVE LIVED at Versailles for more than thirty years now and feel I have become a witness. My experience and life depend upon these stones, like ivy clambering up a wall.

The asterism (***) and other such decorative elements are also commonly used for context breaks. In the below example, an em dash is used in combination with CSS styling that adds extra space.
You can replace all the highlighted text below with a simple

element.

In the midst of the world’s largest immigration boom, underway even as Canada achieved nationhood through Confederation, the country not only failed to attract people but provoked millions of its own residents to depart—an enormous missed opportunity from which Canada has not yet recovered.

—

In the wake of the 1837 rebellions, Britain’s Whig government dispatched John Lambton, the Earl of Durham, to investigate what exactly had gone so terribly wrong in the North American colonies.

Below is how the above code renders in the book:
Images, like the previous methods, are a suboptimal way to indicate a context change because they carry no semantic information.
Go ahead and replace these images with the hr
element.
Below is an example of an image used for a decorative context break. Say goodbye to the div
and img
elements and hello to the hr
.

As winter wore on, they endured relentless Arctic winds, waist-deep snow, the ravages of scurvy, and continuous assaults by the feral blue foxes.

The St. Peter was one of two ships commissioned for the Great Northern Expedition (1733–1743), also known as the Second Kamchatka Expedition.

Below is how this code is rendered in the book. You’ll also notice that the sentence after the break begins in small caps, styled using CSS.
References
Images
Landmarks
Lists
If you come across a list of items in a book, you need to check that it’s tagged appropriately so that users can easily navigate through it. The ability to move quickly and effectively through long lists is a key reading need and often overlooked as an accessibility feature.
Sighted readers rarely notice the advantage of being able to quickly skim a list, determine if it’s of any interest and/or selectively read items. Properly tagging lists is a small measure that can greatly decrease user frustration. It allows readers to quickly navigate between items as well as move in and out of lists. It also allows assistive technologies or reading systems to announce the total number of items in the list and the reader’s current position as they navigate through, making it simpler for them to reference the location again should they need.
To facilitate navigation of lists, always tag the items in the set using one of the list elements: the ordered list (ol
element), the unordered list (ul
element), or the definiton list (dl
element). For further explanation of when and how to use each list type, see References.
You’ll often see lists marked up improperly, i.e. using a new paragraph or div tag (

or

) for each item, using a hard line break (

) to separate items, or using similiar styling tricks to make the visual appearance of a list.
Be on the look out for lists that should be real lists, and make sure that they’re marked up with the correct list type element.
Also, keep in mind that list elements must not be used for purely presentational purposes.
Examples
Ordered lists need to be marked up with the

and

elements.
In the below example, the list is surrounded by a meaningless

tag and the list items are marked up using paragraph tags

. The use of CSS styling make the text visually appear like a numbered list (class="num_item
and span class="num"
).
You may also notice that the title of the list (“The Basics”) is within a paragraph tag that is styled to look like the title of the list. Another no-no. We need to tag this as the list header.

RECOMMENDED READING

This section is designed for readers who want to delve deeper into any of the Big Ideas. Under each heading I include a short list of my top picks: books, websites, and online articles that I frequently recommend to people who want to learn more, and that are current as of 2016. Some are written for a lay audience, while others are more academic. They don’t represent an exhaustive list or cover the whole landscape—they’re just my favourites.

THE BASICS

1. For a rigorous overview of the structure, governance, financing and delivery, and quality of Canadian health care, including the Canada Health Act and its implications, see Gregory Marchildon’s 2013 book Health Systems in Transition: Canada, Second Edition, or Katherine Fierlbeck’s 2011 Health Care in Canada: A Citizen’s Guide to Policy and Politics.

2. For a good snapshot of wait times in Canada, the Wait Time Alliance produces reliable reports, which can be found at www.waittimealliance.ca.

3. Other general dimensions of health system performance can be explored using the interactive tools found on the website of the Canadian Institute for Health Information (CIHI), including the user-friendly site http://yourhealthsystem.cihi.ca.

4. Excellent myth-busters on the aging population, private funding for public wait times, user fees, and other health care zombies can be found in the Canadian Foundation for Healthcare Improvement’s Mythbuster series.

The above code is rendered like below:
You need to transform this list into code that is meaningful to machines.

RECOMMENDED READING

This section is designed for readers who want to delve deeper into any of the Big Ideas. Under each heading I include a short list of my top picks: books, websites, and online articles that I frequently recommend to people who want to learn more, and that are current as of 2016. Some are written for a lay audience, while others are more academic. They don’t represent an exhaustive list or cover the whole landscape—they’re just my favourites.

THE BASICS

For a rigorous overview of the structure, governance, financing and delivery, and quality of Canadian health care, including the Canada Health Act and its implications, see Gregory Marchildon’s 2013 book Health Systems in Transition: Canada, Second Edition, or Katherine Fierlbeck’s 2011 Health Care in Canada: A Citizen’s Guide to Policy and Politics.

For a good snapshot of wait times in Canada, the Wait Time Alliance produces reliable reports, which can be found at www.waittimealliance.ca.

Other general dimensions of health system performance can be explored using the interactive tools found on the website of the Canadian Institute for Health Information (CIHI), including the user-friendly site http://yourhealthsystem.cihi.ca.

Excellent myth-busters on the aging population, private funding for public wait times, user fees, and other health care zombies can be found in the Canadian Foundation for Healthcare Improvement’s Mythbuster series.

- Get rid of those

tags. Instead, wrap the list in the ordered list, or

element.
- A header is associated with a list using the
aria-labelledby
attribute. The value of the attribute points to the id of the element that contains the list header. In this case, this is p2
, which identifies the paragraph above that contains the text “The Basics”.
- As you’re turning this block of text into a list, you must also change each of those

tags into list item, or

tags. Since we’ve specified that this is an ordered list, each list item will be automatically numbered and we can remove the manual numbering.
- The

tells us that this is the end of the particular list item.
- The

tells us that this is the end of the ordered list. Always remember to close your tags.
The above code is rendered like below. It looks almost identical to the original, yet it contains underlying meaning that is useful to non-visual readers.
Unordered lists are exactly like ordered lists, except that they’re not ordered or numbered. The actual order of the entries is not critical to understanding. It could be reversed, or even shuffled, and not lose meaning.
Unordered lists need to be marked up with the

and

elements. These elements will be applied in the same manner as for ordered lists above.
Below is an example of an unordered list within a book.

On street safety, the guidebook points out to students that they must always follow these rules:

Learn what traffic signs mean.

Before crossing a street, stop at the curb or the edge of the road and never run into the street.

Look and listen for cars and trucks to the left, then to the right, and then to the left again.

Look confident, walk with your head up as if you know where you are going. The appearance of being lost or being anxious may render you vulnerable to unwanted attention.

The above code renders like below:
A definition list, or

element, is used for name/value lists. These can include dictionaries, glossaries, frequently asked questions and similar.
The definition list

is composed of two parts - a term or

element and its definition/value or

element. Each dt
element is meant to define a unique value. When the definition term or dt
element represents a definition, then also use the <dfn>
or definition element.

<dfn>Colour</dfn>

A sensation which (in humans) derives from the ability of the fine structure of the eye to distinguish three differently filtered analyses of a view.

References
Notes
Notes need to be properly identified in the text as either footnotes or endnotes.
To do this, you’ll need to apply the appropriate epub:type
and aria roles to both the references and their notes.
Since notes are formatted consistently throughout the entire book, this means you can use regex to update all of them at once into the correct format.
EPUB 2 vs EPUB 3 notes
The difference between EPUB 2 and EPUB 3 notes is one of semantics. And, as we know, semantics greatly affects usability.
In EPUB 2, notes are placed inside a simple
or hyperlink element. There’s no way for assistive technology to identify this as a note; it just sees it as more text content. That’s why we need to upgrade these notes to EPUB 3 style.
In EPUB 3, the notes are still within an
element, but have additional semantics added so that technology understands exactly what type of link it is (footnote or endnote) and can handle the information more intelligently. For example, with proper semantics applied, user agents can provide readers with the choice to ignore all notes (so as to not interrupt the reading experience). Some reading systems will also handle them as pop-ups.
Here’s how a typical EPUB 2 reference and its note will look:

The date of this particular papyrus has been placed in the third century, or somewhere between 250 and 300 A.D.1

…
…

1. Bruce Metzger, The Text of the New Testament (Oxford University Press, New York, 1968), p. 38.

You’ll notice that the note reference is just a hyperlink that takes the reader to the note itself. The reference is often surrounded by the
or superscript element for presentational purposes. The note is just text within a paragraph element. The reference and its notes are linked together by the id end001
.
You’ll need to upgrade these EPUB 2 notes to EPUB 3. Here’s how a typical EPUB 3 reference and its note will look:

The date of this particular papyrus has been placed in the third century, or somewhere between 250 and 300 A.D.1

…
…

1. Bruce Metzger, The Text of the New Testament (Oxford University Press, New York, 1968), p. 38.

Notice that the epub:type="noteref"
as well as the aria role="doc-noteref"
are applied to the reference, while the epub:type="endnote"
and the aria role="doc-endnote"
are applied to the note itself. The notes are also presented as list items

- and not separate paragraphs

- for easy navigation.
Examples
Below are some examples of how endnotes, footnotes, and endnote and footnote sections should look after you’ve worked your regex magic.
Here’s what a typical EPUB 2 reference would look like that we need to fix:
…between 250 and 300 A.D.1 …
Here’s how you could use regex to fix all these references at once:
Find:
Replace: <a epub:type="noteref" role="doc-noteref" href="\1"
Basically we’ve left everything in tact except that we’ve added in the epub:type="noteref"
and aria role="doc-noteref"
semantics to all the references. I’ve included the
in the search just in case there are other links in the book, which aren’t notes, that we don’t want to capture and replace.
Notes are often grouped together either at the end of a section or at the end of a book. In both cases, the notes should be presented as a list (as opposed to a bunch of paragraphs). You’ll also need to add the epub:type="endnotes"
to the section
element, and the aria role=doc-endnotes
to the

element. Each endnote should be a list item

and given an epub:type="endnote"
and aria role=doc-endnote
.
You can add in the section and unordered list elements manually, then use regex to update the endnotes.

Reference notes

1. Bruce Metzger, The Text of the New Testament (Oxford University Press, New York, 1968), p. 38.

…
Here’s how you could update all these endnotes in the book:
Find:
(.*)

Replace:
\2

The resulting code will look like:

Reference notes

1. Bruce Metzger, The Text of the New Testament (Oxford University Press, New York, 1968), p. 38.

…

Again, we’ve left everything in tact except that we’ve added in the epub:type="endnote"
and aria role="doc-endnote"
. If these were footnotes, you’d use the epub:type="footnote"
and aria role="doc-footnote"
semantics.
Tip: You’ll want to avoid capturing innocent paragraph text with your regex. Sometimes it helps to carry out the Find and Replace in one file only (especially the case when all the endnotes are in their own xhtml file).
For individual footnotes, or ancillary information like commentary, that occur within the body of the text, you’ll need to wrap the note in an
element and add to it the epub:type="footnote"
and aria role=doc-footnote
semantics. Marking the note as an
ensures that it’s treated as secondary content.

In that year2 there were 67 mills engaged in the manufacture of cotton goods …

…

2 The manufacturing statistics for 1900 which follow are not those given in the Twelfth Census, but are taken from the Census of Manufactures …

References
Page titles
Each xhtml file in a book has a title. This title can be found at the top of the page in the
element.
Meaningful titles allow readers to find and navigate to pages without having to first read them. Assistive technologies typically announce the title of each page when it’s first loaded in a user agent.
It’s commonplace to see just the title of the book in the <title>
element on every xhtml page. But this doesn’t help readers identify where they are in the book. You’ll need to add the title of the page, which can usually be found in the

element on the page or in the Table of Contents. It is often the title of a chapter.
Examples
In the example below, the chapter title, as well as the title of the book, should go inside the <title>
element.
Looking at the h1
, we can see that we’re on the page for chapter fifteen. In Sigil, you can also verify the title of the xhtml page that you’re in by looking at the Table Of Contents pane on the right side (to turn on the TOC pane, press Alt+F3 or go to View > Table of Contents).
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html>

<title>Chapter Fifteen - Run, Hide, Repeat: A Memoir of a Fugitive Childhood</title>
<link href="../Styles/prhStyle.css" rel="stylesheet" type="text/css"/>
<link href="../Styles/prhStyle-media-queries.css" rel="stylesheet" type="text/css"/>
<link href="../Styles/Daki_9780735233232_epub3_css_r1.css" rel="stylesheet" type="text/css"/>
<meta charset="utf-8"/>

FIFTEEN

References
Sections and headings
For readers to be able to follow and understand the content, you need to clearly identify the sections of the book. Clearly grouping and identifying content enables better navigation by anyone reading using an assistive technology. To give the book a meaningful structure, follow the steps below.
Add a section or an aside element
All the primary and secondary sections of a book need to be encapsulated in either a

or an
element, respectively.
Primary sections would include content like the dedication, epigraph, prologue, about the author, and chapters. The primary content establishes the book’s structural hierarchy and is reflected in the Table Of Contents. Secondary content is related to the content of the section, but can be considered separate from it. Sidebars would be secondary content.
A section of a book should be enclosed in an opening

and closing

element. If there is one section per xhtml file, which is common, then this means that the section
will be placed right after the opening
and before the closing
element.

Acknowledgments

Thank you to my wife and children for encouraging me and filling my life with love …

…

In the below code, the sidebar content is marked up with a

element inside a

element and styled using CSS. You’ll need to replace the

with an
element. This retains the structure and semantics as well as the CSS styling.
If no heading is available, one can be supplied in an aria-label
attribute. The aria-label
attribute is read by assistive technology.

Once upon a time …

…

Typically if the book contains parts, you will see the below two approaches to marking them up.
The first approach includes the part heading with the first chapter file:

Part I

Chapter I

The other approach separates the part heading into its own file:

Part I

Add a heading element
Heading elements refer to the six levels of headings in HTML: h1
, h2
, h3
, h4
, h5
, and h6
. The use of heading tags ensures readers don’t have to rely on visual styling to understand and navigate the book.
One heading per section should be used and is placed at the beginning of each section.
In the below code, the chapter heading is displayed as an image within a paragraph element.

Generally I like to assume that it’s not smart to generalize and make assumptions.

You’ll need to fix this by deleting the image and replacing the paragraph element with a heading element.

Chapter 1

Generally I like to assume that it’s not smart to generalize and make assumptions.

Heading elements are not used for subtitles or subheadings as these will appear as subsections to users of assistive technologies. To identify a subtitle, you should apply the epub:type subtitle
and the ARIA role doc-subtitle
to the

element that follows the heading. The two elements are paired inside a header
element for additional clarity.

1. Europe 1930-1935

The Foreshadows of War

…

The aria-label
attribute provides a meaningful title for a section that does not contain a visual heading. The aria-label
will be announced to readers using assistive technology.

Add an ARIA role attribute
The ARIA role attribute provides more precise information about the structure of a book for users of assistive technologies. A single ARIA role attribute should be attached to each section to indicate the specific nature of the content, when applicable.
When the role is not specified, a generic section/subsection nature is assumed based on the nesting level.
View these common examples of how to use the ARIA role attribute on sections.
See the Digital Publishing WAI-ARIA module for a full list of values that can be used with the attribute.
If a book includes the same role multiple times (i.e. multiple chapters, appendixes or indexes in one file), it is best practice to include a label to differentiate them. A label provides context when deciding where to navigate.

Chapter One

…

Add an epub:type attribute
The epub:type attribute was intended to serve a similar function to the ARIA role attribute in EPUB 3. The attribute is still useful and can enhance the user experience even though the accessibility support for it isn’t fully materialized yet.
The epub:type
attribute should be attached to the

element, where needed.
See the EPUB 3 Structural Semantics Vocabulary for a list of values that can be used with the attribute.

SELECT BIBLIOGRAPHY

Library and Archives Canada, Government Records

Identify the cover, frontmatter, bodymatter, and backmatter
There are four epub:type
values, known as “document partitions”, that you need to be sure to identify in the book. These are the cover
, frontmatter
, bodymatter
, and backmatter
. These should be used only once in the book to define the cover, the start of the frontmatter, the start of the bodymatter, and the start of the backmatter.
These sections will be referenced in the Landmarks.
The cover page is usually the first xhtml file in the book and is usually an image of the book cover. You’ll need to identify this point in the book by applying the epub:type="cover"
as well as the ARIA role=doc-cover
to the section
element.

Frontmatter is preliminary material to the main content of a book, such as the table of contents, dedicate, title page, copyright page, acknowledgments, etc.
The frontmatter of the book starts after the cover page. You need to identify the start of this frontmatter by applying the epub:type="frontmatter"
to the appropriate section
element. This section
element may have another attribute or value applied to it.

Also by Doug Saunders

Arrival City

The Myth of the Muslim Tide

Bodymatter is the main content of a book. It includes sections such as a foreword, preface, prologue, introduction, epigraph, chapters, conclusion, etc.
You need to identify the start of this bodymatter by applying the epub:type="bodymatter"
to the appropriate section
element. This section
element may have another attribute or value applied to it.
In the below example, the epub:type="part"
and the ARIA ```role=“doc-part” also identify this section.
<body>
<section epub:type="bodymatter part" role="doc-part">
<h1>Part One: The Minimizing Impulse</h1>
</section>
</body>
Backmatter is ancillary material occurring after the main content of a book, such as an index, appendix, terms of use, etc.
You need to identify the start of this backmatter by applying the epub:type="backmatter"
to the appropriate section
element. This section
element may have another attribute or value applied to it.
In the below example, the epub:type="bibliography"
and the ARIA ```role=“doc-bibliography” also identify this section.

A Note on Sources

…

References
Tables


Meet The Team
|
interesting facts about our specialists.
Home
|
Meet The Team
login
Submit
Style Switcher
Make your website looks beautiful with Style-Switcher!
Predefined Colors
Select Skin Color
Layout Style
Wide
Boxed
Background Image


Using the Converter
This tool converts .tex files to spoken audio .mp3 files. To use it, drag your files into the box above and click convert.
Multiple files can be uploaded at once. If they are part of the same document, they will be automatically combined into one audio file. If not, the app will output multiple audio files, one for each document.
Supported File Types
- .tex files
- .bib files associated with an uploaded .tex file will be included in audio output.
- .zip and .tgz files will be automatically unzipped and their contents will be processed.


Today I want to build a prototype. The idea is to create two Django applications. One application will be the master and the other one will the client. Both applications will have their User model but each change within master User model will be propagated through the client (or clients). Let me show you what I’ve got in my mind:
We’re going to create one signal in User model (at Master) to detect user modifications:
- If certain fields have been changed (for example we’re going to ignore last_login, password and things like that) we’re going to emit a event
- I normally work with AWS, so the event will be a SNS event.
- The idea to have multiple clients, so each client will be listening to one SQS queue. Those SQSs queues will be mapped to the SNS event.
- To decouple the SNS sending og the message we’re going to send it via Celery worker.
- The second application (the Client) will have one listener to the SQS queue.
- Each time the listener have a message it will persists the user information within the client’s User model
- And also it will emit on message to one Django Channel’s consumer to be sent via websockets to the browser.
The Master
We’re going to emit the event each time the User model changes (and also when we create or delete one user). To detect changes we’re going to register on signal in the pre_save to mark if the model has been changed and later in the post_save we’re going to emit the event via Celery worker.
@receiver(pre_save, sender=User)
def pre_user_modified(sender, instance, **kwargs):
instance.is_modified = None
if instance.is_staff is False and instance.id is not None:
modified_user_data = UserSerializer(instance).data
user = User.objects.get(username=modified_user_data['username'])
user_serializer_data = UserSerializer(user).data
if user_serializer_data != modified_user_data:
instance.is_modified = True
@receiver(post_save, sender=User)
def post_user_modified(sender, instance, created, **kwargs):
if instance.is_staff is False:
if created or instance.is_modified:
modified_user_data = UserSerializer(instance).data
user_changed_event.delay(modified_user_data, action=Actions.INSERT if created else Actions.UPDATE)
@receiver(post_delete, sender=User)
def post_user_deleted(sender, instance, **kwargs):
deleted_user_data = UserSerializer(instance).data
user_changed_event.delay(deleted_user_data, action=Actions.DELETE)
We need to register our signals in apps.py
from django.apps import AppConfig
class MasterConfig(AppConfig):
name = 'master'
def ready(self):
from master.signals import pre_user_modified
from master.signals import post_user_modified
from master.signals import post_user_deleted
Our Celery task will send the message to sns queue
@shared_task()
def user_changed_event(body, action):
sns = boto3.client('sns')
message = {
"user": body,
"action": action
}
response = sns.publish(
TargetArn=settings.SNS_REACTIVE_TABLE_ARN,
Message=json.dumps({'default': json.dumps(message)}),
MessageStructure='json'
)
logger.info(response)
AWS
In Aws We need to create one SNS messaging service and one SQS queue linked to this SNS.
The Client
First we need one command to run the listener.
class Actions:
INSERT = 0
UPDATE = 1
DELETE = 2
switch_actions = {
Actions.INSERT: insert_user,
Actions.UPDATE: update_user,
Actions.DELETE: delete_user,
}
class Command(BaseCommand):
help = 'sqs listener'
def handle(self, *args, **options):
self.stdout.write(self.style.WARNING("starting listener"))
sqs = boto3.client('sqs')
queue_url = settings.SQS_REACTIVE_TABLES
def process_message(message):
decoded_body = json.loads(message['Body'])
data = json.loads(decoded_body['Message'])
switch_actions.get(data['action'])(
data=data['user'],
timestamp=message['Attributes']['SentTimestamp']
)
notify_to_user(data['user'])
sqs.delete_message(
QueueUrl=queue_url,
ReceiptHandle=message['ReceiptHandle'])
def loop():
response = sqs.receive_message(
QueueUrl=queue_url,
AttributeNames=[
'SentTimestamp'
],
MaxNumberOfMessages=10,
MessageAttributeNames=[
'All'
],
WaitTimeSeconds=20
)
if 'Messages' in response:
messages = [message for message in response['Messages'] if 'Body' in message]
[process_message(message) for message in messages]
try:
while True:
loop()
except KeyboardInterrupt:
sys.exit(0)
Here we persists the model in Client’s database
def insert_user(data, timestamp):
username = data['username']
serialized_user = UserSerializer(data=data)
serialized_user.create(validated_data=data)
logging.info(f"user: {username} created at {timestamp}")
def update_user(data, timestamp):
username = data['username']
try:
user = User.objects.get(username=data['username'])
serialized_user = UserSerializer(user)
serialized_user.update(user, data)
logging.info(f"user: {username} updated at {timestamp}")
except User.DoesNotExist:
logging.info(f"user: {username} don't exits. Creating ...")
insert_user(data, timestamp)
def delete_user(data, timestamp):
username = data['username']
try:
user = User.objects.get(username=username)
user.delete()
logging.info(f"user: {username} deleted at {timestamp}")
except User.DoesNotExist:
logging.info(f"user: {username} don't exits. Don't deleted")
And also emit one message to channel’s consumer
def notify_to_user(user):
username = user['username']
serialized_user = UserSerializer(user)
emit_message_to_user(
message=serialized_user.data,
username=username, )
Here the Consumer:
class WsConsumer(AsyncWebsocketConsumer):
@personal_consumer
async def connect(self):
await self.channel_layer.group_add(
self._get_personal_room(),
self.channel_name
)
@private_consumer_event
async def emit_message(self, event):
message = event['message']
await self.send(text_data=json.dumps(message))
def _get_personal_room(self):
username = self.scope['user'].username
return self.get_room_name(username)
@staticmethod
def get_room_name(room):
return f"{'ws_room'}_{room}"
def emit_message_to_user(message, username):
group = WsConsumer.get_room_name(username)
channel_layer = get_channel_layer()
async_to_sync(channel_layer.group_send)(group, {
'type': WsConsumer.emit_message.__name__,
'message': message
})
Our consumer will only allow to connect only if the user is authenticated. That’s because I like Django Channels. This kind of thing are really simple to to (I’ve done similar things using PHP applications connected to a socket.io server and it was a nightmare). I’ve created a couple of decorators to ensure authentication in the consumer.
def personal_consumer(func):
@wraps(func)
async def wrapper_decorator(*args, **kwargs):
self = args[0]
async def accept():
value = await func(*args, **kwargs)
await self.accept()
return value
if self.scope['user'].is_authenticated:
username = self.scope['user'].username
room_name = self.scope['url_route']['kwargs']['username']
if username == room_name:
return await accept()
await self.close()
return wrapper_decorator
def private_consumer_event(func):
@wraps(func)
async def wrapper_decorator(*args, **kwargs):
self = args[0]
if self.scope['user'].is_authenticated:
return await func(*args, **kwargs)
return wrapper_decorator
That’s the websocket route
from django.urls import re_path
from client import consumers
websocket_urlpatterns = [
re_path(r'ws/(?P<username>\w+)$', consumers.WsConsumer),
]
Finally we only need to connect our HTML page to the websocket
<script>
var ws_scheme = window.location.protocol === "https:" ? "wss" : "ws"
var ws_path = ws_scheme + '://' + window.location.host + "/ws/"
var ws = new ReconnectingWebSocket(ws_path)
var render = function (key, value) {
document.querySelector(`#${key}`).innerHTML = value
}
ws.onmessage = function (e) {
const data = JSON.parse(e.data);
render('name', data.first_name)
}
ws.onopen = function () {
console.log('Connected')
};
</script>
Here a docker-compose with the project:
version: '3.4'
services:
redis:
image: redis
master:
image: reactive_master:latest
command: python manage.py runserver <IP_ADDRESS>:8001
build:
context: ./master
dockerfile: Dockerfile
depends_on:
- "redis"
ports:
- 8001:8001
environment:
REDIS_HOST: redis
celery:
image: reactive_master:latest
command: celery -A master worker --uid=nobody --gid=nogroup
depends_on:
- "redis"
- "master"
environment:
REDIS_HOST: redis
SNS_REACTIVE_TABLE_ARN: ${SNS_REACTIVE_TABLE_ARN}
AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
client:
image: reactive_client:latest
command: python manage.py runserver <IP_ADDRESS>:8000
build:
context: ./client
dockerfile: Dockerfile
depends_on:
- "redis"
ports:
- 8000:8000
environment:
REDIS_HOST: redis
listener:
image: reactive_client:latest
command: python manage.py listener
build:
context: ./client
dockerfile: Dockerfile
depends_on:
- "redis"
environment:
REDIS_HOST: redis
SQS_REACTIVE_TABLES: ${SQS_REACTIVE_TABLES}
AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION}
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
And that’s all. Here a working example of the prototype in action:
Source code in my github.


|
Find 15,000 gay, lesbian, bisexual, transgender   |

Over 15,000 resources for the gay, lesbian, bisexual, transgender and questioning community nationwide.
OR
If you need peer-support or want to speak directly with one of our volunteers, you can call our toll-free hotline at
888-843-4564
Our youth talk line can be reached toll-free at
800-246-PRIDE
800-246-7743
www.GLBThotline.org


WITNESS LIST State Affairs Committee May 11, 2001 -11:30A HB 1168 Registering, but not testifying: For: Strong, George (Self), Houston, TX Woodford, Suzy (Common Cause Texas), Austin, TX HB 1203 FOR: Braus, Nancy (Self/Parents & Families of Students of the 1999 TATMU Bonfire Collapse), Hallettsville, TX HB 2008 Registering, but not testifying: For: Smith, Tom "Smitty" (Public Citizen), Austin, TX Sprinkle, G.K. (American Lung Association), Austin, TX HB 2119 Registering, but not testifying: On: Atkins, Billy (Charitable Bingo Division, Texas Lottery Commission), Austin, TX HB 2124 Registering, but not testifying: For: Findeisen, Les (Texas Motor Transportation Association), Austin, TX On: Berasley, Ann (Comptroller's Office), Austin, TX HB 2492 Registering, but not testifying: On: Bloom, Ed (Texas Incentive & Productivity Commission), Austin, TX HB 2504 Registering, but not testifying: For: Woodford, Suzy (Common Cause Texas), Austin, TX On: Lundquist, Karen (Texas Ethics Commission), Austin, TX HB 2839 Registering, but not testifying: For: Smith, Tom "Smitty" (Public Citizen), Austin, TX HB 2921 Registering, but not testifying: For: Woodford, Suzy (Common Cause Texas), Austin, TX HB 3071 Registering, but not testifying: Against: Bandy, Bill (Self/Texas State Inspectors), Plano, TX On: Summerford, E. Eugene (Department of Public Safety), Austin, TX


@(reg: String, readings: Vector[Reading], summaries: Seq[VehicleRecordSummary])
@main(Some(reg)) {
@reg
Figures logged at each re-fuelling of vehicle @reg
@for( reading @ Reading(r, d, m, t, l, c) <- readings) {
- @d - @l litres
@m miles (@t total) cost: £@c
AvgC = @reading.avgC l/100km, 1 litre<EMAIL_ADDRESS>}
@linksSideBar(summaries)
}


This example starts up a file system to store persistent storage on the hard drive (for saving sims)
The file is stored at C:\Users\USERNAME\AppData\Local\Google\Chrome\User Data\Default\File System
Click here to test file system (see console for output)
Click here to set up file system (see console for output)


- saveState() - Method in class feup.lpoo.reversi.model.GameModel
-
Generates a game state to be saved to the game care taker
- scopeUris - Static variable in class feup.lpoo.reversi.R.attr
-
May be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- score1 - Variable in class feup.lpoo.reversi.view.GameStage
-
- score2 - Variable in class feup.lpoo.reversi.view.GameStage
-
- screenAction() - Method in class feup.lpoo.reversi.presenter.GamePresenter
-
Performs an action according to the on-screen visible button
- screenAction() - Method in class feup.lpoo.reversi.presenter.LocalMultiplayerGamePresenter
-
Calls the game model to undo the last move played
- screenAction() - Method in class feup.lpoo.reversi.presenter.OnlineMultiplayerGamePresenter
-
Submits a game turn to the server
- screenAction() - Method in class feup.lpoo.reversi.presenter.SinglePlayerGamePresenter
-
Calls the game model to undo the last 2 moves
- search_badge - Static variable in class feup.lpoo.reversi.R.id
-
- search_bar - Static variable in class feup.lpoo.reversi.R.id
-
- search_button - Static variable in class feup.lpoo.reversi.R.id
-
- search_close_btn - Static variable in class feup.lpoo.reversi.R.id
-
- search_edit_frame - Static variable in class feup.lpoo.reversi.R.id
-
- search_go_btn - Static variable in class feup.lpoo.reversi.R.id
-
- search_mag_icon - Static variable in class feup.lpoo.reversi.R.id
-
- search_plate - Static variable in class feup.lpoo.reversi.R.id
-
- search_src_text - Static variable in class feup.lpoo.reversi.R.id
-
- search_voice_btn - Static variable in class feup.lpoo.reversi.R.id
-
- searchDropdownBackground - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchResultListItemHeight - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a dimension value, which is a floating point number appended with a unit such as "14.5sp
".
- SearchView - Static variable in class feup.lpoo.reversi.R.styleable
-
Attributes that can be used with a SearchView.
- SearchView_android_imeOptions - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#imeOptions
attribute's value can be found in the
R.styleable.SearchView
array.
- SearchView_android_inputType - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#inputType
attribute's value can be found in the
R.styleable.SearchView
array.
- SearchView_android_maxWidth - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#maxWidth
attribute's value can be found in the
R.styleable.SearchView
array.
- SearchView_iconifiedByDefault - Static variable in class feup.lpoo.reversi.R.styleable
-
- SearchView_queryHint - Static variable in class feup.lpoo.reversi.R.styleable
-
- searchViewAutoCompleteTextView - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewCloseIcon - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewEditQuery - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewEditQueryBackground - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewGoIcon - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewSearchIcon - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewTextField - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewTextFieldRight - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- searchViewVoiceIcon - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- SECONDARY_COLOR - Static variable in class feup.lpoo.reversi.Reversi
-
- selectableItemBackground - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- setActive(boolean) - Method in class feup.lpoo.reversi.model.PlayerModel
-
Setter for the active status
- setBoard(char[][]) - Method in class feup.lpoo.reversi.model.BoardModel
-
Setter for the game board
- setGame(GameModel) - Method in class feup.lpoo.reversi.presenter.ai.AIPresenter
-
Sets the game which stores the board to be possibly used by the AI algorithm
- setMove(MoveModel) - Method in class feup.lpoo.reversi.model.PlayerModel
-
Setter for the player's next move
- setOnlineMatchScreen() - Method in class feup.lpoo.reversi.Reversi
-
- setPieceAt(int, int, char) - Method in class feup.lpoo.reversi.model.BoardModel
-
Places a piece in the game board
- setPoints(int) - Method in class feup.lpoo.reversi.model.PlayerModel
-
Setter for the player's point
- setPreviousState(GameMemento) - Method in class feup.lpoo.reversi.model.GameModel
-
Sets a previous game state as the current one
- setReady() - Method in class feup.lpoo.reversi.model.PlayerModel
-
Setter for the ready status, makes it evaluate to true until further update
- setSuggestions(ArrayList<MoveModel>) - Method in class feup.lpoo.reversi.model.BoardModel
-
Setter for the suggestions (valid moves) board
- shortcut - Static variable in class feup.lpoo.reversi.R.id
-
- showAchievements() - Method in class feup.lpoo.reversi.AndroidLauncher
-
- showAchievements() - Method in interface feup.lpoo.reversi.PlayServices
-
Shows the user's achievements board, if logged in
- showAsAction - Static variable in class feup.lpoo.reversi.R.attr
-
Must be one or more (separated by '|') of the following constant values.
- showCustom - Static variable in class feup.lpoo.reversi.R.id
-
- showDividers - Static variable in class feup.lpoo.reversi.R.attr
-
Must be one or more (separated by '|') of the following constant values.
- showErrorMessage(TurnBasedMatch, int, int) - Method in class feup.lpoo.reversi.AndroidLauncher
-
- showHome - Static variable in class feup.lpoo.reversi.R.id
-
- showTitle - Static variable in class feup.lpoo.reversi.R.id
-
- showWarning(String, String) - Method in class feup.lpoo.reversi.AndroidLauncher
-
- sign_in_failed - Static variable in class feup.lpoo.reversi.R.string
-
- sign_in_other_error - Static variable in class feup.lpoo.reversi.R.string
-
- signIn() - Method in class feup.lpoo.reversi.AndroidLauncher
-
- signIn() - Method in interface feup.lpoo.reversi.PlayServices
-
Logs in if not signed already
- SignInButton - Static variable in class feup.lpoo.reversi.R.styleable
-
Attributes that can be used with a SignInButton.
- SignInButton_buttonSize - Static variable in class feup.lpoo.reversi.R.styleable
-
- SignInButton_colorScheme - Static variable in class feup.lpoo.reversi.R.styleable
-
- SignInButton_scopeUris - Static variable in class feup.lpoo.reversi.R.styleable
-
- signOut() - Method in class feup.lpoo.reversi.AndroidLauncher
-
- signOut() - Method in interface feup.lpoo.reversi.PlayServices
-
Logs in if not signed already
- SinglePlayerGamePresenter - Class in feup.lpoo.reversi.presenter
-
Game presenter used during offline game-play against an AI player
- SinglePlayerGamePresenter(Reversi, AIMoveStrategy, boolean) - Constructor for class feup.lpoo.reversi.presenter.SinglePlayerGamePresenter
-
Constructor, initializes all fields
- Spinner - Static variable in class feup.lpoo.reversi.R.styleable
-
Attributes that can be used with a Spinner.
- Spinner_android_dropDownHorizontalOffset - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#dropDownHorizontalOffset
attribute's value can be found in the
R.styleable.Spinner
array.
- Spinner_android_dropDownSelector - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#dropDownSelector
attribute's value can be found in the
R.styleable.Spinner
array.
- Spinner_android_dropDownVerticalOffset - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#dropDownVerticalOffset
attribute's value can be found in the
R.styleable.Spinner
array.
- Spinner_android_dropDownWidth - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#dropDownWidth
attribute's value can be found in the
R.styleable.Spinner
array.
- Spinner_android_gravity - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#gravity
attribute's value can be found in the
R.styleable.Spinner
array.
- Spinner_android_popupBackground - Static variable in class feup.lpoo.reversi.R.styleable
-
This symbol is the offset where the
android.R.attr#popupBackground
attribute's value can be found in the
R.styleable.Spinner
array.
- Spinner_disableChildrenWhenDisabled - Static variable in class feup.lpoo.reversi.R.styleable
-
- Spinner_popupPromptView - Static variable in class feup.lpoo.reversi.R.styleable
-
- Spinner_prompt - Static variable in class feup.lpoo.reversi.R.styleable
-
- Spinner_spinnerMode - Static variable in class feup.lpoo.reversi.R.styleable
-
- spinnerDropDownItemStyle - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- spinnerMode - Static variable in class feup.lpoo.reversi.R.attr
-
Must be one of the following constant values.
- spinnerStyle - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- split_action_bar - Static variable in class feup.lpoo.reversi.R.id
-
- standard - Static variable in class feup.lpoo.reversi.R.id
-
- startMatch(TurnBasedMatch) - Method in class feup.lpoo.reversi.AndroidLauncher
-
- status_multiplayer_error_not_trusted_tester - Static variable in class feup.lpoo.reversi.R.string
-
- string() - Constructor for class feup.lpoo.reversi.R.string
-
- style() - Constructor for class feup.lpoo.reversi.R.style
-
- styleable() - Constructor for class feup.lpoo.reversi.R.styleable
-
- submit_area - Static variable in class feup.lpoo.reversi.R.id
-
- subtitle - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a string value, using '\\;' to escape characters such as '\\n' or '\\uxxxx' for a unicode character.
- subtitleTextStyle - Static variable in class feup.lpoo.reversi.R.attr
-
Must be a reference to another resource, in the form "@[+][package:]type:name
"
or to a theme attribute in the form "?[package:][type:]name
".
- support_simple_spinner_dropdown_item - Static variable in class feup.lpoo.reversi.R.layout
-
- switchPlayers() - Method in class feup.lpoo.reversi.GameModelWrapper
-


About_Me
hello , my name is Yazan Alkarabsheh from salt city , I graduated from the university of Jordan in 2017 and holding a degree in electrical engineering , I worked in the past years as electrical Technician also I had hoppy in a lot of things such as technology , painting and farming . I have an interest in programming since the first material we took about c++ at our university.So I will move forward in this field of work.
Top 10 Best Places to Visit in Jordan
- Petra
- Jerash
- Wadi Rum
- Dead Sea
- Aqaba
- Dana Nature Reserve
- Ajloun Castle
- Shobak
- Mujib Nature Reserve
- Karak Castle
Work experience and education summary
- All albuqea secondary school for boys
- University of Jordan, Amman, Jordan Electrical Engineering Bachelor degree in the Electrical Engineering
- NEPCO Trainee
- Muhammad abu Eaid for electrical wiring Electrical technician
- International Engineering House Electrical technician assistant
- ASAC-LTUC software devloper trainee


Die Angaben "7I", "KB", etc. sind Pseudonyme für Diskussionsteilnehmer.
Object-Oriented Programming vs. Template Programming (3:52)
- 7I: Polymorphismus okay
- 7I: understandable because of performance reasons
- 7I: main issue: "SeqAn is not like the Standard Template Library" (5:07)
- 7I: containers, …, …, "You expect to have all these member functions that you're familiar with"
- 7I: Iterators also members
- 7I: Modification of iterators in very intuitive
- 7I: "SeqAn is a completely different way of doing mostly the same thing" (5:41)
- 7I: example: “length has to know all these containers”, "unclear to me why this is necessary" (6:01)
- “that’s my main point (problem)”
- 7I: "If SeqAn … had the same way of doing things like the STL then the first day of the tutorials would be unnecessary". (6:29)
- “you don’t have to learn all the iterators and stuff again"
- 7I: STL is templatized (“main issue”, “expected to have all these member functions”, “takes some time to learn") - so no big deal (example: Vector)
-
- research: STL consistency konnte nur mit Gruppendiskussion ermittelt werden
- KB: “not clear why you have to go through all this pain”, "would be nice to see benchmarks to be more motivated" (7:29)
- 7I: Where is the performance improvement? … (me) You save one lookup. … "There are ways of saving that lookup. (8:05)
- 7I: "There are better ways to use the polymorphism" (8:24)
- 7I: "There are ways of avoiding the lookup”, “a templatized way" (8:34)
- 7I: "I think the basic idea is to get most of the code inlineable"
- 7I: never had to use virtual functions - there is a polymorphistic alternative
- AL: "Also a little bit of inconsequent" (9:47)
- AL: example: "profile char has members like count"
- AL: “I’m missing auto-completion” (10:22)
- AL: “I just put the dot and the IDE shows me the available functions”
- (me) How did you deal with the problem of non-working auto-completion? (11:00)
- AL: “if you know the function name you have an idea of how its written […] but often it does not work so I have to check the documentation"
- AL: functions are camel-cased + if you know parts of the function name you can look them up
- AL: would be still easier if there was auto-completion
- AL: "It's just a little thing but it would be nice" (11:34)
- KB: Difficult since auto-completion only works on already written objects. If you start with the function name the IDE can't tell you on what objects you want to apply the function on
- KB: I use auto-completion in a much more basic way… (12:15) In vi - auto-complete based on the buffer. It basically names all the available functions
- “I use an IDE that has a buffer for auto-completion” (Strategie)
- KB: "Even if you find the global function by name you have always the insurance if it's actually applicable”, "“even if you find the function by its [guessed] name you can’t be sure if it’s the right function” (or it is belongs to a different object) (12:54)
- AL: StringSets - different types of StringSets with the Tags (Something should propose those tags)
- problem - how can the IDE know possible tags - template programming is only resolved at compile time
-
- possible solution: enrich the documentation to allow this kind of auto-completion
- vi and other programs have plugins to allow this functionality (14:06)
-
- but: not optimised for template programming but optimizable
- (me): do the other ones have problems?
- no, since the tutorials were easy enough (zeigt Notwendigkeit von Langzeit-Beobachtung)
-
- no need for auto-complete since they already knew the function names
- (me) What would you do if there was the need to find out function names? (14:55)
- Would use the online documentation.
- Others: depends on the way you work. if used to auto-completion you would still expect it to work.
- (me) Who comes from the object-oriented world? (15:15)
-
- around half of the people
- ----------------------------------------------------------
- 7I am Whiteboard: (59:20)
-
- BIG QUESTION: With 7I's propositions, what would be the performance penalty?
-
Why not STL-like but completely new language?
Operator Overloading - incomplete? unclear? inconsistent?
(16:20)
What are your expectations?
- (me) What made me crazy is assignments to functions (a[b] = c)
- (me) Who had problems with it (17:02:)
- no one - next topic
- 7I: “it’s re-inventing the bracket operator" (17:17)
- KB: "to make things more funny there are places in SeqAn where the subscript operator returns values and not references" (17:27)
- 7I: "It's this inconstancy that make it hard" - (example: not only return typed but also the existence of overloaded operators; different then you would expect) (17:40)
- 7I: small summary: You don't know when there is the bracket operator and if you can assign to it. (18:04)
- 7I: sometimes it returns a copy instead of a reference "and you would expect to have a reference" (18:17)
- question: Is this the normal way of doing things is SeqAn. I though I should use the assign-function (18:27)
- (me) What is the recommended way? Using the assign-Operator or -function?
-
- RR: It's hard to say because [… mehrfache Untebrechung …] is you have a container and you change a value of the container and this container doesn't know how the value is changed […] so the assign function would be a possibility for us that the container also recognises that one element of the container has changed and can act according to this." (end: 19:54)
- RR: There are dependencies between the elements and their container.
- AL: Wouldn't it be possible to remove the overloaded operator and just keep the assign function as the only possibility. Although it's not nice it's consistent (20:45)
Can you read compiler errors? (21:30)
- got some compilers errors. tried to guess what it wants. couldn't understand them.
- solution: simple backtracking - what did I change the last time
- KB: only used information is the line of code
- a few people agreed that it's hard to read the compiler errors
- AL: "hard when the compiler tells you that the error is in some SeqAn file but not because you made a mistake but because we assigned at the value behind the last one" (22:50)
-
- “it’s kind of annoying that it doesn't even tell you the line" (CAN BE CORRECTED, YEAH! see below)
- KB: occurs when SeqAn assertions fail - happens at runtime
-
- you have to use a debugger in this case (24:46)
- RR: There is a printed stack trace. (QUESTION: REALLY?)
- (me) Do the error messages give you a clue on how to fix the problems?
-
- KB: You associate over the time some patterns with errors (24:47)
- AL: errors concerning missing semicolons, includes or brackets can be read easily - but these are the easy mistakes
Online-Documentation
not explicitly discussed
Degree of Detail
not explicitly discussed
Consistency
not explicitly discussed
Missing Information (e.g. RNA-Seq / FragmentStore) (25:25)
- "not comparable to the Java API"
- (me) What are you missing
- AL: "auto-completing is missing"
- AL: "members of the objects are not listed"
- 7I: "all the functions that act on a class you don't know what they are" (26:25) (WICHTIG)
-
- it's the idea behind the members - that they belong to a class and you know what you can do with them
- you can't tell which global functions act on a class
- in the documentation there is this kind of information (27:07)
-
- example: String, you have length listed there
- other: "I think it's extremely incomplete" (27:17)
- KB: "No no no, I don't think so" (27:19)
- AL: "Maybe to complete", also functions applying to arguments are also listed
- KB: If you think of the Java API documentation you have these lists of functions (28:15)
- KB: Return values missing, (28:23)
- KB: If there information not always true since there are different signatures with different return types. “functions have different return typed”, “some of them are merged although they should be displayed separately"
- other: agrees, functions with same name can act very differently but in the SeqAn documentation they are all merged into one (29:07) (WICHTIG)
-
- "Would be easier if you just had two pages [instead of a merged one]" (29:22)
- AL: I want the signature at the top of the page and not in the middle (especially the return type)
-
- not: length(…) … … … void
- but: void length(…) (WICHTIG)
Shape, Hash, Index Relation (Documentation not detailed enough) (29:58)
- AL: Problem occurred in the index tutorial
-
- constructed an index
- with a shape
- called hash function with the shape and the string (the pattern)
- the resulting hash value is stored in the shape which I thought was confusing
- because the shape is like a tag for me
- [nicht verstanden] (31:44)
- the hash value should be stored in another object
- then I call the find function
- you're current find function just uses the index and the shape
- but find with an index and a shape just in the logic wouldn't work because you don't have the pattern which you are looking up (should also be passed to the function)
- (me) the needed argument is a member of a given argument
- AL agrees: the hash value that is needed for finding is stored in the shape as a member function (sic!)
- “I think the hash value does not belong to the shape"
- also few mistakes in the documentation of the hash-function where it was not mentioned that the hash value is saved in the shape, also did not list the member of the stored hash value
-
- (WICHTIG, URSACHE: Fehlende Software Engineering Kenntnisse?)
- other:
-
- big difference between what you want to do and what you have to do (in order to achieve what you actually want to do)
- the problem was to find some q-grams in the string
- … (34:10)
- but basically it was finding occurrences of a certain q-gram
- personally: no relation between of how I had to do it
- it would have been nicer to call the find function from the q-gram index
- instead of calling the hash function
- "It wasn't that straight forward as you would have it expected." (34:46)
- "In other cases it's really straight forward in SeqAn" (34:58)
- "But in this case it was artificially complicated" (35:03)
- (me) summary: technical aspects that could just have been hidden from you
-
Why Iterators instead of count loops?
Why StringSets instead of String<String>? (35:20)
- KB: [The latter] is not even true since in some tutorials we use String of Strings (in tutorial RNA-Seq)
- AL: "I just don't see the difference between StringSet and String of Strings”, “maybe there is a difference in performance" (37:03)
- "I think it's easier if you have in mind the structure of your types have" (37:19)
- KB: StringSet is more than a String of Strings, right? (SYNONYMFEINDLICHKEIT?)
- Other: You can pass arguments to the StringSet like ConcatDirect where you have different storage options (much more flexibility, you can do more things with StringSet that String<String>) (THEN WHY NOT: String<String, ConcatDirect > >
- (me) Did you read the documentation?
- AL: I opened the documentation of StringSet and there were some options. "I just didn't get the usage of StringSets" (38:20) "What you could do with StringSets you could also have done with String of Strings"
- (me) What about Shortcuts? Useful?
- Peptide for String<AminoAcid?>
-
- KB: "That's exactly what I don't find consistent" (38:47)
-
- "That a biological term mixed up with computer science terms" (38:58) (MISCHUNG TECHNISCHES UND DOMÄNEN-SPEZIFISCHES VOKABULAR)
- A string of chars is a CharString and a string of DNA5 is a DNA5String (WICHTIG)
- "That would be consistent" (39:10) (KONSISTENZ WIRD MEHRFACH VERWENDET)
- Should be AminoAcidString, "as ugly as it sounds you cannot just call it Peptide" (39:19)
- AL: "I don't like Shortcuts"
- (me) Would you prefer domain-specific or technical.
-
- 7I: "no no no no" (when I was saying domain-specific like Peptide)
- 7I: "If you look up Shortcuts: 'Oh it's just that!'" (40:15)
- Why would you need to have shortcuts if you had to look them all up
- “everyone you needs a shortcut would just define his own typedefs” (Strategie)
- GM: "It's just stupid”, “what’s the difference. it’s just a string array"
- survey:
-
- no predefined typedefs at all: 5/12 (user prefer to define their own)
- generic (technical): 4(?)
- domain-specific: 0
- 7I: If you read Peptide it makes you think that it's more than a shortcut.
Naming Conventions (e.g. Iterators) (43:12)
- AL: If you have a metafunction and this double colon and a type or value behind. Sometimes it's "Value", sometimes "VALUE". Is there a difference?
- RR: explains the difference (VALUE: static const variables, like if you have this typical metafunction that gives you the value of how many bits are used; Value: otherwise if it’s a real function)
- There should be an explanation in the tutorials (44:45)
- Best location for this information: "Where you first mention metafunctions"
- People found the link in the First Steps Tutorial but couldn't find the naming conventions there (WICHTIG) (45:39)
No Integrity/Sanity Check While Reading DNA(5) (MSA) (45:51)
- Can't detect errors in reads
- (me) Does it cause problems (45:42)
- 7I: yes, (46:42)
- "You wanna know if something is wrong."
- How do you know something is not okay?
- Typos can occur in DNA strings (47:46)
- Analyse is consequently erroneous
- Fixing the problem can take a long time until you figured out that you had a typo (48:06)
- Error expected, or exception, it aborts or a warning
- 7I: "If you want automated conversion then they shouldn't be default." (48:32)
- further support by 7I “by default you check everything"
- further support by GM “posed a lot of problems just because of a small mistake” (49:20)
- survey "Do you want to have the option of a sanity check"
-
- virtually all
- JS: Down-side runtime “you have to pay a price for that”- “performance"
- 7I: Yes it takes time but the time you need to find the bug in further phases is much higher (51:28)
- 7I: If you know your data is sane - that's why you need this option.
- solution: make it part of the DNAString
- strong support by GM and AL (52:36) “just make it an X!"
- “I experienced this problem my own"
- technical details on solution (till 55:20) - Zeigt, wie SeqAn-Entwickler denken: anstatt die Anforderung zu verstehen, wird Argument, weshalb SeqAn sich so verhält, wie es sich verhält. “technisches Wegargumentieren"
- (me) Does everyone know that an automated conversion occurs?
- no clear answer
- RR: “we don’t have a real one time check" (56:38 - 58:00)
- BL: something about error messages, making them easier to read ??? (- 58:40)
- RR: Concept checking available in C++11, already in progress (QUESTION: FOR WHAT?)
-
- “that can check return types"
Lose Mitschriften von Beobachtern
Template Programming vs. OOP
- JS
-
- Templates kein Problem
- global functions interface problematisch
- kein OOP
- keine Code-Vervollständigkeit
- Birte
-
- bei OOP sieht man die zur Verfügung stehenden Methoden
- RR
-
- CTAGS/vim kann man verwenden -> Alle existierenden und zuletzt verwendete Funktionsnahmen und Variablen werden vervollständigt
Why not STL-like but a complete new language?
- Birte
-
- nutzt templates wie STL, ist aber vollkommen anders entworfen
- Benmarks besser sichtbar - erhöht Einsicht, einer anderen Sprache
- RR
-
- Function lookup vermeidbar und trotzdem OOP
- Björn
-
- SeqAn so schwer wie STL selbst zu erlernen
- David
-
- Hilfe, wie man von STL nach OOP kommt
- Manuel
-
- inlining funktioniert nicht immer
- unterschiedliche Adressierung der verschiedenen Nutzergruppen (Anfänger, Java- u. C++-Experten)
Operator-overloading - inconsistent
- value(x) = y
- subscript-Operator gibt manchmal aber nicht immer eine Referenz zurück
- Warum gibt es assign, wenn es = gibt?
- Manchmal muss man assign statt = verwenden.


class UART – duplex serial communication bus¶
UART implements the standard UART/USART duplex serial communications protocol. At the physical level it consists of 2 lines: RX and TX. The unit of communication is a character (not to be confused with a string character) which can be 8 or 9 bits wide.
UART objects can be created and initialised using:
from machine import UART
uart = UART(3, 9600) # init with given baudrate
uart.init(9600, bits=8, parity=None, stop=1) # init with given parameters
Bits can be 7, 8 or 9. Stop can be 1 or 2. With parity=None, only 8 and 9 bits are supported. With parity enabled, only 7 and 8 bits are supported.
A UART object acts like a stream object and reading and writing is done using the standard stream methods:
uart.read(10) # read 10 characters, returns a bytes object
uart.read() # read all available characters
uart.readline() # read a line
uart.readinto(buf) # read and store into the given buffer
uart.write('abc') # write the 3 characters
Constructors¶
- class machine.UART(id, ...)¶
Construct a UART object of the given id.
Methods¶
- UART.init(baudrate=9600, bits=8, parity=None, stop=1, \*, ...)¶
Initialise the UART bus with the given parameters:
baudrate is the clock rate.
bits is the number of bits per character, 7, 8 or 9.
parity is the parity,
None
, 0 (even) or 1 (odd).stop is the number of stop bits, 1 or 2.
Additional keyword-only parameters that may be supported by a port are:
tx specifies the TX pin to use.
rx specifies the RX pin to use.
rts specifies the RTS (output) pin to use for hardware receive flow control.
cts specifies the CTS (input) pin to use for hardware transmit flow control.
txbuf specifies the length in characters of the TX buffer.
rxbuf specifies the length in characters of the RX buffer.
timeout specifies the time to wait for the first character (in ms).
timeout_char specifies the time to wait between characters (in ms).
invert specifies which lines to invert.
0
will not invert lines (idle state of both lines is logic high).UART.INV_TX
will invert TX line (idle state of TX line now logic low).UART.INV_RX
will invert RX line (idle state of RX line now logic low).UART.INV_TX | UART.INV_RX
will invert both lines (idle state at logic low).
flow specifies which hardware flow control signals to use. The value is a bitmask.
0
will ignore hardware flow control signals.UART.RTS
will enable receive flow control by using the RTS output pin to signal if the receive FIFO has sufficient space to accept more data.UART.CTS
will enable transmit flow control by pausing transmission when the CTS input pin signals that the receiver is running low on buffer space.UART.RTS | UART.CTS
will enable both, for full hardware flow control.
Note
It is possible to call
init()
multiple times on the same object in order to reconfigure UART on the fly. That allows using single UART peripheral to serve different devices attached to different GPIO pins. Only one device can be served at a time in that case. Also do not calldeinit()
as it will prevent callinginit()
again.Note
It is possible to call
init()
multiple times on the same object in order to reconfigure UART on the fly. That allows using single UART peripheral to serve different devices attached to different GPIO pins. Only one device can be served at a time in that case. Also do not calldeinit()
as it will prevent callinginit()
again.
- UART.deinit()¶
Turn off the UART bus.
Note
You will not be able to call
init()
on the object afterdeinit()
. A new instance needs to be created in that case.
- UART.any()¶
Returns an integer counting the number of characters that can be read without blocking. It will return 0 if there are no characters available and a positive number if there are characters. The method may return 1 even if there is more than one character available for reading.
For more sophisticated querying of available characters use select.poll:
poll = select.poll() poll.register(uart, select.POLLIN) poll.poll(timeout)
- UART.read([nbytes])¶
Read characters. If
nbytes
is specified then read at most that many bytes, otherwise read as much data as possible.Return value: a bytes object containing the bytes read in. Returns
None
on timeout.
- UART.readinto(buf[, nbytes])¶
Read bytes into the
buf
. Ifnbytes
is specified then read at most that many bytes. Otherwise, read at mostlen(buf)
bytes.Return value: number of bytes read and stored into
buf
orNone
on timeout.
- UART.readline()¶
Read a line, ending in a newline character.
Return value: the line read or
None
on timeout.
- UART.write(buf)¶
Write the buffer of bytes to the bus.
Return value: number of bytes written or
None
on timeout.
- UART.sendbreak()¶
Send a break condition on the bus. This drives the bus low for a duration longer than required for a normal transmission of a character.
- UART.flush()¶
Waits until all data has been sent. In case of a timeout, an exception is raised. The timeout duration depends on the tx buffer size and the baud rate. Unless flow control is enabled, a timeout should not occur.
Note
For the rp2, esp8266 and nrf ports the call returns while the last byte is sent. If required, a one character wait time has to be added in the calling script.
Availability: rp2, esp32, esp8266, mimxrt, cc3200, stm32, nrf ports, renesas-ra
- UART.txdone()¶
Tells whether all data has been sent or no data transfer is happening. In this case, it returns
True
. If a data transmission is ongoing it returnsFalse
.Note
For the rp2, esp8266 and nrf ports the call may return
True
even if the last byte of a transfer is still being sent. If required, a one character wait time has to be added in the calling script.Availability: rp2, esp32, esp8266, mimxrt, cc3200, stm32, nrf ports, renesas-ra
Constants¶
- UART.RX_ANY¶
IRQ trigger sources
Availability: WiPy.


Well, I'm in New York City for a little while (until the 23rd), participating in the training at TOPP. TOPP is adding quite a few new people, most of whom have only a little experience with Python (and none with Zope). It'll be interesting to see how people adapt. Is this stuff really easy to learn? We shall see.
Anyway, my evenings are mostly unscheduled, so if you are in NYC and want to do something drop me a line. (I'm not keeping up very well with email, maybe call me at<PHONE_NUMBER>)
Damm Ian, you come to town right after I move out of it. ahh well. I've been reading your blog for awhile for the python info and would have loved to buy you a beer for it. Let me know if you ever come to Arizona.
-Josh
Hi! I live in Brooklyn. TOPP sounds very interesting, too bad it's not last year when I was really starting to get itchy at my old job. If you want to say hi, I'm at<PHONE_NUMBER>.
# Paul Winkler
I'm definitely around and up for pretty much anything. I'll email you my phone number if you don't already have it.
What a cool project TOPP appears to be.


---
redirect_from: /ru/SystemMenu.html
title: "ConEmu | System Menu"
breadcrumbs:
- url: TableOfContents.html#controls
title: Controls
---
You may pop up system menu in several ways:
- by pressing Win+Alt+Space;
- by left mouse clicking on the menu button in the toolbar;
- by right clicking on the ConEmu window caption;
- by right clicking on taskbar button, holding Shift key (required in Windows 7 otherwise you will get Jump list);
- by left clicking on the icon in windows caption.
There is also Tab menu.


Hi there!. I'm Kwabena, a full time I.T personnel, a web developer,part-time systems adminatrator and basically a touch in anything that has to do with computers.
I am a very loving and sociable person even though most ofthen i dont look approachable.
My favorite time is whenever i am alone with my computer,
Iam a very adventurous and nosy guy who wants to know everything about computers,
Can i say am obsessed with computers? Hahahaha.Anyway i am a normal human being who likes to study in the middle of the night.
did you say "weird".. yeah right,
My hobbies are too many to list but i guess i will make it brief,
i like joking around, learning new stuff and cool tricks, reading books, watching movies ,
playing video games and most importantly,contracting any form of legal business
i mean .. i am a broker and imagine making money to be your hobby!
I mostly surf the internet to learn about new upgrades in the tech world and i like to research on almost every subject.
WELCOM TO MY PORTFOLIO
CLICK ON THIS LINK TO VIEW MY PROFILE
| FULL STACK DEVELOPER | Full stack web developer with advanced knowledge in various web development libraries, frameworks, open source software, design techniques, security standards and database management. | SYSTEMS ADMINISTRATOR AND NETWORKING | manage the overall connections and stability of a workshop system and also enabling routing and secured connections to the internet at a very high speed . | SOFTWARE PROGRAMMER | using in depth knowledge in computer llanguages to design softwares that can be used to facilitate the rate of work or activities in many technological institutions. | CYBER SECURITY ADMINISTRATOR | conduct routine checks on all logins of trusted clients in order to debug and rienforce all security checks against vulnurabilities. |
|---|


Identifies the return type of the function.
The <cxxFunctionDeclaredType> element contains the return type of the function as PCDATA. There is no semantic significance attached to the text content.
For example this code:
static const char* Function();
Would have a declared type of:
<cxxFunctionDeclaredType>const char *</cxxFunctionDeclaredType>