SetOfSettings
open class SetOfSettings : NSObject, NSCopying, NSCoding, SettingObserver
A collection of Setting
s.
-
Initialize a new
SetOfSettings
.Declaration
Swift
public override init()
-
The delegate is informed whenever one of the settings changes.
Declaration
Swift
public var delegate: SetOfSettingsDelegate?
-
An array of settings.
Declaration
Swift
public private(set) var settings: [Setting] { get }
-
This name can be used by when displaying multiple sets of settings, e.g. in one table view, as section titles.
Declaration
Swift
public var displayName: String
-
The number of settings for which the default value is NOT set.
Declaration
Swift
public var nNonDefaultSettings: Int { get }
-
See
NSCopying
.Important
Subclasses should override this if they want the result to be castable to their own class.Declaration
Swift
open func copy(with zone: NSZone? = nil) -> Any
-
See
NSCoding
.Declaration
Swift
public func encode(with aCoder: NSCoder)
-
See
NSCoding
.Declaration
Swift
public required init?(coder aDecoder: NSCoder)
-
Subscribe
subscriber
to a setting, so it is informed whenever that setting change value.Declaration
Swift
public func subscribe(_ subscriber: SettingSubscriber, toSettingWithTitle settingTitle: String)
-
Subscribe
subscriber
to settings, so it is informed whenever those settings change value.Declaration
Swift
public func subscribe(_ subscriber: SettingSubscriber, toSettingsWithTitles settingTitles: [String])
-
Add the passed setting.
Note: Settings being added must have unique titles.
Declaration
Swift
public func add(setting: Setting)
-
Insert the passed setting at
index
.Note: Settings being added must have unique titles.
Declaration
Swift
public func insert(setting: Setting, at index: Int)
-
Find the setting titled the same as the passed setting and replace it.
Declaration
Swift
public func addByReplace(setting: Setting)
-
Settings can be grouped by calling this function.
Whenever the NoiseTagging framework shows a
SetOfSettings
to the user, it shows the settings in the same order as they were added. You can see a ‘group title’ as a normal setting, but with no settable value and which is displayed in such a way that it visually groups all settings underneath it.Declaration
Swift
public func addNewGroupWith(title: String)
-
Delete the setting at the passed index.
Declaration
Swift
public func deleteSettingAt(index: Int)
-
Delete the setting with the passed title.
Declaration
Swift
public func deleteSettingWith(title: String)
-
Get the setting with the passed title.
Declaration
Swift
public func settingWith(title: String, caseSensitive: Bool = true) -> Setting?
-
Get the settings with the passed titles.
Declaration
Swift
public func settingsWith(titles: [String]) -> [Setting]
-
Get the value of the
BoolSetting
with the passed title.Declaration
Swift
public func boolFor(_ settingTitle: String) -> Bool
-
Set the value of the setting with the passed title. The setting should be a
BoolSetting
.Declaration
Swift
public func set(boolValue: Bool, for settingTitle: String)
-
Toggle the value of the
BoolSetting
with the passed title.Declaration
Swift
public func toggleSettingWith(title: String)
-
Get the value of the
IntSetting
with the passed title.Declaration
Swift
public func intFor(_ settingTitle: String) -> Int
-
Set the value of the setting with the passed title. The setting should be an
IntSetting
.Declaration
Swift
public func set(intValue: Int, for settingTitle: String)
-
Get the value of the
DoubleSetting
with the passed title.Declaration
Swift
public func doubleFor(_ settingTitle: String) -> Double
-
Get the value of the
DoubleSetting
with the passed title, as aCGFloat
.Declaration
Swift
public func cgFloatFor(_ settingTitle: String) -> CGFloat
-
Set the value of the setting with the passed title. The setting should be a
DoubleSetting
.Declaration
Swift
public func set(doubleValue: Double, for settingTitle: String)
-
Set the value of the setting with the passed title. The setting should be a
TextSetting
.Declaration
Swift
public func set(stringValue: String, for settingTitle: String)
-
Get the index of the currently selected item of the
EnumSetting
with the passed title.Declaration
Swift
public func indexSelectionForEnumSettingWith(title: String) -> Int
-
Get the currently selected item of the
EnumSetting
with the passed title.Declaration
Swift
public func selectedEnumForSettingWith(title: String) -> EnumAsSetting?
-
Set the passed item as the selected item of the
EnumSetting
with the passed title.enumValue
‘s type should match theEnumSetting
.Declaration
Swift
public func set(enumValue: EnumAsSetting, for settingTitle: String)
-
Get the index of yje currently selected item of the
ItemOfArraySetting
with the passed title.Declaration
Swift
public func indexSelectionForItemOfArraySettingWith(title: String) -> Int
-
Get the currently selected item of the
ItemOfArraySetting
with the passed title.Declaration
Swift
public func selectedItemOfArrayFor(settingTitle: String) -> ItemOfArrayInMenu?
-
Set the passed
itemOfArray
as the selected item of theItemOfArraySetting
with the passed title. The passeditemOfArray
should be one of the setting’spossibleValues
.Declaration
Swift
public func set(itemOfArray: ItemOfArrayInMenu, for settingTitle: String)
-
Get the selected color for the
ColorSetting
with the passed title.Declaration
Swift
public func colorFor(settingTitle: String) -> UIColor
-
Get the text for the
TextSetting
with the passed title.Declaration
Swift
public func textFor(settingTitle: String) -> String
-
For each of our settings, if there is a matching setting in
setOfSettings
(same titles), set the value to that matching setting’s value.Declaration
Swift
public func takeOnValuesOf(settings: SetOfSettings)
-
Normally whenever a setting is changed, its
actionBeforeChange
andactionAfterChange
are executed. Use this function to change settings without those actions being executed.Declaration
Swift
public static func changeSettingsWithoutPerformingActions(closure: (() -> ()))
-
See
SettingDelegate
.Declaration
Swift
public func valueChangedFor(setting: Setting)


WQMY
Sunrise & Sunset Calculator | StarDate Online
View Times. Choose your city from the list below. Note: Time zone is not set automatically by choosing from this list. United States | Canada | Mexico. Caribbean .
http://stardate.org/nightsky/riseset
Legal Hunting Hours - Maine.gov
(Based on Sunrise and Sunset at Bangor, Maine Eastern Standard Time.) The chart below contains the legal hunting hours for most of the open hunting seasons .
http://www.maine.gov/ifw/hunting_trapping/hunting/legalhuntinghours.htm
Sunrise/ Sunset Times and Moon Phases - Grand Canyon National ...
Sunrise/ Sunset Times and Moon Phases. . There is no one best place for watching sunrise or sunset, just good places and better places. Download Grand .
http://www.nps.gov/grca/planyourvisit/sunrise_set_moon.htm
Contents |
[rcbs no 14 rotor] History
Sunrise and sunset in the United States
You can estimate sunrise & sunset times for location: http://aa.usno.navy.mil/data/ docs/RS_OneDay.html. Earliest sunrise & sunset locations .
http://askville.amazon.com/Sunrise-sunset-United-States/AnswerViewer.do?requestId=2336760
Maine, USA Locations for Sunrise Sunset Calendar
Select a Maine city or town to make your free printable Sunrise Sunset Calendar.
http://www.sunrisesunset.com/usa/maine.asp
Sunrise and Sunset for U.S.A. Maine Portland coming days
Calculations of Sunrise and Sunset in U.S.A. Maine Portland for coming days. Generic astronomy calculator to calculate times for sunrise, sunset, moonrise, .
http://www.timeanddate.com/worldclock/astronomy.html?n=1081
Hunting-Sunrise and Sunset Tables
Sunrise and Sunset Table for Cities or Towns in the U.S.. Specify year, type of table, and place: Year: Type of table: sunrise/sunset, moonrise/moonset, civil .
http://www.losthunter.com/sunupdown.asp
Portland, Maine - Sunrise, sunset, dawn and dusk times for the ...
Portland, Maine - sunrise, sunset, dawn and dusk times for the whole year in a graph, day length and changes in lengths in a table. Basic information, like local .
http://www.gaisma.com/en/location/portland-maine.html
Bangor, Maine - Sunrise, sunset, dawn and dusk times for the whole ...
Bangor, Maine - sunrise, sunset, dawn and dusk times for the whole year in a graph, day length and changes in lengths in a table. Basic information, like local .
http://www.gaisma.com/en/location/bangor-maine.html
Sun or Moon Rise/Set Table for One Year - U.S. Naval Observatory ...
Obtain a table of the times of sunrise/sunset, moonrise/moonset, or the beginning and end of twilight, for one year.
http://aa.usno.navy.mil/data/docs/RS_OneYear.php
Augusta, Maine USA sunrise sunset times - Happy Zebra
Sunrise Sunset in Augusta, Maine USA Today for April and May 2013. Sunrise sunset in major cities in the world.
http://www.happyzebra.com/timezones-worldclock/sunrisesunset.php?city=Augusta
Saco, Maine - Sunrise, sunset, dawn and dusk times for the whole ...
Saco, Maine - sunrise, sunset, dawn and dusk times for the whole year in a graph , day length and changes in lengths in a table. Basic information, like local time .
http://www.gaisma.com/en/location/saco-maine.html
Sunrise and Sunset Times for Maine to Massachusetts
Sunrise and Sunset Times for Maine to Massachusetts, A site dedicated to sunrise and sunset times.
http://www.thesunrisetimes.com/Maine_to_Massachusetts.aspx
Sunrise and Sunset - Haleakal? National Park
Sunrise and sunset are among the celestial phenomenon visible from the park - according to the whims of the . The visitor centers are not open at these times.
http://www.nps.gov/hale/planyourvisit/sunrise-and-sunset.htm
[hard wood turning blanks english sycamore] Digital channels
| Channel | Name | the six blind man | ricardo beverly hills backpacks | Programming |
|---|---|---|---|---|
| 53.1 | maine sunrise sunset table DT | home | peavey cl-2 cluster pa speakers | Main maine sunrise sunset table programming / MyNetworkTV |
| 53.2 | WOLF DT | nevada pacific west builders | removing copy protection from vhs | Simulcast of cornelia meyer egbert rimkus death valley |
| 53.3 | WSWB DT | 480i | 4:3 | Simulcast of birds and blooms magazine free |
Tide chart: Bath, Kennebec River, Maine - XTide Tide Prediction ...
Bath, Kennebec River, Maine tide table for waterfront recreation and travel. . PM EDT 0.00 feet Low Tide 2013-04-05 7:11 PM EDT Sunset 2013-04-05 9:18 . AM EDT 0.35 feet Low Tide 2013-04-06 6:11 AM EDT Sunrise 2013-04-06 9:42 .
http://tides.mobilegeographics.com/locations/410.html
[cell phone deal of the day] References
[examples of repetition in literature] External links
- china's electric car 2007
- lenox sales inc bankruptcy
- gold coast real estate austraila
- dundee real estate investment trust
- myspace midnitght car layouts
- examples of repetition in literature
|
|


This tool generates code out of templates according to instruction files. And it's simpler than it sounds.
How it works Download examples


es·say “A loose sally of the mind; an irregular undigested piece; not a regular and orderly composition.”
Writing Good Reviews
August 27, 2018
Reviewing papers is one of the most important roles of an academic. But yet, we provide surprisingly little guidance to our reviewers on the tone of their reviews. I tried to capture some of my thoughts in this email I sent to my reviewers when I ran RSS 2017.
A Tangled Web, Slightly Untangled
August 26, 2018
I finally updated my website to the 21st century, and decided to go full Computer Scientist on it. I was looking for something that was full-featured (markdown, math), methodical to update (git), and customizable (layout, fonts).


The "Load DArcMail Data" screen asks for the following information:
- Name. This is the DArcMail name of the email account. This can be the email address that is associated with the email account (e.g<EMAIL_ADDRESS>or any other format (e.g., "John Smith", "Smith, J; Jamestown", etc.). If the email account name does not aleady exist in the DArcMail database, it will be created in the loading process.
- Directory. This is the account directory. This must already exist and must contain (directly or indirectly) one or more MBOX-format files with the .mbox file extension. If you have already loaded some email folders for this account, and if you are trying to load another email folder into the same account, then the account directory you specify must be the same as the account directory already recorded in the database (alternatively, you can delete all account data from the database and start over with the new account directory)
- Folder. If "ALL FOLDERS" is specified, then the program will load message data from all the MBOX files that are contained below the account directory. If the "yes" box is checked and a single folder -- for example, "archive/deleted items" -- is specified, then the program will load message data only from the MBOX file with the path "<account_directory>\archive\deleted items.mbox". If the specified folder has already been loaded, you must first delete it before reloading.
- Store attachments externally. If "yes" is checked, then each message attachment will be stored in a separate file; the attachment will not be loaded into the database file. See attachment storage for further information.
The load process produces one output file, dm_load.log.txt, in the account directory. The contents of this file are also displayed in a pop-up window when the load process has completed.
It is possible for the set of MBOX files for a single account to contain multiple copies of a message. The MBOX "Message-ID" message header determines the unique identity of a message; this value appears as the "Global Id" field in a DArcMail Info page. Typically, duplication arises when the originating mail system allows a user to copy (rather than move) a message across mail folders. A DArcMail database does not preserve redundant copies of a message; it retains only the first copy of a message that is loaded.
Suppose Inbox.mbox and Budget.mbox both have copies of the same message. If you load the Inbox folder first, then the message will appear only in the Inbox folder. On the other hand, if the loading process loads the Budget folder first, then the message will appear only in the Budget folder. Duplicate messages are preserved when an MBOX is converted to an XLM file by DArcMailXml.


Jake
Roll: Manager
ID: 1
Email<EMAIL_ADDRESS>Office number: 005
Todd
Roll: Engineer
ID: 2
Email<EMAIL_ADDRESS>GitHub Username: jakelw96
Tim
Roll: Engineer
ID: 3
Email<EMAIL_ADDRESS>GitHub Username: jakelw96
Bob
Roll: Intern
ID: 4
Email<EMAIL_ADDRESS>School: University of Utah


Computing...
COVID-19 County Hotspots
The following counties are adding more than 100 new COVID-19 cases per day.
coronafiles.us provides enhanced COVID-19 statistics and reports made from open source data Covid Tracking and Covid 19 Data
contact<EMAIL_ADDRESS>contact: mike.hankey[@]gmail.com


Bounty Hunter
Tips
- Shadow Walk has a visible cast animation, even if you're invisible when you cast it.
- Shadow Walk has a brief fade time at all levels. If you attack something during the fade time, you'll
get the bonus damage without dispelling your invis.
- You can cast Shadow Walk while you're channeling a TP.
- If you're prowling around an area that you think might be sentry warded, try intentionally forcing creep aggro while invis by right clicking a hero. This is a quick way to confirm if the enemy has true sight or not.
- Another way to confirm is through heroes who go into 'attack stances' like Brew, Jugg, Abaddon, or listening to see if enemies say deny lines even though there is no one else in your lane. If these things happen for no good reason, they can see you.
- Shuriken will bounce to Tracked targets even if the initial target isn't Tracked. Try hitting a
non-Tracked target first (like a creep) to reach a distant target.
- Hover over the Track debuff icon on an enemy to see how much gold they have.
Counters
- A lot of (bad) Bounty Hunters blow Shuriken the second they start ganking you. If they do, just TP out
no worries.
- Manta, Diffusal, Lotus Orb, or Guardian Greaves can all purge Track. Slark's Dark Pact, Naga's Mirror Image,
PL's Doppelganger can also purge Track. Allied targeted purges/dispels like Aphotic Shield, Press the Attack,
and Fortune's End also work.
- Pay attention to your buff icons when there's a BH on the enemy team.
- Track gold adds up quickly and is what allows teams with softer carries than yours to wipe you out.
Gondars LOVE trades because even though it seems like a 1:1 kill, it's more like a 1.5:1 gold kill.
- Bounty is at his strongest in the mid game when people are still separated, but still squishy, so take
initiative with detection. As opposed to other invis heroes like Clinkz and Nyx, Bounty doesn't get any
bonus move speed from his Shadow Walk, which makes him easy pickings if you Dust him or if he bumbles
into a sentry warded area.


The calendar is setup through unobtrusive javascript. All you have to do is add a parameter to the input field, and voila, you have a date/time picker:
<input type="text" data-date-time />
The calendar is setup through unobtrusive javascript. All you have to do is add a parameter to the input field, and voila, you have a date/time picker:
<input type="text" data-date />
The calendar is setup through unobtrusive javascript. All you have to do is add a parameter to the input field, and voila, you have a date/time picker:
<input type="text" data-time />
The display format strings are based on a modified set of the Ruby 'strftime' formatting conventions. Here's a list of the formatting options.
Display formats are provided to each instance by providing the input with data-date-format and data-time-format parameters, respectively.
The date format for the display can be specified using the data-date-format parameter. Like so:
<input type="text" data-date-time data-date-format="%m/%d/%Y" />
The date format for the display can be specified using the data-time-format parameter. Like so:
<input type="text" data-date-time data-time-format="%H:%M:%S" />
You can fully manage the values that are set and generated by the UI as well. This will allow you to provide a value, modify it, and return to the system in a format that is appropriate.
You can set the initial value for the field, using the standard input value parameter. The value should be provided in a format that Javascript can parse, the suggested format is YYYY-MM-DD HH:MM:SS. Like so:
<input type="text" data-date-time value="1977-07-06 14:32:01" />
<input type="text" data-date-time data-value-format="%Y-%m-%dT%H:%M:%S" />
All of the implementations so far, require a value to exist, or a default value is implied. This doesn't allow you to remove a value should you want to inject a null value for a field.
To allow a field to be set to null, all you need to do is set the data-nullable parameter in the input field. This will provide a button that will clear the field. Like so:
<input type="text" data-date-time data-nullable value="1977-07-06 14:32:01" />
<input type="text" data-date-time data-nullable />
Assuming that the current time is UTC, you can assign an offset value so that the display will update accordingly. In the current example, the current UTC time is . Our offset is set to -7 hours (US Mountain Time), so the displayed time is minus 7 hours.
If you change the time, and then click the "Show the value" button, you will see that the stored value is actually in the calculated UTC time.
<input type="text" data-date-time data-utc-offset="-7" />
If you assign a UTC offset, and a value to the field, it will assume that provided value is UTC, and perform the calculations from there.
<input type="text" data-date-time data-utc-offset="-7" value="1977-07-06 21:32:01" />
If you want the calendar or time picker to display as the UI itself, then you can append the data-fixed parameter to the input.
The calendar can be used as the UI element by specifying the fixed-calendar parameter in the input field:
<input type="text" data-date data-fixed />
If you want to trigger your own custom javascript when the date/time pickers are manipulated you can bind events to the date input to respond accordingly.
The date/time picker below is wired up to respond to the following events:
Here's the code that implements the date/time picker (Check the console for output)
<input id="eventCalendar" type="text" data-date-time />
We can wire up the events with code similar to the following implementation:
$(document).ready(function() {
$('#eventCalendar').bind('monthChange', function(evt, opts) {
console.info('monthChange triggered');
console.info(opts);
});
});
If you want to customize how the calendar is drawn, you can bind behaviors to several of the build cycle steps.
Every behavior has a default method for handling its output, however if you bind to a behavior you can override the response and generate a highly customized interface for the Calendar UI. (NOTE: This currently only applies to the date picker UI, time picker behaviors haven't been implemented yet.)
The behaviors each have a stack of methods that are called in the order they are bound. Each call receives the options for the current calendar, any additional options that may need to be specified, and the response from the previous call.
Each bound behavior can build off of the response from the previous call, or generate a completely new response based your needs. Binding a behavior looks something like this:

This code will bind the behavior 'someBehavior' to the calendar that was build around the input with id 'someCalendarInput', and add the specified function to the stack for that behavior.
The function call accepts three arguments:
The function should return a response value in accordance with the behavior being bound to
This behavior allows you to modify whether or not an individual day in the week is presented as clickable or not.
The example code below makes all weekend days not clickable

This behaviors allows you to modify how days from the previous or following months are rendered to the the display.
The example code below displays all of the days from the previous and next month without their numbers.

$.fcdp.functions.buildDayUI = function(opts, day_opts) { ... }
This method allows you to modify how days from the current month are rendered to the the display.
The example code below replaces the numbers for Wednesday with a star icon.


00:00
Total logged time00:00
Total logged time00:00
Total logged time00:00
Total logged timeNotification
Team
Team
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow
Rachel Maddow


Macros | |
| #define | LODWORD(l) ((unsigned int)(l)) |
| #define | HIDWORD(l) ((unsigned int)((l)>>32)) |
Functions | |
| static int | count_last_flip_A1 (const unsigned long long P) |
| static int | count_last_flip_B1 (const unsigned long long P) |
| static int | count_last_flip_C1 (const unsigned long long P) |
| static int | count_last_flip_D1 (const unsigned long long P) |
| static int | count_last_flip_E1 (const unsigned long long P) |
| static int | count_last_flip_F1 (const unsigned long long P) |
| static int | count_last_flip_G1 (const unsigned long long P) |
| static int | count_last_flip_H1 (const unsigned long long P) |
| static int | count_last_flip_A2 (const unsigned long long P) |
| static int | count_last_flip_B2 (const unsigned long long P) |
| static int | count_last_flip_C2 (const unsigned long long P) |
| static int | count_last_flip_D2 (const unsigned long long P) |
| static int | count_last_flip_E2 (const unsigned long long P) |
| static int | count_last_flip_F2 (const unsigned long long P) |
| static int | count_last_flip_G2 (const unsigned long long P) |
| static int | count_last_flip_H2 (const unsigned long long P) |
| static int | count_last_flip_A3 (const unsigned long long P) |
| static int | count_last_flip_B3 (const unsigned long long P) |
| static int | count_last_flip_C3 (const unsigned long long P) |
| static int | count_last_flip_D3 (const unsigned long long P) |
| static int | count_last_flip_E3 (const unsigned long long P) |
| static int | count_last_flip_F3 (const unsigned long long P) |
| static int | count_last_flip_G3 (const unsigned long long P) |
| static int | count_last_flip_H3 (const unsigned long long P) |
| static int | count_last_flip_A4 (const unsigned long long P) |
| static int | count_last_flip_B4 (const unsigned long long P) |
| static int | count_last_flip_C4 (const unsigned long long P) |
| static int | count_last_flip_D4 (const unsigned long long P) |
| static int | count_last_flip_E4 (const unsigned long long P) |
| static int | count_last_flip_F4 (const unsigned long long P) |
| static int | count_last_flip_G4 (const unsigned long long P) |
| static int | count_last_flip_H4 (const unsigned long long P) |
| static int | count_last_flip_A5 (const unsigned long long P) |
| static int | count_last_flip_B5 (const unsigned long long P) |
| static int | count_last_flip_C5 (const unsigned long long P) |
| static int | count_last_flip_D5 (const unsigned long long P) |
| static int | count_last_flip_E5 (const unsigned long long P) |
| static int | count_last_flip_F5 (const unsigned long long P) |
| static int | count_last_flip_G5 (const unsigned long long P) |
| static int | count_last_flip_H5 (const unsigned long long P) |
| static int | count_last_flip_A6 (const unsigned long long P) |
| static int | count_last_flip_B6 (const unsigned long long P) |
| static int | count_last_flip_C6 (const unsigned long long P) |
| static int | count_last_flip_D6 (const unsigned long long P) |
| static int | count_last_flip_E6 (const unsigned long long P) |
| static int | count_last_flip_F6 (const unsigned long long P) |
| static int | count_last_flip_G6 (const unsigned long long P) |
| static int | count_last_flip_H6 (const unsigned long long P) |
| static int | count_last_flip_A7 (const unsigned long long P) |
| static int | count_last_flip_B7 (const unsigned long long P) |
| static int | count_last_flip_C7 (const unsigned long long P) |
| static int | count_last_flip_D7 (const unsigned long long P) |
| static int | count_last_flip_E7 (const unsigned long long P) |
| static int | count_last_flip_F7 (const unsigned long long P) |
| static int | count_last_flip_G7 (const unsigned long long P) |
| static int | count_last_flip_H7 (const unsigned long long P) |
| static int | count_last_flip_A8 (const unsigned long long P) |
| static int | count_last_flip_B8 (const unsigned long long P) |
| static int | count_last_flip_C8 (const unsigned long long P) |
| static int | count_last_flip_D8 (const unsigned long long P) |
| static int | count_last_flip_E8 (const unsigned long long P) |
| static int | count_last_flip_F8 (const unsigned long long P) |
| static int | count_last_flip_G8 (const unsigned long long P) |
| static int | count_last_flip_H8 (const unsigned long long P) |
| static int | count_last_flip_pass (const unsigned long long P) |
Variables | |
| static const char | COUNT_FLIP_R [128] |
| static const char | COUNT_FLIP_2 [256] |
| static const char | COUNT_FLIP_3 [256] |
| static const char | COUNT_FLIP_4 [256] |
| static const char | COUNT_FLIP_5 [256] |
| static const char | COUNT_FLIP_L [128] |
| int(* | count_last_flip [])(const unsigned long long) |
| #define HIDWORD | ( | l | ) | ((unsigned int)((l)>>32)) |
| #define LODWORD | ( | l | ) | ((unsigned int)(l)) |
|
static |
Count last flipped discs when playing on square A1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square A2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square A3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square A4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square A5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square A6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square A7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square A8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square B8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square C8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square D8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square E8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square F8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square G8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H1.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H2.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H3.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H4.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H5.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H6.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H7.
| P | player's disc pattern. |
|
static |
Count last flipped discs when playing on square H8.
| P | player's disc pattern. |
|
static |
Count last flipped discs when plassing.
| P | player's disc pattern (unused). |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
precomputed count flip array
| int(* count_last_flip[])(const unsigned long long) |
Array of functions to count flipped discs of the last move


All Categories
fashion
electronic
beauty
events
fitness
home & garden
furnimart
food & drinks
shopping
travel
Toggle navigation
home
deals
deals grid
deals grid sidebar
deals list
deals list sidebar
deals single
coupons
coupon grid
coupon grid sidebar
coupon list
coupon list sidebar
coupon details
blog
blog grid
blog grid sidebar
blog list
blog list sidebar
blog details
pages
categories
shopcart
wishlist
stores
contact us
logout
{{ company_name }}
HOME
SAVED COUPONS
BUSINESS DASHBOARD
PROFILE
2017 Best Buy - Bootstrap Responsive template for deals & coupon codes..Theme by
desideals4u


-
Apple Shows Love for HTML5 with iOS 8 | Blog | Sencha
www.sencha.com
September 16, 2014 | Ross Gerbasi
-
Why India's Mars mission is so cheap - and thrilling
www.bbc.com
India's Mangalyaan satellite is staggeringly cheap by Western standards - but it hopes to address some of the biggest questions on Mars, writes the ...
-
If programming languages were weapons • Bjorn Tipling
bjorn.tipling.com
C is an M1 Garand standard issue rifle, old but reliable. C++ is a set of nunchuks, powerful and impressive when wielded but takes many years of pain ...
-
Coursera
www.coursera.org
Take free online classes from 80+ top universities and organizations. Coursera is a social entrepreneurship company partnering with Stanford ...
-
Elon Musk Just Got $2.6 Billion To Build His Amazing 'Space Taxi' — Here's ...
www.businessinsider.com
Your taxi awaits.
-
Postgres Outperforms MongoDB and Ushers in New Developer Reality
blogs.enterprisedb.com
Jump to content
-
Hadoop - Where did it come from and what's next? (Pasadena Sept 2014)
www.slideshare.net
A summary of the History of Hadoop, some observations about the current state of Hadoop for new users and some predictions about its future (Hint, ...
-
Juno, the Interactive Development Environment
junolab.org
Juno builds on Julia's unique combination of ease-of-use and performance. Beginners and experts can build more powerful programs more quickly, and ...
-
Progress Report: Continued Product Focus
yahoo.tumblr.com
By Jay Rossiter, SVP, Cloud Platform Group At Yahoo, focus is an important part of accomplishing our mission: to make the world’s daily habits more ...
-
Landing Page In A Day: Launch your startup or product with custom design ...
landingpageinaday.com
Until Sept 30 , get your landing page for $100 off . Use code "launch-sale".
-
vgvassilev/cling
github.com
cling - Cling is an interactive C++ interpreter, built on top of Clang and LLVM compiler infrastructure.
-
The End of Linux - blog dot lusis
lusis.github.com
I’ve done a lot of tweeting about systemd lately. My internal conscience constantly reminds me of John Allspaw saying that twitter is just pr...
-
Scientists Have an Answer to how the Egyptian Pyramids Were Built
daily.jstor.org
Using sand, water, and a scale model of an ancient Egyptian transport sled, a team of Dutch engineers have answered an enduring question: "How on ...
-
Watch video proof of iPhone 6 Plus' serious bending issue -- a reason to ...
venturebeat.com
The iPhone might have a serious structural issue.
-
Official Go support
stripe.com
Stripe is a suite of APIs that powers commerce for businesses of all sizes.
-
dustingetz/react-cursor
github.com
Contribute to react-cursor development by creating an account on GitHub.
-
uselessd :: information system
uselessd.darknedgy.net
uselessd (the useless daemon, or the daemon that uses less... depending on your viewpoint) is a project to reduce systemd to a base initd, process ...
-
ComcastifyJS by theonion
theonion.github.io
With all this internet going around, sometimes you just want to experience the thrill of a long page load. Give your users the chance to enjoy a ...
-
CGSociety - Building 3D with Ikea
www.cgsociety.org
It takes more than an Allen Key to create IKEA's incredible visualisations
-
The Global Internet Is Being Attacked by Sharks, Google Confirms
www.slate.com
The Internet is a series of tubes ... that are sometimes attacked by sharks. Reports of sharks biting the undersea cables that zip our data around ...
-
Build Reactive Applications on the JVM | Typesafe
typesafe.com
Typesafe helps developers build Reactive applications with Play Framework, Akka, and Scala. Get started - Typesafe Activator Download and Templates.


| XML Signature: Sign document | ||
Select the file to be digitally signed
|
||
| or enter URI here | ||
| Save resulting XML Document as | ||
| Enveloping Signature | ||
| ZeroSpace transformation | ||
| Description | ||
| TimeStamp service URL | ||
| | ||
| Choose certificate to sign document: | ||
Please enter an URL or local file name
Filename must begin with file://
URL must begin with http://
check the "Validation" box if you want to validate your document:
Validation
click the "Validate" button to see if your text is valid XML:


Server side: Node.js, Socket.io, Express, Redis
Client side: HTML5 Boilerplate, Bootstrap and Handlebars
Fork me on Github
Sergio Castaño Arteaga
Room will be created if it doesn't exist
Pick up something more cool than anonymous :)


AMD Radeon Pro W5700 With Navi 10 GPU Announced For Workstations – USB Type-C & 9 TFLOPs For $799 US
by Hassan MujtabaAMD has announced its latest workstation aimed graphics card, the Navi 10 based Radeon Pro W5700. Based on the 7nm RDNA architecture, the AMD Radeon Pro W5700 delivers the same feature set as the consumer aimed Radeon RX series with drivers optimized for design workflows.
AMD Radeon Pro W5700 Gets Navi 10 GPU Treatment - Aimed at Workstations With 9 TFLOPs of Compute Horsepower For $799 US
The AMD Radeon Pro W5700 is very similar to its consumer, the Radeon RX 5700 but with a couple of changes, mainly on the software side. The AMD Radeon Pro W5700 features 36 compute units so we are getting 2304 stream processors and 64 raster operation units on the Navi 10 chip. It isn't the full variant like the Radeon RX 5700 XT but it does feature a maximum clock speed of 1930MHz which delivers a total compute horsepower of 8.89 TFLOPs.
In terms of memory, the card features 8 GB of GDDR6 memory running across a 256-bit interface at speeds of 14 Gbps. The card uses the same GDDR6 memory dies as the consumer variant and delivers a total bandwidth of 448 GB/s. Unlike the more recent Vega based offerings, the Radeon Pro W5700 doesn't feature ECC memory correction.
Moving on, the card features a TDP of just 205W which is comparatively good against the older Vega-based Pro lineup. The TDP is essentially the same as the Radeon RX 5700 if we do not factor in the power cost of the USB Type-C connector for VR HMD's. This connector alone requires 15W but when it's not being used, the card should land in the same TDP figures as the Radeon RX 5700. Coming to the design of the card itself, the card is powered by an 8+6 pin connector configuration.
AMD Radeon Pro Workstation Graphics Lineup:
| Graphics Card Name | Radeon Pro WX 7100 | Radeon Pro WX 8200 | Radeon Pro WX 9100 | Radeon Pro W5700 |
|---|---|---|---|---|
| GPU | Polaris 10 | Vega 10 | Vega 10 | Navi 10 |
| Process Node | 14nm | 14nm | 14nm | 7nm |
| Compute Units | 36 | 56 | 64 | 36 |
| Stream Processors | 2304 | 3584 | 4096 | 2304 |
| ROPs | 32 | 64 | 64 | 64 |
| Clock Speed (Peak) | 1243 MHz | 1500 MHz | 1500 MHz | 1930 MHz |
| Compute Rate (FP32) | 5.7 TFLOPs | 10.8 TFLOPs | 12.3 TFLOPs | 8.89 TFLOPs |
| VRAM | 8 GB GDDR5 | 8 GB HBM2 | 16 GB HBM2 | 8 GB GDDR6 |
| Memory Bus | 256-bit | 2048-bit | 2048-bit | 256-bit |
| Memory Bandwidth | 224 Gbps | 484 Gbps | 512 Gbps | 448 Gbps |
| TDP | 150W | 230W | 250W | 205W |
| Launch | 2016 | 2018 | 2017 | 2019 |
| Price | $799 US | $999 US | $2199 US | $799 US |
The Radeon Pro series makes use of the blue and silver color scheme on the shroud. The card is cooled by a single blower type fan which circulates air through the internal chassis which seems to be composed of a vapor chamber based heatsink block. There are six I/O ports on the back of the card which include five mini DisplayPort (DP 1.4) and a USB Type-C port which is aimed at VR based setups, similar to NVIDIA's USB Type-C VirtualLink technology.
Performance-wise, AMD has stated that the card delivers 41% higher performance per watt than GCN based cards. In their official slides, AMD compares the Radeon Pro W5700 with the Radeon Pro WX 8200 with the latter being a Vega-based 230W offering with more stream processors, HBM memory (2048-bit) and around 11 TFLOPs of compute power.
Key capabilities and features of the AMD Radeon Pro W5700 graphics card include:
- High-Performance AMD RDNA Architecture – Features a redesigned geometry engine and compute units, delivering up to 25 percent higher performance-per-clock and up to 41 percent higher average performance-per-watt than the previous-generation Graphics Core Next (GCN) architecture.
- Exceptional Power Efficiency – AMD Radeon Pro Software for Enterprise’s intelligent power optimization, coupled with the power-efficient AMD RDNA architecture and 7nm process technology, enables the Radeon Pro W5700 graphics card to provide up to 18 percent better system efficiency than the competitive product
- Accelerated CPU/GPU Multitasking – Provides outstanding multitasking performance even in the most demanding situations, such as continuing to model while rendering a visualization in the background, providing up to 5.6X the application workflow performance with CPU load than the competition in the SPECviewperf 13 benchmarks.
- Professional-grade Software – AMD Radeon Pro Software for Enterprise delivers professional-grade quality, continuous performance improvements and robust security as well as industry-leading features, including AMD Remote Workstation that allows professionals to work virtually from anywhere with feature and performance parity with the workstation GPU on their desk.
- Innovative VR Software Features – AMD Radeon ReLive for VR enables professionals using AMD Radeon Pro W5700 graphics cards to wirelessly visualize their creations with VR-capable applications and select standalone VR headsets, such as the HTC VIVE Focus Plus.
- High-bandwidth PCIe 4.0 – The AMD Radeon Pro W5700 is the first PC workstation graphics card to support PCIe 4.0, delivering double the bandwidth of PCIe 3.0 to enable smooth performance for GPU-intensive applications.
- Professional Application Certification – Optimized and certified with leading Design and Manufacturing and Architecture, Engineering and Construction applications to deliver the stability and reliability required by workstation professionals.
- High-speed USB-C – The AMD Radeon Pro W5700 is the first PC workstation graphics card to include a USB-C connector, supporting a growing selection of USB-C based monitors and head-mounted displays (HMD).
The card also supports AMD Radeon ReLive for VR which allows wireless professional VR workloads on the Navi architecture. There's also support for Vive Focus Plus and AMD's Radeon software is fully utilized by some of the major design engines such as Unreal Studio, Unity Engine, and SolidWorks eDrawings. The Radeon Pro W5700 is available now for $799 US.


Boeing says 737 MAX expected to resume commercial flights in January
Boeing had originally planned for the model to resume flying in December.
by AFPBoeing on Monday said it expected the 737 MAX airplane, which was grounded after two crashes killed 346 people, to resume flying in January, delaying its return by one month.
"In parallel, we are working towards final validation of the updated training requirements, which must occur before the MAX returns to commercial service, and which we now expect to begin in January," Boeing said in a statement. It had originally planned for the model to resume flying in December.


Protocol
TransferAccountIdentifiable
public protocol TransferAccountIdentifiable
A type that can be used as an to or from account when initiating a transfer.
Relationships
Types Conforming to TransferAccountIdentifiable
Account
An account could either be a debit account, a credit card, a loan or mortgage.
Beneficiary
A beneficiary is a payment or transfer destination account which has been authorized by the bank.
Account.URI
A type representing the URI for making transfers.
BeneficiaryAccount
A beneficiary account is a payment or transfer destination account.
Requirements
transferAccountID
var transferAccountID: String
The identity of the account.


Kieran Scott
Home
(current)
About
Projects
Welcome!
For those about to hire me
Hi, and welcome to my website. Check out my CV below or my completed projects in the
Projects page
Technical Experience
Java
HTML/CSS
PHP
Software Experience
IntelliJ
Eclipse
NetBeans
Visual Studio Code
Microsoft Office Suite
Other Skills
Agile
Scrum


|
Ultimata 2
0.2
|
#include <Input.h>
Public Member Functions | |
| bool | get (GameMap *gameMap, Creature *c) |
| bool | testGet (GameMap *gameMap, Creature *c) |
| Uint8 | getAlpha () const |
| void | setAlpha (Uint8 a) |
| Uint8 * | getColor () |
| void | setColor (Uint8 *color) |
| int | getTestTileId () const |
| int | getTestImageLoad () const |
| Cursor * | getCursor () |
| Timer * | getTimer () |
| void | checkPlayerMovement (GameMap *gameMap, Creature *c) |
An Input object is responsible for handling player input and change the game parameters accordingly.
For free movement, will increase/decrease the creature movement speed accordingly. Then, the creature's position will be changed.
| gameMap | the game map object |
| c | the creature object |
Which key was released? Depending on the key, decrease player speed
Type of Movement
Handles animation
Handles input from the player
Handles input for a non-scrolling, fixed-screen map.
Note: checkPlayerMovement() checks e.type for SDL_KEYDOWN and SDL_KEYUP
Deals with timer
| Cursor * Input::getCursor | ( | ) |
Handles input from the player (test version)
Same as Input::get(), but for testing purposes. Handles input for a non-scrolling, fixed-screen map.


Microservices: Unix-style toolchains for the Internet age
A very good question if you ask me. Like monads, it seems that most everyone has a slightly different understanding of what a microservice actually is. So, while I’m going to stay out of the monad-definition cottage industry for now, I think its important to explore the overloaded & overly-buzzwordy world of microservices.
Wikipedia defines microservices as:
… microservices is a software architecture design pattern in which complex applications are composed of small, independent processes communicating with each other using language-agnostic APIs. These services are small, highly decoupled, and focus on doing a small task.
Like any good buzzword definition, this one is littered with other confusing or ambiguous terms. What exactly is a “software architecture design pattern” in this context? We’ve all read the GoF design patterns book but I’m pretty sure we never saw anything about microservices or SingletonVisitorMicroserviceFactory in there, so is this the same type of pattern? In this context I’m taking the term design pattern to mean more of a design philosophy about decoupling software. That fits nicely with the language-agnostic APIs, which is also confusing but I’m pretty sure it just means REST, HTTP, Thrift, or some other custom communication protocol. The second sentence is significantly clearer and offers a recipe for creating a microservice: keep it small, decoupled & focused. Perfect!
So is this a microservice?
object MyFirstService {
def strToFoo(s: String): Future[Foo] = ???
}
Its small, decoupled, communicates via raw strings (assuming its fronted by some REST interface) & certainly focuses on doing just one small task. Unfortunately no, I don’t think this is a microservie, or if it is then it has a truly awful API. This is really just a single function exposed to the world, which means it’s either a God function that does everything or its too narrowly focused, and either way I think that means this isn’t a real micro service.
I think we need some more view points, so lets turn to Martin Fowler & the good folks at Thoughtworks for their take on microservices:
The term “Microservice Architecture” has sprung up over the last few years to describe a particular way of designing software applications as suites of independently deployable services. While there is no precise definition of this architectural style, there are certain common characteristics around organization around business capability, automated deployment, intelligence in the endpoints, and decentralized control of languages and data.
This brief definition doesn’t to his full article justice, but at its core it shows that micro services help manage complexity in some areas while lifting a significant amount of complexity from a classic 3-tier monolith’s code into the operations/ Dev-Ops level. I think this is a spectacular step in the right direction, but I take umbrage with the idea that microservices are a relatively recent phenomenon.
| I don’t pretend to be a software historian, but I do happen to know that Unix & Linux are built on top of a very old & very specialized set of tools. The -nix tool-chain adheres to the “do one thing well” philosophy & often exposes their results as a standardized output buffer. These outputs coupled with the venerable | operator allow a collection of specialized tools to be composed together in a clear and logical manner in order to accomplish a larger goal. These specific tools have all been around for ~30 years, and the philosophy goes back even further. |
And that hits on my own definition of microservices, which is roughly equivalent to Martins but hopefully much clearer:
Microservices are internet-connected tools adhering to the Unix “do one thing well” philosophy & sharing a common input/output language


Get insights that help your business grow.
Discover the benefits of data analytics and make better decisions regarding revenue, customer experience, and overall efficiency.
10k+
Companies
314
Templates
12M+
Queries
Challenge by Frontend Mentor. Coded by Dennis Griffin.


>
This is part of the old website. New website begins at fontforge.github.io
Are you a web developer? Help us migrate this page on Github
I have always been interested in calligraphy, especially the eccentricities of the swash and black letter capitals.
My father was deeply concerned with Renaissance printing, being a textual bibliographer of Shakespeare. His major focus was in the errors printers were likely to make, nevertheless I grew up in an environment where the long-s and other archaic devices appeared. My father used to brag that a great aunt of his still used the long-s in her hand-written notes.
MALVOLIO
By my life, this is my lady's hand, these be her
very C's, her U's and her T's and thus she makes her
great P's. It is, in comtempt of question, her hand.Sir ANDREW
Her C's, her U's and her T's: why that?-- Shakespeare
Twelfth Night, II, v
Why that indeed. Some questions may have no answers.
In the early '80s I was working at JPL and I met my first bitmap display. The primary use of this display was to make movies of a simulated fly-by of Olympus Mons (on Mars). I used it to design my first bitmap font.
In the late '80s I bought my first computer, a Mac II. And with it a bought a little program called Fontastic which allowed people to design their own 'FONT' resources (mac bitmap fonts).
Then a friend, Godfrey DiGiorgi, recommended that I buy a copy of Fontographer and design PostScript fonts. I was leary initially. How could a rasterizer match the quality of a hand crafted bitmap? But eventually I succumbed to the attractions of the cubic spline.
In the meantime I had studied calligraphy, and once I had Fontographer began designing fonts based on various (latin) calligraphic hands.
In the early '90s I was working at a little web start-up company, called NaviSoft, which was almost immediately bought by AOL. My product was an html-editor (best known as AOLpress). As I was working to convert it to handle Unicode I became concerned about the lack of Unicode fonts. I began working on my own Unicode font (just the alphabetics and symbols, I knew there was no way I'd be able to deal with all the CJK characters). I designed a font based on Caslon's work with Bold and Italic variants. And then I started working on monospaced and sans-serif families (I called the sans-serif design "Caliban" as a play on Arial).
Aldus (the makers of Fontographer) had been bought by MacroMedia, and MacroMedia seemed to have no interest in continuing Fontographer. So development on Fontographer ceased. It did not support OpenType, and its unicode support was minimal. I began to write little programs to decode Type1 fonts and fix them up in various ways.
AOL did not really know what to do with AOLpress. AOLpress had been designed with web designers in mind, not with Steve Case's mother (which was AOL's target audience). So development on AOLpress ceased and the Unicode/CSS version never was completed. I continued to work on my fonts however and continued to be dissatisfied with Fontographer. In 1998 my AOL options matured and I was able to retire.
I wanted to try to become a primatologist and had made arrangements to spend 4 months in Madagascar as a field assistant to Chia Tan studying the Greater Bamboo lemur (Hapalemur simus). Sadly I found that I was not really cut out for that life. I had a hard time recognizing individual animals, and found that after a few months the leaches were more annoying than I had expected.
So I gave up on that.
Instead I set about working on an improved version of my html editor, and started by writing my own Unicode based widget set for it (this was before pango was out). When the widget set was usable I decided to write a small application to test it, and something to display the splines of a postscript font seemed just the thing. Having done that I figured I might as well allow people to edit those splines and save it back. And so was born the first version of PfaEdit.
Somehow the html-editor never got written.
I quickly discovered I was better at designing a font editor than I was at designing fonts, so I gave up on them too.
After a couple months of work I had something which worked, or so I thought, and I posted it to the web (my friend, Dan Kenan, very kindly gave me some space on his server, aptly named bibliofile) on 7 November of 2000. Within a month I had received my first bug report, and presumably had my first user.
I continued working on PfaEdit, adding support for pfb fonts and then in December for truetype and bdf fonts. I learned about sourceforge and moved PfaEdit there in April of 2001.
In April of 2001 I added support for type2 fonts embedded in an sfnt wrapper (opentype fonts, but not the advanced typographic tables). In July of 2001 MinGyoon (from Korea) asked me if PfaEdit could support CID keyed fonts so I learned about those and added support for them in August.
Valek Filippov suggested that I make PfaEdit be internationalizable, so I provided a mechanism and he provided a Russian translation of the user interface in June of 2001. On December of 2005 I gave up on my own system and switched to GNU gettext.
| Language | Translator | Initial version |
|---|---|---|
| English | ||
| Russian | Valek Filippov | June 2001 |
| Japanese | Kanou Hiroki | August 2002 |
| French | Pierre Hanser | September 2002 |
| Italian | Claudio Beccari | February 2003 |
| Spanish | Walter Echarri | October 2004 |
| Vietnamese | Clytie Siddall | July 2006 |
| Greek | Apostolos Syropoulos | August 2006 |
| Simplified Chinese | Lee Chenhwa | October 2006 |
| German | Philipp Poll | October 2006 |
| Polish | Michal Nowakowski | October 2006 |
| Traditional Chinese | Wei-Lun Chao | August 2007 |
I started working on support for simple aspects of the OpenType GSUB and GPOS tables in April of 2001 and finished the process (ignoring bugs of course) with the contextual chaining lookups in August of 2003. Similarly I started adding support for the various equivalent Apple Advanced Typography tables (primarily 'morx') at about the same time.
In an early attempt to get PfaEdit to generate instructions to grid-fit truetype fonts, I set about to write a truetype instruction simulator so that I could debug the generated code. It didn't work very well on real fonts. Then, in early 2001, I discovered freetype and found that freetype already did this (and did it right). At first I examined their code to try and figure out what was wrong with mine, but eventually I gave that up and simply used freetype as an instruction simulator. As things got more complicated (with David Turner's permission, and many suggestions from Werner LEMBERG), I eventually wrote a visual front end for freetype's built-in debugger. For a while this lived in a separate program called mensis, but in March of 2003 I integrated it into PfaEdit.
Many people urged me to provide a scripting interface to PfaEdit. At first I could not understand the point -- font design needs a graphical interface after all. But I was only looking at a small fraction of the tasks that could potentially be done with such an interface, and in January of 2002 PfaEdit gained the ability to run scripts.
In 2003 Yannis Haralambous invited me to talk at EuroTex. I fear I rather disappointed him in my choice of subject matter -- I tried to do better the next year when Apostolos Syropoulos invited me to EuroTex 2004 (but I overreached myself then and made some incorrect assumptions). These conferences were the first time I had actually met any of my users and were quite stimulating, leading to many suggestions and requests. I learned about SVG fonts at EuroTex 2003 and implemented them soon thereafter.
Yannis was also working on a book, Fontes & codages in which FontForge figures. He spent a lot of time making suggestions and finding bugs. He encouraged me to support multi-master fonts and by February of 2004 I had done so. Then I started working on Apple's distortable font technology (which has many similarities to Adobe's multi-master, but is rather badly documented) and, with help from Apple, had them working in April of 2004. I then extended freetype's support for multi-master fonts to support Apple's distortable fonts.
In early 2004 people complained that the name "PfaEdit" no longer reflected the abilities of the program and requested that I change it. Various people suggested names (including me), but the one I liked the best, FontForge, came from David Turner of freetype. And in March of 2004 PfaEdit changed its name to FontForge.
At about the same time I wanted to provide a somewhat more complete ability to handle PostScript Type3 fonts (or SVG fonts). So I implemented a multi-layered editing mode which provided a rather clumsy interface to some of the facilities of vector graphics programs.
In 2005 a Korean company asked me to do something. We had some difficulty communicating (I don't speak Korean), but eventually I figured out that they wanted to be able to group glyphs together. Prior to this FontForge handled encodings as an integral part of the font, which didn't seem right, and it made implementing groups impossible. So I had to rewrite much of the internals of FontForge to redo encodings before I could even start on groups. This took longer than I had thought it would, and by the time I finished (in July of 2005) the Koreans seemed to have lost interest. Ah well.
I got interested in pdf files in October of 2005, and gave FontForge's Print command the ability to print to a pdf file. Then I thought it would be kind of fun to be able to read a font out of a pdf file. I was a little worried about implementing this because I know that most fonts stored in pdf files are sub-sets, and only contain the glyphs actually used in the pdf file itself. I was convinced that I'd get lots of bug reports from people complaining that FontForge didn't read the entire font. Nevertheless my sense of fun overcame my fear of silly bug reports and I implemented it.
And I did get bug reports complaining that FontForge did not read the fonts
correctly.
And I don't think I was able to convince some of the complainers that the
fonts were incomplete in the pdf file. Ah well.
The X11 folk want to move away from the bdf format, so they came up with their own format (call opentype bitmap, with extension "otb") which was essentially an sfnt wrapper around a series of bitmap strikes with no outline font. I implemented that back in July of 2003. But then in July of 2005 they wanted to preserve the BDF properties as well. So we worked out a new table (called 'BDF ') to contain the properties from all the strikes in the font. Now it should be possible to make a round trip conversion of bdf->otb->bdf and not lose any information.
Many people complained about FontForge's ability to edit quadratic splines. I had no experience editing quadratic splines before I wrote my original version, I just made it behave like the cubic spline editor (which seemed obvious). But doing the obvious makes it hard to create a font that uses some of the optimizations in the ttf file, and made instructing the font confusing. So between January and February of 2006 FontForge's quadratic editing capabilities underwent an evolutionary change as people complained and I tried to fix things.
I have a testsuite for fontforge. Obviously. Originally it was very simple: a set of script files which did various actions. If FontForge didn't crash, then I presumed it worked. That was about all I could test, and although that's important, there are a few other things which might be examined. So I wrote a command to compare two fonts and see if they were equivalent. Originally this had been a separate command (called sfddiff), but if I integrated it into FontForge I could increase the abilities of the tests I wrote.
FontForge produced some rather naive type1 and type2 fonts which did not make good use of the PostScript concept of subroutines. In June of 2006 I did a substantial rewrite of the type2 output code and decreased the size of my output fonts considerably. My new comparison command was helpful in debugging. Nonetheless I introduced a number of bugs. Which got fixed, of course. But it made me leary of doing the same thing for type1 output. After all, Adobe doesn't even produce type1 fonts any more, so surely I don't need to optimize them. Michael Zedler said otherwise, and after great effort on his part induced me (in October 2006) to make better use of subroutines in Type1 output also. No bugs yet... (but it's still October of 2006).
All of FontForge's dialogs had a fixed layout. Which works fine if you've only got one language to support, but which looks really ugly (and worse can be totally illegible) when the dialog is translated into a different language and labels suddenly become longer (or shorter) and spill over into the textfield they identify. There has been a sudden burst of people willing to do translations recently. This mattered. So I stole the concept of boxes from gtk and implemented them in my widget set (in August of 2006), allowing a dialog to do its own layout to match the size of the things in it.
The pace of change seems to have slowed recently (Oct 2006) as all of the large tasks have either been done or proved insurmountable. As more people use the program they find more bugs and I have less time to do development. In the last few years there have also been large internal changes which (I hope) are practically invisible to users and cosmetic changes which make the dialogs look nicer and more comprehensible but which aren't functional.
My interface to GSUB/GPOS was not well thought out. I stored things in FontForge at the feature level, while OpenType wants things done at the lookup level. I thought lookups added an unnecessary level of complexity and ignored them. But people complained (they always do) that once a font had been read in to FontForge and saved out again it wouldn't work any more. And that was because I had lost the ordering imposed by the lookups. So in early 2007 I had to redo much of the internals of fontforge as it related to OpenType. I also changed the Metrics View so it would handle all OpenType lookup types (rather than just kerning).
And people didn't like my scripting language. Why hadn't I used python? (Well because I didn't know python and was lazy about learning more stuff that I didn't think would be useful to me). Various people told me that they just couldn't use FontForge because it didn't support python. So I added python support. Then I discovered that my build machine has such an old version of python that it doesn't provide libpython -- and I can't upgrade my machine any more because all the distros require booting from CD now (and my machine can't).
In May of 2007 I went to the Libre Graphics Meeting in Montreal, and as I listened to the Inkscape talk on how they handled plugins, I realized that I could do that too. So I extended the python interface to support python plugins and menu items. Dave Crossland, as is his wont, had many requests, and had me update the old Display dialog to support all the OpenType lookups (just as I'd done for the Metrics View) and then merge that into the Print dialog too. Dave also felt that FontForge should be able to store a font directly on the Open Font Library website. Well, they had no API for this, so I had to sit down and figure out http all over again and see what bits of the user API I needed to walk through.
In June I started working on Adobe's feature files (I could support them now that I was handling lookups properly), and found to my shock that
I had assumed that feature files were a stable useful format and found to my distaste that they were not. I implemented the bits that Adobe hadn't implemented, and extended them a bit so I could represent more of OpenType (and told Adobe what my extensions were, but was told they didn't like them). Grump. Well I wanted something to store as much of OpenType as I could, and I wasn't going to wait for Adobe to come up with something (which they still haven't).
Apostolos gave me the spec for the new 'MATH' table. But that spec had MicroSoft Confidential printed all over it and I wasn't about to touch it. Apostolos got annoyed at my ignoring it, so in July he had Sergey from MS send me a copy of the spec that no longer said "Confidential" on every page. Then I implemented the new 'MATH' table.
I'd never had a good Embolden function. I'd tried various approaches and none worked well. This year I decided to try a very simple idea: Use expand stroke and then squash the glyph together so it was the same height it had been before. That basically worked. Still a few oddities, but basically functional.
In July Michal Nowakowski gave me a patch which vastly improved the truetype auto instructor. I told him I'd only accept it if he would support it. After some initial grumbling he did so -- and then proceded to make it even better! Then about a week later Alexej Kryukov said he wanted to make the autoinstructor support diagonal stems, and the two of them started working together on this.
At the Libre Graphics Meeting Dave demoed Raph Levien's spiro splines and encouraged me to integrate them into fontforge. But Raph released under GPL and wasn't willing to change, and I released under BSD and wasn't willing to change. I got permision from Raph to repackage his spiro routines into a small shared library (libspiro) which could be released separately from FontForge but to which FontForge could link. And we had Raph's spiros in FontForge.
I realized that no only could I stick python into fontforge, but if I did a little more work, I could stick fontforge into python. So I wrapped up most of fontforge into a shared library that python could load. Dave Crossland had been complaining (again) about the FontForge widget set. When was I going to move to gtk? (well, I'd tried gtk back in 2004, and found it hard to use, and bits of it ugly -- and less functional than my own widget set in the ways that mattered to me, so I had given up on it). Dave offered to fund development of a gtk fontforge UI, but only if I'd switch to GPL. I dislike GPL, it seems so restrictive to me, so I said I wouldn't. Then I realized that I could rework my library until it was independant of widget set, and allow Dave to write a UI to sit on top of it, not bound by the fontforge license. So I reworked the internals of fontforge to make them extensible, stripped the UI out of libfontforge. And started to work on a gtk based fontforge of my own.
Dave Crossland was complaining on the Open Font Library mailing list about how much information was lost when a font was released. Guidelines. Names of lookups. Cubic splines used for generating the quadratics of TrueType. And about the need for providing sources. Well, providing sources of fonts can be difficult, and not always useful if the tools to generate the fonts aren't also available. However there is no reason why much of that information can't be stored in the font itself. I already had a table that FontForge would create called ('PfEd', left over from PfaEdit days) which stored per-glyph comments, and other things. I could simply extend that table to store guidelines and other things. And document it so that others could use it, of course -- but I'd already done that.
And that brings us up to Jan 2008, I guess the pace of change sped up a bit this year as opposed to last.
Alexey and others complained that they wanted multiple layers of splines. More than just the Foreground, Background, Guidelines layers that FontForge came with. One common request was to have both a cubic (PostScript) and a quadratic (TrueType) layer and be able to generate fonts from both. So in March of 2008 FontForge grew multiple layer support.
Later in March I added support for the OpenType 'BASE' and Apple 'bsln' tables. And to amuse myself I added the ablity to have gradient fills in Type3 (and svg) fonts.
In June I was thinking of the embolden command I did the year before, and realized that that was essentially the same idea as was needed for generating Small Caps glyphs from Capital letters. And then some of those algorithms could be used to create condensed and extended glyphs. And then I sat down and wrote a generic "glyph change" dialog -- years ago I had had a "MetaFont" command which was supposed to allow the user to embolden fonts for condense them or ... Unfortunately my MetaFont never worked very well (And some users complained that It didn't read Knuth's mf files. Sigh. No, it metamorphosed fonts in its own way, not Knuth's), so it got removed. Now it was basically working in a new form -- but I know better than to call it MetaFont now.
Alexey then stepped in and rewrote much of the code. I did not handle diagonal stems well when creating small caps, and that was just what he was doing with the autohinter. So he greatly improved the output.
I was also intregued by italics. Converting a font to italics involves so many different things -- the font is slanted, compressed, serifs change, letter forms change, ... I studied exisiting fonts to see what I could learn and asked various real typographers. The consensis I heard from them was that I could never make a good italic font from a roman one mechanically and should not bother to try -- it would just lead to people making bad italic fonts. Good advice, but I didn't follow it. I thought it was a neat challange. And it was something Ikarus had done, so I wanted to do it too.
In July a friend of mine, who is a mac user, said she wouldn't even consider looking at fontforge on her mac unless it behaved more like a mac application. So I figured out how to build a mac Application, and how to respond to apple events (like having someone double click on a font file, or drop a font file on fontforge's icon). I figured out how to start up X so that the user didn't have to. I made pretty (well, I think they are pretty) icons for font files. I even changed the menus to use the command key on the mac and to show the mac cloverleaf icon.
My friend still (November) has not looked at fontforge. Ah well.
Dave Crossland had hired someone to integrate cairo into fontforge. But the result never got back to me. In a moment of foolish boredom I decided I could do that too. So I studied cairo, and it really didn't seem that hard. But it was slow -- at least on my 10 year old x86 machine which doesn't support XRender. Cairo gave two things I cared about, anti-aliased splines in the glyph view, and anti-aliased text everywhere. Well I needed cairo in the glyph view, but pango would also provide fuzzy text and was lighter weight and would also support complex scripts (which fontforge's own widget set did not do). So I could turn off cairo everywhere but the glyph view but still get fuzzy text from pango. And speed things up. Then Khaled Hosny suggested that I implement pango. Hurumph. And I had wanted to surprise people. Oh well. Implement Pango I did.
A group in Japan created the "Unofficial mingw fontforge page". A very nice piece of work. It included a set of X resources which provided another, nice look to the UI. A theme. And then other people started writing themes -- and started complaining about and finding old bugs in fontforge's resource reading code -- it had never been exercised before I guess.
I have received many suggestions from many people, too many to enumerate here, and FontForge is the better for their requests. Often I have reacted badly to these suggestions (because they always mean more work for me), and I apologize for that, but mostly I wish to thank those who have helped make FontForge what it is today.
Currently, probably the biggest complaint about FontForge is the choice of widget set. No one likes my widgets (except me). Unfortunately for the rest of the world I don't like the two choices of widget set available to me (gtk and qt). I will get started working on converting to one and then run into some problem I can't work around easily and give up and go back to my own. Well in 2008 I still don't like gtk, but I have the fontview working in it. A start but probably not something I will continue.


Euro zone bailout fund reform will not involve automatic debt restructuring: Scholz
by ReutersMILAN (Reuters) - A proposed reform of the euro zone bailout fund (ESM) will not involve automatic debt restructuring for struggling countries, Germany's Finance Minister Olaf Scholz told Italian daily newspaper La Repubblica.
In an interview published on Saturday, Scholz said the ESM's task was to support struggling countries by lending them money subject to certain conditions.
"There is not any automatic debt restructuring," he added.
Italy's ruling parties failed to reach an agreement on Friday over the planned ESM reform, two lawmakers said, as Rome frets about the impact the changes could have on the country's massive public debt.


Looney-Network
Loony-Network
is a Cydia repository
Add to Cydia
Add to Sileo
Add to Installer
Add to Zebra
Featured Packages
Looney Network
Watch childhood classics with this app. iOS 12+
More info
Old Package
This is a sample package with minimal information. It also simulates an old package that's incompatible only with iOS lower than 7.0.
More info
New Package
This is a sample package with lots of information.
More info


We all have seen these nasty storms over
the past few months and we are here to educate
you on the different categories of Hurricans.


GSE111013
), perform QCs and compare them to the bulk ATAC-seq QCs seen during demonstration session 1We recommend focusing on few datasets from healthy donors, e.g.
SRR6762787
,SRR6762790
andSRR6762793
.
sinto
Processed data can be obtained directly from 10X Genomics
Make some celltype-specific pseudo-bulk bigwig tracks
Compare bulk and pseudo-bulk tracks in IGV; try to infer cell type for some of the cell clusters in scATACseq
Data was generated in this study: DOI 10.1038/s41467-019-14081-6.
First, we need to fetch to raw reads. You can go to the SRA Run Selector
and search for your GSE
of interest. Try and download reads for samples SRR6762787
, SRR6762790
and SRR6762793
.
https://trace.ncbi.nlm.nih.gov/Traces/study/?acc=GSE111013&o=acc_s%3Aa
Alternatively, I like to use another web-based approach: the sra-explorer website. It allows you to search for individual experiments using GEO ids, SRA ids, and much more, and reports download links for your samples of interest.
mkdir -p data/Homework_1/fastq
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR676/007/SRR6762787/SRR6762787.fastq.gz -o data/Homework_1/fastq/Bcells.fq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR676/000/SRR6762790/SRR6762790.fastq.gz -o data/Homework_1/fastq/CD4Tcells.fq.gz
curl -L ftp://ftp.sra.ebi.ac.uk/vol1/fastq/SRR676/003/SRR6762793/SRR6762793.fastq.gz -o data/Homework_1/fastq/CD8Tcells.fq.gz
Yet another approach is to use the recent ffq
tool. It’s quite effective, though it is not very fast and one
eventually has to manually download each link…
conda install -c conda-forge -c bioconda ffq
ffq SRR6762787 SRR6762790 SRR6762793 | grep "url"
Note that in the next step (focusing on scATACseq), the reads were aligned to the GRCh38
reference. For tracks to be comparable,
we will align bulk ATAC-seq data onto GRCh38
reference as well.
Build GRCh38 genome reference
If you don’t have a human reference yet, you will need to build one for Bowtie2! We recommend fetching assembly and annotations from Ensembl. This step will take ~ 15 min at least, but you’ll only have to do it once!.
mkdir ~/genomes/GRCh38/
curl -L http://ftp.ensembl.org/pub/release-98/fasta/homo_sapiens/dna/Homo_sapiens.GRCh38.dna.primary_assembly.fa.gz -o ~/genomes/GRCh38/GRCh38.fa.gz
gunzip ~/genomes/GRCh38/*
bowtie2-build --large-index --threads 16 ~/genomes/GRCh38/GRCh38.fa ~/genomes/GRCh38/GRCh38.fa
samtools faidx ~/genomes/GRCh38/GRCh38.fa
cut -f1,2 ~/genomes/GRCh38/GRCh38.fa.fai > ~/genomes/GRCh38/GRCh38.sizes.genome
cat ~/genomes/GRCh38/GRCh38.sizes.genome \
| sed -E 's/^([0-9]+|[XY])/chr\1/' \
| sed -E 's/^MT/chrM/' \
> ~/genomes/GRCh38/GRCh38.sizes.genome.modified
Align reads to GRCh38 reference
Note that in this study, the ATAC-seq experiments were sequenced in single-end mode. This is not a major issue, though it limits QCs as fragment sizes are not available.
Try and adapt the different mapping steps used during the demonstration session to map single-end reads. Commands for trimming, mapping, filtering and track generation will all be affected !! Check the manual for each command if you are unsure of some flags.
mkdir data/Homework_1/bam
mkdir data/Homework_1/bw
GENOME=~/genomes/GRCh38/GRCh38.fa
CPU=16
for SAMPLE in Bcells CD4Tcells CD8Tcells
do
READS=data/Homework_1/fastq/"${SAMPLE}".fq.gz
TRIMMEDREADS=data/Homework_1/fastq/"${SAMPLE}"_trimmed.fq.gz
SAMFILE=data/Homework_1/bam/"${SAMPLE}".sam
FILTEREDBAM=data/Homework_1/bam/"${SAMPLE}".bam
TRACK=data/Homework_1/bw/"${SAMPLE}".bw
## -- Trim reads and run QC
trim_galore --fastqc --cores 4 --output_dir data/Homework_1/fastq/ "${READS}"
## -- Map reads in single-end mode
bowtie2 --threads "${CPU}" -x "${GENOME}" -U "${TRIMMEDREADS}" > "${SAMFILE}"
## -- Filter reads
samtools sort -@ "${CPU}" -T "${SAMFILE}"_sorting "${SAMFILE}" | \
samtools markdup -@ "${CPU}" -r -T "${SAMFILE}"_markdup - - | \
samtools view -@ "${CPU}" -F 4 -q 10 -1 -b - | \
samtools sort -@ "${CPU}" --output-fmt bam -l 9 -T "${SAMFILE}"_sorting2 -o "${FILTEREDBAM}"
samtools index -@ "${CPU}" "${FILTEREDBAM}"
done
Because we have single-end reads only, we recommend to rely on macs2
to
predict the fragment size model, rather than bamCoverage
. macs2
can compute both
peaks and normalized coverage. Check macs2 callpeak
help to see which flags are important to generate
a depth-normalized coverage track.
for SAMPLE in CD4Tcells CD8Tcells
do
## -- Generate track and peaks simultaneously with MACS2
macs2 callpeak \
-t data/Homework_1/bam/"${SAMPLE}".bam \
--gsize hs \
--outdir data/Homework_1/bw \
--name "${SAMPLE}" \
--bdg --SPMR
## -- Convert macs2 bdg track to bigwig
sed -i 's/,/./' data/Homework_1/bw/"${SAMPLE}"_treat_pileup.bdg
bedGraphToBigWig data/Homework_1/bw/"${SAMPLE}"_treat_pileup.bdg ~/genomes/GRCh38/GRCh38.sizes.genome data/Homework_1/bw/"${SAMPLE}".bw
done
Get human gene features
We can define TSSs and promoters manually from gene annotations.
We recommend you fetch gene annotations using AnnotationHub
.
Keep in mind that you obtained the GRCh38
reference from Ensembl v98
!!
Once the genebodies are defined, you can build TSSs
and
promoters (e.g. -/+ 2000 bp centered around the TSS
).
library(AnnotationDbi)
library(tidyverse)
library(plyranges)
library(annotatr)
## -- Import genomic features
::query(AnnotationHub::AnnotationHub(), c('ensembl', '98', 'GRCh38', 'gtf'))
AnnotationHub AnnotationHub::AnnotationHub()[['AH75393']] %>%
hg_genes <- filter(type == 'gene', gene_biotype == 'protein_coding') %>%
filter(!(grepl('GL|KI', seqnames)))
hg_genes %>%
hg_TSSs <- anchor_start() %>%
resize(width = 1) %>%
unanchor()
hg_TSSs %>%
hg_promoters <- flank_upstream(4000) %>%
shift_downstream(2000) %>%
mutate(ID = paste0('prom_', 1:n()))
Import the 3 bam files in R
VplotR
provides the importPEBamFiles()
function, which wraps
GenomicAlignments::readGAlignmentPairs()
to import paired-end ATAC-seq data
as fragments and shift them.
In this study, since we are working with single-end data, we cannot rely on it.
Try and import reads “manually”. Search for the right function from GenomicAlignments
package!
Try also to import macs2
peaks in R. You can leverage the convenient rtracklayer
package for this!
library(GenomicAlignments)
library(rtracklayer)
c('Bcells', 'CD4Tcells', 'CD8Tcells')
samples <- lapply(samples, function(sample) {
bams <- paste0('data/Homework_1/bam/', sample, '.bam')
bfile <- readGAlignments(bfile)
ga <- as(ga, 'GRanges')
gr <-return(gr)
})lengths(bams)
lapply(samples, function(sample) {
peaks <- import(paste0('data/Homework_1/bw/', sample, '_peaks.narrowPeak'))
peaks <- import(paste0('data/Homework_1/bw/', sample, '_summits.bed'))
peak_summits <-$summit <- start(peak_summits)
peaksreturn(peaks)
})lengths(peaks)
names(bams) <- names(peaks) <- samples
Compute FRiP
FRiP is the easiest metric to compute in ATAC QC: one just needs to identify
which reads are overlapping with annotated peaks. To see whether a GRanges
query overlaps with a GRanges
subject, the findOverlaps()
function is
very useful is relatively fast!
When counting the total number of reads overlapping peaks, careful with reads which may overlap several peaks simultaneously!!
bams[['Bcells']]
Bcells_reads <-# nInPeaks <- length(queryHits(findOverlaps(Bcells_reads, peaks[['Bcells']])))
length(unique(queryHits(findOverlaps(Bcells_reads, peaks[['Bcells']]))))
nInPeaks <- length(Bcells_reads)
nTot <-/nTot nInPeaks
Check distance from Tn5 “cut” sites to TSS
The “cut” site is at the first base of the single-end read. We can calculate the distance from the start of each ATAC read to the nearest TSS, and check the cumulative distribution of distances.
Start first by trying to manually compute the distance using the standard
distanceToNearest()
function from IRanges
, then build a data.frame and
plot results manually.
If you feel confident handling GRanges
objects, try to leverage functions from
plyranges
to perform as much of the computation in a tidy workflow and
building on top of the GRanges
structure.
## -- Manual way
bams[['Bcells']]
Bcells_reads <- resize(Bcells_reads, width = 1, fix = 'start')
Bcells_reads <- distanceToNearest(Bcells_reads, hg_TSSs, ignore.strand = TRUE)
dists <- elementMetadata(dists)$distance
dists <- round(dists/10, 0)*10
dists <- data.frame(table(dists))
dists <-$cumsum <- cumsum(dists$Freq)
dists$log10dists <- log10(as.numeric(as.character(dists$dists)))
distsplot(x = dists$log10dists, y = dists$cumsum)
## -- "Tidy" way, using `plyranges` and `tidyverse` functions
'Bcells']] %>%
df<-bams[[ resize(width = 1, fix = 'start') %>%
add_nearest_distance(hg_TSSs) %>%
mutate(distance = round(distance/10, 0)*10) %>%
as_tibble() %>%
count(distance) %>%
mutate(cumsum = cumsum(n), pct = cumsum/max(cumsum))
ggplot(df, aes(x = distance, y = pct)) +
p<- geom_line() +
theme_minimal() +
scale_x_log10(limits = c(1, 1e7)) +
theme(legend.position = 'none') +
labs(title = 'Cumulative distribution of Bcells ATAC-seq reads', x = 'Distance from TSS', y = 'Cum. %')
Compute promoter (TSS) Enrichment Score
TSSES is another inmportant metric. Again, try both approaches: (1) using “dirty”
(but efficient!) successives functions, or (2) a “tidy” approach relying on plyranges
.
A summaryzing plot is also typically shown to illustrate the “shape” of the TSS enrichment.
## -- Manual way
bams[['Bcells']]
Bcells_reads <- resize(Bcells_reads, width = 1, fix = 'start')
Bcells_reads <- Bcells_reads[seqnames(Bcells_reads) != "MT"]
Bcells_reads_noMT <- findOverlaps(Bcells_reads_noMT, hg_promoters, ignore.strand = TRUE)
ov <- start(hg_promoters[subjectHits(ov)]) + (end(hg_promoters[subjectHits(ov)]) - start(hg_promoters[subjectHits(ov)])) / 2
midprom <- start(Bcells_reads_noMT[queryHits(ov)]) - midprom
distance <- round(distance/100, 0)*100
binned_distance <- data.frame(table(binned_distance))
dists <- mean(dists$Freq[abs(as.numeric(as.character(dists$binned_distance))) == 2000], na.rm = TRUE)
bg <-$enrich <- dists$Freq/bg
dists round(dists$enrich[as.numeric(as.character(dists$binned_distance)) == 0], 2)
TSSES <-plot(x = as.numeric(as.character(dists$binned_distance)), y = dists$enrich, type = 'l')
## -- "Tidy" way, using `plyranges` and `tidyverse` functions
'Bcells']] %>%
df<-bams[[ resize(width = 1, fix = 'start') %>%
join_overlap_left(hg_promoters) %>%
plyranges::select(ID) %>%
filter(!is.na(ID), seqnames != 'MT') %>%
as_tibble() %>%
left_join(as_tibble(hg_promoters) %>% dplyr::select(start, end, ID), by = 'ID') %>%
mutate(
prom_mid = start.y + (end.y - start.y) / 2,
distance = start.x - prom_mid,
binned_distance = round(distance/100, 0)*100
%>%
) count(binned_distance) %>%
mutate(
bg = sum(.data$n[abs(.data$binned_distance) == 2000]),
enrich_score = n/bg
) round(df[df$binned_distance == 0, 'enrich_score'], 2)
TSSES <- ggplot(df, aes(x = binned_distance, y = enrich_score)) +
p<- geom_line() +
theme_minimal() +
theme(legend.position = 'none') +
labs(title = glue::glue('TSS enrichment score (Signal-to-noise ratio): {TSSES}'), x = 'Distance from TSS', y = 'Enrich. score')
How do you find the “tidy” approach, compared to the manual one without plyranges
? What are the pros/cons of each approach?
Can you wrap the 3 samples together?
Try leveraging BiocParallel
package. It provides apply()
-like functions, and can run computation in
parallel using the BPPARAM
argument.
library(BiocParallel)
bplapply(BPPARAM = MulticoreParam(workers = 3), samples, function(sample) {
pl <- bams[[sample]]
reads <- resize(reads, width = 1, fix = 'start')
reads_1bp <- peaks[[sample]]
peaks <-## FRiP
add_nearest_distance(reads, peaks) %>%
df<- as_tibble() %>%
mutate(isInPeak = distance == 0) %>%
drop_na(isInPeak)
round(sum(df$isInPeak == 1) / nrow(df) * 100, 2)
pct <-ggplot(df, aes(y = isInPeak)) +
p1<- geom_bar() +
theme_minimal() +
theme(legend.position = 'none') +
labs(title = glue::glue('{sample}: Fraction of reads in peaks (FRiP): {pct}'), x = '# of ATAC-seq reads', y = 'Fragment within peak')
## Distance from TSSs
%>%
df<-reads_1bp add_nearest_distance(hg_TSSs) %>%
mutate(distance = round(distance/10, 0)*10) %>%
as_tibble() %>%
count(distance) %>%
mutate(cumsum = cumsum(n), pct = cumsum/max(cumsum))
ggplot(df, aes(x = distance, y = pct)) +
p2<- geom_line() +
theme_minimal() +
scale_x_log10(limits = c(1, 1e7)) +
theme(legend.position = 'none') +
labs(title = glue::glue('{sample}: Cumulative distribution of ATAC-seq reads'), x = 'Distance from TSS', y = 'Cum. %')
## TSSES
%>%
df<-reads_1bp join_overlap_left(hg_promoters) %>%
plyranges::select(ID) %>%
filter(!is.na(ID), seqnames != 'MT') %>%
as_tibble() %>%
left_join(as_tibble(hg_promoters) %>% dplyr::select(start, end, ID), by = 'ID') %>%
mutate(
prom_mid = start.y + (end.y - start.y) / 2,
distance = start.x - prom_mid,
binned_distance = round(distance/100, 0)*100
%>%
) count(binned_distance) %>%
mutate(
bg = sum(.data$n[abs(.data$binned_distance) == 2000]),
enrich_score = n/bg
) round(df[df$binned_distance == 0, 'enrich_score'], 2)
TSSES <-ggplot(df, aes(x = binned_distance, y = enrich_score)) +
p3<- geom_line() +
theme_minimal() +
theme(legend.position = 'none') +
labs(title = glue::glue('{sample}: TSS enrichment score (Signal-to-noise ratio): {TSSES}'), x = 'Distance from TSS', y = 'Enrich. score')
::plot_grid(p1, p2, p3, nrow = 1)
cowplot
})::plot_grid(plotlist = pl, nrow = 3) cowplot
Comment the differences. Can you visually appreciate whether some samples are a better quality than others, when loading the tracks in IGV?
scATACseq for human 5K PBMCs can be downloaded from 10X Genomics.
mkdir -p data/Homework_1/scATAC
curl https://cf.10xgenomics.com/samples/cell-atac/2.0.0/atac_pbmc_5k_nextgem/atac_pbmc_5k_nextgem_analysis.tar.gz -o data/Homework_1/scATAC/atac_pbmc_5k_nextgem_analysis.tar.gz
curl https://cf.10xgenomics.com/samples/cell-atac/2.0.0/atac_pbmc_5k_nextgem/atac_pbmc_5k_nextgem_possorted_bam.bam -o data/Homework_1/scATAC/atac_pbmc_5k_nextgem_possorted_bam.bam
curl https://cf.10xgenomics.com/samples/cell-atac/2.0.0/atac_pbmc_5k_nextgem/atac_pbmc_5k_nextgem_possorted_bam.bam.bai -o data/Homework_1/scATAC/atac_pbmc_5k_nextgem_possorted_bam.bam.bai
curl https://cf.10xgenomics.com/samples/cell-atac/2.0.0/atac_pbmc_5k_nextgem/atac_pbmc_5k_nextgem_web_summary.html -o data/Homework_1/scATAC/atac_pbmc_5k_nextgem_web_summary.html
curl https://cf.10xgenomics.com/samples/cell-atac/2.0.0/atac_pbmc_5k_nextgem/atac_pbmc_5k_nextgem_cloupe.cloupe -o data/Homework_1/scATAC/atac_pbmc_5k_nextgem_cloupe.cloupe
Different cluster strategies are ran by cellranger-atac
.
Check the HTML report: by default, the graph-based clustering results are shown. What do you think of them?
Load the cloupe
file in Loupe
to check other clustering results.
Is there another clustering approach that may look better-suited?
Now that you have chosen which cluster strategy you are going to use by inspecting data in Loupe,
can you find where the different clustering results are stored in the scATAC
directory?
Can you locate the clustering results from kmeans
clustering with k = 5
? How many cells are in each cluster?
sed '1d' data/Homework_1/scATAC/analysis/clustering/kmeans_5_clusters/clusters.csv | cut -f2 -d, | sort | uniq -c
Read sinto
documentation. Which subcommand
is going to be useful to split a single scATACseq bam file into cluster-specific bam files?
Do we have the required files for sinto
to work? What about the sorting of the original bam file?
Which bam tag is storing the cell barcode information, in the bam file generated by cellranger-atac count
?
samtools view -h data/Homework_1/scATAC/atac_pbmc_5k_nextgem_possorted_bam.bam | head -n 220 | grep -Pv "^@SQ"
samtools view data/Homework_1/scATAC/atac_pbmc_5k_nextgem_possorted_bam.bam | head -n 1
Try and separate the bam
file into individual bigwig files using sinto
.
Watch out the space needed by sinto
! sinto
does not provide any way to
indicate the temporary/destination directory to use, it simply creates the bam files
according to barcodes in the working directory. Since the original bam
file is ~15Gb,
the generated data is going to take at least this much disk space in the current directory!
sinto
will take about 15 min to run for the 5K cells dataset.
currdir=`pwd`
cd data/Homework_1/scATAC
sed '1d' analysis/clustering/kmeans_5_clusters/clusters.csv | sed 's/,/\t/' > clusters.tsv
sinto filterbarcodes \
-b atac_pbmc_5k_nextgem_possorted_bam.bam \
--cells clusters.tsv \
-p 12
cd $currdir
Are the generated bam files ready to be converted into coverage track? Are there any processing step we should take care of (e.g. mapping, filtering)? Which method can be used at this stage, to generate a depth-normalized track from bam files?

How can we normalize the coverage signal in this context?
Using the R
method, try to normalize by the number of cells in each cluster.
library(GenomicAlignments)
for (sample in 1:5) {
glue::glue('data/Homework_1/scATAC/{sample}.bam')
bam <- glue::glue('data/Homework_1/scATAC/bw/{sample}_R_cellnb-normalized.bw')
track <- sum(read.table('data/Homework_1/scATAC/clusters.tsv')$V2 == sample)
ncells <- readGAlignments(bam)
ga <- as(ga, 'GRanges')
gr <- IRanges::coverage(gr) / (ncells*2) * 100
gr.cov <-::export.bw(gr.cov, track)
rtracklayer }
Load tracks from bulk ATAC-seq (B cells, CD4+ T cells and CD8+ T cells) in IGV,
along with the 5 pseudo-bulk tracks from scATACseq.
Look at relevant loci (CD4
, CD8A
, CD8B
, …). Which cluster could correspond
to B cells? To T cells?


Sonos’s Black Friday deals offer up to $180 off products
It looks like this sale is mostly for TV speakers
by Brad BennettSonos is preparing for Black Friday by sharing what its product deals are ahead of the shopping day.
The company is discounting five of its more expensive products from midnight on November 28th to December 2nd. If you want to buy any of them, they’ll be live on the company’s website.
The deals are as follows:
- Playbar – $719 (save $180)
- Sub – $719 (save $180)
- Playbase – $719 (save $180)
- Amp – $639 (save $160)
- Beam – $399 (save $100)
MobileSyrup has reviewed both the Beam and Playbase, so you can learn more about it if you’re interested in either of those products. We’ve also reviewed the new Move and the One speakers. A dual pack of Sonos Ones is a nice add on to any of these soundbars for 3.1 surround sound.
Source: Sonos


This article will show how to use the Notification API. We will be building the app API Showcase
through the rest of these series to quickly test each new API. Try the demo of version one
Note: This is the icon for the new application
Unlike the previous post, the Notification
API requires requesting a permission. This can be done one of two ways: through the manifest or through the API itself. However, Firefox OS does not support requesting permissions after an app is installed. The required permission is called desktop-notification
.
{
"name": "API Showcase",
"description": "App that contains examples of API usage",
"launch_path": "/index.html",
"version": "v1.0",
"icons": {
"128": "/img/ic_api_showcase.png"
},
"permissions": {
"desktop-notification": {
"description": "Needed to show notifications"
}
}
}
The Notification API works through the Notification
object. To test whether the app has the required permissions, Notification.permission
will return
granted
: the user has allowed the app to show notificationsdenied
: the user has not allowed the app to show notificationsdefault
: the user did not decide, but this is as good as denied
Notifications are created by supplying a title and optionally
dir
: the direction of the notification (auto, ltr, rtl)lang
: language used within notificationbody
: the body of the notificationtag
: An ID that allows a notification to be replaced or removedicon
: the URL of the image to use as an iconThe notifications are displayed as soon as they are created. So all that is required to show a notification is
var title = "Title!";
var body = "Look at this bod";
var tag = 0;
var n = new Notification(title, {body: body, tag: tag});
The tag
option prevents multiple notifications with the same tag from being displayed.
As mentioned before, there is another method to getting the required permissions to show a notification. It's possible to ask the user for permission using the Notification.requestPermission
function. It takes a function with one parameter, permission
, that contains the result of the user decision.
Notification.requestPermission(function( permission ) {
// Addresses a bug in Opera/Chrome. You can ignore this but it is
// needed to run in some browsers
if(!('permission' in Notification)) {
Notification.permission = permission;
}
if (permission === "granted") {
var title = "Title!";
var body = "Look at this bod";
var tag = 0;
var n = new Notification(title, {body: body, tag: tag});
}
});
You can find the source code for the app here.


ArcelorMittal willing to re-commit to Ilva steel plant on three conditions: paper
ROME (Reuters) - ArcelorMittal (MT.AS) is drafting a plan to re-commit to the 2018 deal, under which it bought the troubled Ilva steel plant in southern Italy, on three conditions, Il Messaggero daily reported on Monday.
After withdrawing from the contract, the world’s biggest steel maker is drafting a proposal for Italy’s government in which it will demand the reintroduction of legal immunity, the possibility to revise its industrial plan and the layoff of 5,000 workers.
Italian Prime Minister Giuseppe Conte has postponed a meeting with ArcelorMittal’s Lakshmi Mittal, due this week, hoping that a Milan court will already decide on an appeal filed by Rome last Friday, Il Messaggero said.
The report added that economy minister Roberto Gualtieri is examining the potential entrance of state lender Cassa Depositi e Prestiti in the shareholding of the Franco-Indian company that manages Ilva.