Before Change
te_im = ground_truth[int(len(ground_truth) * partition):]
gt_set = GroundTruthDataset(normalization=normalization, reorder=reorder, im_transforms=transforms)
for im in tr_im:
logger.debug("Adding line {} to training set".format(im))
spin("Building training set")
gt_set.add(im)
message("\b\u2713", fg="green", nl=False)
message("\033[?25h\n", nl=False)
train_loader = DataLoader(gt_set, batch_size=1, shuffle=True)
After Change
te_im = ground_truth[int(len(ground_truth) * partition):]
gt_set = GroundTruthDataset(normalization=normalization, reorder=reorder, im_transforms=transforms)
with log.progressbar(tr_im, label="Building training set") as bar:
for im in bar:
logger.debug("Adding line {} to training set".format(im))
gt_set.add(im)
train_loader = DataLoader(gt_set, batch_size=1, shuffle=True)
test_set = GroundTruthDataset(normalization=normalization, reorder=reorder, im_transforms=transforms)
with log.progressbar(te_im, label="Building test set") as bar:


>>HR_
HackerRIT
Forgot your Password ?
Sign In
Sign-up With:
Login with Facebook
Please Fill the following details:
Create Account
New to HackerRIT? Create Account


23
1 One day someone told David, "You need to know that the Philistine army is attacking the town of Keilah and that they are stealing grain from where men are threshing it."
2 David asked Yahweh, "Should my men and I go to fight against those men from the Philistia people group?"
Yahweh answered, "Yes, go. Attack them, and rescue the people of Keilah."
3 But David's men said to him, "We are afraid that Saul will attack us here in Judah. We will be more afraid if we go to Keilah where the Philistine army is!"
4 So David asked Yahweh again if they should go to Keilah. Yahweh answered, "Yes, go down to Keilah. I will help you to defeat the Philistines."
5 So David and his men went to Keilah. They fought against the Philistines and captured many of their cattle. David and his men killed many of the Philistine men and rescued the people of Keilah.
6 Abiathar son of Ahimelech, fled to be with David at Keilah, and he brought a sacred apron with him to use to determine what God wanted him to do.
7 Soon Saul found out that David was at Keilah. So he said, "That is good! God is enabling me to capture him! He has trapped himself in that town, because it has high walls with gates around it."
8 So Saul summoned his army, and they prepared to go down to Keilah to attack David and his men.
9 But David found out that Saul was planning for his army to attack him. So he said to Abiathar the priest, "Bring here the sacred apron."
10 So when Abiathar brought it, David prayed, "Yahweh, God of us Israelites, I have heard that Saul is planning to come here with his army and destroy Keilah because I am here.
11 Will Saul come down here to Keilah, as people reported to me? Will the leaders of Keilah enable Saul to capture me? Yahweh, God of us Israelites, please tell me!"
Yahweh answered, "Yes, Saul will come down."
12 Then David asked, "Will the leaders of Keilah enable Saul's army to capture me and my men if we stay here?"
By means of the stones in the sacred vest, Yahweh replied, "Yes, they will."
13 So David and his six hundred men left Keilah. They continued to move from one place to another, wherever they thought that Saul would not find them. And when Saul found out that David had escaped from Keilah, he did not go there.
14 David and his man stayed in hiding places in the desert and in the hills of the wilderness of Ziph. Every day Saul sent men to search for David, but Yahweh did not allow them to capture David.
15 While David and his men were at a place named Horesh in the wilderness of Ziph, he found out that Saul was coming there to kill him.
16 But Saul's son Jonathan went to David at Horesh and encouraged him to continue to trustin God.
17 Jonathan told him, "Do not be afraid, because my father will not be able to harm you. Some day you will be the king of Israel, and I will be the second most important man in Israel. My father Saul also knows that."
18 Then the two of them repeated their solemn promise that Yahweh had heard them make previously, that they would always be loyal to each other. Then Jonathan went home, but David stayed at Horesh.
19 Some people from Ziph went to Saul when he was at Gibeah, and they told him, "David and his men are hiding in our land! They are hiding in places at Horesh on the hill of Hakilah, south of a place named Jeshimon.
20 So, O king, come down there any time that you want to. It is our duty capture him and put him in your hands."
21 Saul replied, "I hope that Yahweh will bless you for telling that to me.
22 Go back and find out more about him. Find out exactly where he is staying, and find out who has seen him there. People tell me that he is very clever, so we need to be clever also to be able to capture him.
23 Find out all the places where he and his men hide. Then come back and tell me everything that you have found out. Then I will take my army and go there with you. If David is in any of the clans of Judah, we will search for him and find him!"
24 So those people went back to Ziph before Saul went there. At that time David and his men were in the desert of Maon, south of Jeshimon.
25 Saul and his soldiers went to search for David, but David heard about that. So he and his men went further south to a rocky hill in the wilderness of Maon. When Saul heard about that, he and his men followed David and his men to the wilderness of Maon.
26 Saul and his soldiers were walking along one side of the hill, and David and his men were on the other side. David and his men were hurrying to escape from Saul's soldiers, because Saul and his soldiers were coming much closer.
27 But then a messenger came to Saul and said to him, "Come quickly! The Philistine army is attacking the people in our land!"
28 So Saul stopped pursuing David, and he and his soldiers went to fight against the Philistine army. That is the reason that people call that place the Rock of Escape.
29 David and his men also left that place and went to places to hide safely at Engedi.


Chestnut Cove Farm is a small family farm that specializes in raw honey, handmade soaps, herbal salves and nourishing balms. They also offer chemical free, seasonal vegetables and herbs, as well as homemade dog treats
Chestnut Cove, our small farm in Horse Cave, Kentucky, originated from our passion to provide naturally grown produce, honey and household products for our family. After realizing that desire is shared by other families in Kentucky, it became the driving force behind all of the products we offer, which include cold-processed and goat milk soap, natural lip balms, herbal salves and nourishing balms made from organic oils, beeswax, herbs and essential oils, as well as perfectly raw honey from organically managed bees.


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


Game.html

Prodo Island can be played now here. http://brobeur.com/game The project is just getting started. Adventure through html, unity Web games (downloads advavile).
Enjoy. Please give support and feedback. Fork the project on git hub. Tell your friends, like on Facebook, follow me on Twitter, make a game with me.
Wmckee


ngrok allows you to get a public domain for the server running on localhost
without the need of real IP and port forwardings.
However, if you have a real IP with open 8000 port you can
reconfigure your environment
or just input http://YOUR_IP:8000 on the 4th step.
In the terminal run ngrok http 8000 command
Copy last «Forwarding» URL from the appeared window
Paste an URL in the field below and click «Get QR code»
Scan generated QR code with the mobile TokenD Wallet


::marker
::marker
Our Team
::marker
Check Out
::after
Realtime wait times at your favorite restuarants.
Stop waiting for unexpected surprises. View wait times, save time. Share your wait time
earn points
.
Search restaurant name or location to start.
textsms
Search Restaurant or Location


Swimming is the hardest sport.
it requires a ton of physical activity 🗿
there is less breathing than every other sport 🗿
you practice for 2 hours everyday 🗿


Life-long seeker of knowledge who currently has his sights set on a full-time developer position. Experienced in HTML5, CSS3, Javascript, JQuery, Bootstrap, React JS, React Native, Firebase, Node JS, Express, MySQL, & MongoDB.
Knowledge in IT Operations and monitoring for hybrid, cloud, and on-premise IT infrastructure.
Dedicated comptetitive powerlifter with a 450lb squat, 280lb bench press, 540lb deadlift.
PortfolioFully deployed website that maps locations of breweries using multiple API’s. Uses HTML5, Bootstrap, CSS3, Javascript, Jquery, and Firebase.
*NOTE* CORS extension must be enabled for the API to work. Please enable Allow-Control-Allow-Origin extension.
Food Truck Review Application for the RDU area. Technologies used include HTML5, Bootstrap, CSS3, Javascript, Node.JS, MySQL, Twitter API, and AWS S3 for storing menus.
A full remote App based on React-Native. This app leverages the Spotify SDK plus Facebook and Google logins via Oauth which then allows a Client View to add songs to a play list that is then played via a Host View..
First professional client in need of responsive front-end website. Technologies used include: HTML5, CSS3, Bootstrap, Javascript. The website is still under construction.


 Check out our demo page to learn more!
Find Out MoreReview Improve has the software you need to get your website packed full of quality reviews! Fully tested proprietary software guarauntees our technology is secure, efficient, and easy to use. See for yourself!
State-of-the-art Machine Learning ensures fast and efficient review-scans.
Our algorithm weights several important factors when checking reviews.
Removal of inflated reviews from your site creates a better online experience for the user.
Experienced representatives stand by to make sure you have the tools you need.
Have questions? Good, because we have answers. Give us a call or send us an email and we will get back to you as soon as possible!
206-260-0620


This Code for Hawaii project is crowdsourcing data from across our beautiful state in a Google Doc and making it accessible on the web.
Use the search below to find Hawaii datasets that you're interested in.
Know of a local data source we're missing, please kokua and fill out this form.


| DOSE: |
|
insufflated |
Cocaine |
(powder / crystals) |
'Be careful, and use it wisely, this drug can TAKE you'
Sounds like an old wise man doesn't it? These were the words of a friend who gave me my first experience of cocaine.
When I snorted for the first time, I understood exactly what he meant... 'GIVE ME MORE'. During that first weekend, I snorted two grams, stayed up all night and paid the penalty with the 'crash'. I knew then, that cocaine had to be treated with respect, and that it could eventually TAKE me.
Now, I enjoy it as a treat. One gram every couple of months. I don't deny myself the drug because I do love it. Thing is though, I know how to put it away. Kind of like a close friend that I meet up with once in a while...
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Uses of Class
org.drip.numerical.estimation.R2ToR1SeriesTerm
| Package | Description |
|---|---|
| org.drip.numerical.estimation |
Function Numerical Estimates/Corrections/Bounds
|
| org.drip.specialfunction.bessel |
Ordered Bessel Function Variant Estimators
|
| org.drip.specialfunction.beta |
Estimation Techniques for Beta Function
|
| org.drip.specialfunction.generator |
Special Function Series Term Generators
|
-
Uses of R2ToR1SeriesTerm in org.drip.numerical.estimation
Methods in org.drip.numerical.estimation that return R2ToR1SeriesTerm Modifier and Type Method Description R2ToR1SeriesTerm
R2ToR1Series. r1ToR1SeriesTerm()
Retrieve the R2 To R1 Series Expansion TermConstructors in org.drip.numerical.estimation with parameters of type R2ToR1SeriesTerm Constructor Description R2ToR1Series(R2ToR1SeriesTerm r2ToR1SeriesTerm, boolean proportional, java.util.TreeMap<java.lang.Integer,java.lang.Double> termWeightMap)
R2ToR1Series Constructor -
Uses of R2ToR1SeriesTerm in org.drip.specialfunction.bessel
Subclasses of R2ToR1SeriesTerm in org.drip.specialfunction.bessel Modifier and Type Class Description class
FirstFrobeniusSeriesTerm
FirstFrobeniusSeriesTerm implements the Frobenius Series Term for the Cylindrical Bessel Function of the First Kind.class
HankelAsymptoteSeriesTerm
HankelAsymptoteSeriesTerm implements the Large z Asymptotic Series Term used for Modified Bessel Functions.class
ModifiedFirstFrobeniusSeriesTerm
ModifiedFirstFrobeniusSeriesTerm implements the Frobenius Series Term for the Modified Bessel Function of the First Kind.class
SecondNISTSeriesTerm
SecondNISTSeriesTerm implements the Series Term for the Cylindrical Bessel Function of the Second Kind using the NIST Series. -
Uses of R2ToR1SeriesTerm in org.drip.specialfunction.beta
Methods in org.drip.specialfunction.beta that return R2ToR1SeriesTerm Modifier and Type Method Description static R2ToR1SeriesTerm
SummationSeriesTerm. AbramowitzStegun2007()
Construct the Abramowitz-Stegun (2007) Summation Sum Series Term for Beta -
Uses of R2ToR1SeriesTerm in org.drip.specialfunction.generator
Methods in org.drip.specialfunction.generator that return R2ToR1SeriesTerm Modifier and Type Method Description R2ToR1SeriesTerm
BesselFirstKindLaurentExpansion. seriesTerm()
abstract R2ToR1SeriesTerm
SeriesExpansion. seriesTerm()
Generate the Special Function Series Expansion TermR2ToR1SeriesTerm
SphericalBesselFirstKindExpansion. seriesTerm()
R2ToR1SeriesTerm
SphericalBesselSecondKindExpansion. seriesTerm()


coffee_shop.rb |
|
|---|---|
|
|
|
|
coffee_shop is an implementation of writeroom in ruby for Linux. It was written by Nathaniel Welch for his senior project at Cal Poly. The program’s goal is to be small, lightweight and distraction free. Some of it’s main features are:
Anyway, enough of my babbling. Lets take a look at the code. |
|
|
First off we need to require Qt4. It sadly only works with ruby 1.8. |
require 'Qt4'
require 'singleton' |
|
I moved all of the classes into their sperate files for readability TODO: there is a way to make ruby autoload smarter… |
require 'libs/GlobalSettings'
require 'libs/CoffeeFile'
require 'libs/TextBox'
require 'libs/Menu'
require 'libs/MenuItem'
require 'libs/Drawer'
require 'libs/ColorButton'
require 'libs/FontButton'
require 'libs/LoadButton'
require 'libs/PrintButton'
require 'libs/QuitButton'
require 'libs/SaveButton'
require 'libs/StatsWidget' |
|
This is the root class that does all of the setting up and displaying. |
class FullScreen < Qt::Widget
include Singleton
attr_accessor :file
def initialize
super |
|
We need to set up all of the settings |
gs = GlobalSettings.instance;
gs.files = [];
gs.currentFile = 0;
gs.files[gs.currentFile] = CoffeeFile.new ""
gs.text = TextBox.new |
|
Layout the textbox |
menu = Menu.new
hbox = Qt::HBoxLayout.new
hbox.addStretch 0
hbox.addStretch 0
hbox.addWidget(gs.text)
hbox.addWidget(menu)
hbox.addStretch 0 |
|
Lay it all out |
grid = Qt::GridLayout.new
grid.addLayout(hbox, 0, 1)
setLayout(grid)
setWindowTitle "Coffee_Shop"
setWindowState(Qt::WindowFullScreen)
end
end |
|
Create the app, define the style sheet and start the application. |
app = Qt::Application.new ARGV
app.setWindowIcon Qt::Icon.new "assets/icons/icon.png" |
|
Splash Screen init |
ss_icon = Qt::Pixmap.new "assets/splash.png"
ss = Qt::SplashScreen.new(ss_icon)
ss.show
GlobalSettings.instance.load
FullScreen.instance.show
app.setStyleSheet GlobalSettings.instance.appStyles
sleep 1
ss.finish(FullScreen.instance)
app.exec |


--- layout: project title: Iceliu- Projects description: Iceliu's projects. Some of them are my academy research, some are just my interest. category: project ---
Here are my projects. Some of them are my academy research, and some are just my interest.


We got tables!
- matrix distributed eyeballs
- recontextualize value-added partnerships
- transform best-of-breed action-items
- unleash customized supply-chains
- envisioneer end-to-end solutions
- extend value-added portals
- iterate front-end bandwidth
- grow web-enabled experiences
- extend out-of-the-box markets
- orchestrate holistic metrics
- optimize global communities


Moon, Abe meet briefly, agree to more talks to settle row
by The Associated PressSEOUL, South Korea (AP) — South Korea says President Moon Jae-in and Japanese Prime Minister Shinzo Abe called for more dialogue between the countries to settle a deep row over trade and history in the first one-on-one meeting between the leaders in more than a year.
Seoul’s presidential Blue House says Moon talked with Abe for 11 minutes on Monday on the sidelines of a regional summit in Bangkok where they “reaffirmed the principle of resolving pending bilateral issues through dialogue.”
The two U.S. allies in past months have seen their relations sink to a low unseen in decades over South Korean court rulings calling for Japanese companies to offer reparations to aging South Korean plaintiffs for their World War II forced labor and Japan’s strengthened controls on certain technology exports to South Korea.
The Associated Press


Weeks of Goals Met:
loading
Highest Number of Distractions:
Average Number of Distractions:
Lowest Number of Distractions:
Weekly Goal
Distractions, Goal Met
Distractions, Goal Not Met


Actions, resources, and condition keys for Amazon Mechanical Turk
Amazon Mechanical Turk (service prefix:
mechanicalturk
) provides the following service-specific resources, actions, and condition context keys for use in IAM permission policies.
References:
-
Learn how to configure this service .
-
View a list of the API operations available for this service .
-
Learn how to secure this service and its resources by using IAM permission policies.
Topics
Actions defined by Amazon Mechanical Turk
You can specify the following actions in the
Action
element of an IAM policy statement. Use policies to grant permissions to perform an operation in AWS. When you use an action in a policy, you usually allow or deny access to the API operation or CLI command with the same name. However, in some cases, a single action controls access to more than one operation. Alternatively, some operations require several different actions.
The
Resource types
column of the Actions table indicates whether each action supports resource-level permissions. If there is no value for this column, you must specify all resources ("*") to which the policy applies in the
Resource
element of your policy statement. If the column includes a resource type, then you can specify an ARN of that type in a statement with that action. If the action has one or more required resources, the caller must have permission to use the action with those resources. Required resources are indicated in the table with an asterisk (*). If you limit resource access with the
Resource
element in an IAM policy, you must include an ARN or pattern for each required resource type. Some actions support multiple resource types. If the resource type is optional (not indicated as required), then you can choose to use one of the optional resource types.
The
Condition keys
column of the Actions table includes keys that you can specify in a policy statement's
Condition
element. For more information on the condition keys that are associated with resources for the service, see the
Condition keys
column of the Resource types table.
For details about the columns in the following table, see Actions table .
| Actions | Description | Access level | Resource types (*required) | Condition keys | Dependent actions |
|---|---|---|---|---|---|
| AcceptQualificationRequest | The AcceptQualificationRequest operation grants a Worker's request for a Qualification | Write | |||
| ApproveAssignment | The ApproveAssignment operation approves the results of a completed assignment | Write | |||
| AssociateQualificationWithWorker | The AssociateQualificationWithWorker operation gives a Worker a Qualification | Write | |||
| CreateAdditionalAssignmentsForHIT | The CreateAdditionalAssignmentsForHIT operation increases the maximum number of assignments of an existing HIT | Write | |||
| CreateHIT | The CreateHIT operation creates a new HIT (Human Intelligence Task) | Write | |||
| CreateHITType | The CreateHITType operation creates a new HIT type | Write | |||
| CreateHITWithHITType | The CreateHITWithHITType operation creates a new Human Intelligence Task (HIT) using an existing HITTypeID generated by the CreateHITType operation | Write | |||
| CreateQualificationType | The CreateQualificationType operation creates a new Qualification type, which is represented by a QualificationType data structure | Write | |||
| CreateWorkerBlock | The CreateWorkerBlock operation allows you to prevent a Worker from working on your HITs | Write | |||
| DeleteHIT | The DeleteHIT operation disposes of a HIT that is no longer needed | Write | |||
| DeleteQualificationType | The DeleteQualificationType disposes a Qualification type and disposes any HIT types that are associated with the Qualification type | Write | |||
| DeleteWorkerBlock | The DeleteWorkerBlock operation allows you to reinstate a blocked Worker to work on your HITs | Write | |||
| DisassociateQualificationFromWorker | The DisassociateQualificationFromWorker revokes a previously granted Qualification from a user | Write | |||
| GetAccountBalance | The GetAccountBalance operation retrieves the amount of money in your Amazon Mechanical Turk account | Read | |||
| GetAssignment | The GetAssignment retrieves an assignment with an AssignmentStatus value of Submitted, Approved, or Rejected, using the assignment's ID | Read | |||
| GetFileUploadURL | The GetFileUploadURL operation generates and returns a temporary URL | Read | |||
| GetHIT | The GetHIT operation retrieves the details of the specified HIT | Read | |||
| GetQualificationScore | The GetQualificationScore operation returns the value of a Worker's Qualification for a given Qualification type | Read | |||
| GetQualificationType | The GetQualificationType operation retrieves information about a Qualification type using its ID | Read | |||
| ListAssignmentsForHIT | The ListAssignmentsForHIT operation retrieves completed assignments for a HIT | List | |||
| ListBonusPayments | The ListBonusPayments operation retrieves the amounts of bonuses you have paid to Workers for a given HIT or assignment | List | |||
| ListHITs | The ListHITs operation returns all of a Requester's HITs | List | |||
| ListHITsForQualificationType | The ListHITsForQualificationType operation returns the HITs that use the given QualififcationType for a QualificationRequirement | List | |||
| ListQualificationRequests | The ListQualificationRequests operation retrieves requests for Qualifications of a particular Qualification type | List | |||
| ListQualificationTypes | The ListQualificationTypes operation searches for Qualification types using the specified search query, and returns a list of Qualification types | List | |||
| ListReviewPolicyResultsForHIT | The ListReviewPolicyResultsForHIT operation retrieves the computed results and the actions taken in the course of executing your Review Policies during a CreateHIT operation | List | |||
| ListReviewableHITs | The ListReviewableHITs operation returns all of a Requester's HITs that have not been approved or rejected | List | |||
| ListWorkerBlocks | The ListWorkersBlocks operation retrieves a list of Workers who are blocked from working on your HITs | List | |||
| ListWorkersWithQualificationType | The ListWorkersWithQualificationType operation returns all of the Workers with a given Qualification type | List | |||
| NotifyWorkers | The NotifyWorkers operation sends an email to one or more Workers that you specify with the Worker ID | Write | |||
| RejectAssignment | The RejectAssignment operation rejects the results of a completed assignment | Write | |||
| RejectQualificationRequest | The RejectQualificationRequest operation rejects a user's request for a Qualification | Write | |||
| SendBonus | The SendBonus operation issues a payment of money from your account to a Worker | Write | |||
| SendTestEventNotification | The SendTestEventNotification operation causes Amazon Mechanical Turk to send a notification message as if a HIT event occurred, according to the provided notification specification | Write | |||
| UpdateExpirationForHIT | The UpdateExpirationForHIT operation allows you extend the expiration time of a HIT beyond is current expiration or expire a HIT immediately | Write | |||
| UpdateHITReviewStatus | The UpdateHITReviewStatus operation toggles the status of a HIT | Write | |||
| UpdateHITTypeOfHIT | The UpdateHITTypeOfHIT operation allows you to change the HITType properties of a HIT | Write | |||
| UpdateNotificationSettings | The UpdateNotificationSettings operation creates, updates, disables or re-enables notifications for a HIT type | Write | |||
| UpdateQualificationType | The UpdateQualificationType operation modifies the attributes of an existing Qualification type, which is represented by a QualificationType data structure | Write |
Resource types defined by Amazon Mechanical Turk
Amazon Mechanical Turk does not support specifying a resource ARN in the
Resource
element of an IAM policy statement. To allow access to Amazon Mechanical Turk, specify
"Resource": "*"
in your policy.
Condition keys for Amazon Mechanical Turk
MechanicalTurk has no service-specific context keys that can be used in the
Condition
element of policy statements. For the list of the global context keys that are available to all services, see
Available keys for conditions
.


A completed project that accurately displays both the Euclidean and Network distances from the NEIU campus.
Network analyst and the buffer tool were used to create these maps.
A completed project using QGIS open source software to map land use change in Lindenhurst, Illinois.
The Quick Maps Plugin as well as the layer blending tool were used.
A completed project using ArcGIS and census data to map the average income in each county in the Metro East.
A completed project that used the Python window to create a script to make a processing tool.
The tool created allows the user to input a folder and project it, clip it and store it in a geodatabase.


Dear
Regards, OpenBanking NG.
Building Next Generation API's
© OpenBanking Nigeria 4 Rock Drive, Lekki Phase 1 Lagos, Nigeria
Blog GitHub Twitter Facebook LinkedIn


One of the questions we had to ask ourselves when we developed the PHP-CPP library was whether we should follow PHP conventions or follow C++ conventions for many of the library features.
In PHP scripts you can use magic methods and magic interfaces to add special behavior to classes. With C++ classes you can achieve the same, but by using technologies like operator overloading, implicit constructors and casting operators. The PHP __invoke() method for example, is more or less identical to operator () in C++. The question that we asked ourselves was whether we should automatically pass the __invoke PHP method to a C++ operator() call - or use the same __invoke() method name in C++ too?
We have decided to follow the PHP conventions, and use magic methods and magic interfaces in C++ as well - although we must admit that having methods that start with two underscores does not make the code look very pretty. But by using magic methods the switch from PHP to C++ is kept simpler for starting C++ programmers. And on top of that, not all magic methods and interfaces could have been implemented with core C++ features (like operator overloading), so we had to use some magic methods and/or interfaces anyway. That's why we decided that because we had to use some magic methods in C++, we could just as well follow PHP completely and support all magic PHP methods in C++ too.
Besides the magic methods and interfaces that are available in PHP user space, the Zend engine has additional features that are not exposed to PHP user space scripts. Features that are only accessible for extension programmers. The PHP-CPP library also supports these special features. This means that if you use PHP-CPP for writing functions and classes, you can achieve things that can not be achieved by writing pure PHP code.
Internally, the Zend engine has special casting routines to cast objects to integers, to booleans and to floating point values. For one reason or another, a PHP script can only implement the __toString() method, while all other casting operations are kept away from it. The PHP-CPP library solves this limitation, and allows one to implement the other casting functions as well.
One of the design goals of the PHP-CPP library is to stay as close to PHP as possible. For that reason the casting functions have been given names that match the __toString() method: __toInteger(), __toFloat(), and __toBool().
#include <phpcpp.h>
/**
* A sample class, with methods to cast objects to scalars
*/
class MyClass : public Php::Base
{
public:
/**
* C++ constructor and C++ destructpr
*/
MyClass() {}
virtual ~MyClass() {}
/**
* Cast to a string
*
* Note that now we use const char* as return value, and not Php::Value.
* The __toString function is detected at compile time, and it does
* not have a fixed signature. You can return any value that can be picked
* up by a Php::Value object.
*
* @return const char *
*/
const char *__toString()
{
return "abcd";
}
/**
* Cast to a integer
* @return long
*/
long __toInteger()
{
return 1234;
}
/**
* Cast to a floating point number
* @return double
*/
double __toFloat()
{
return 88.88;
}
/**
* Cast to a boolean
* @return bool
*/
bool __toBool()
{
return true;
}
};
/**
* Switch to C context to ensure that the get_module() function
* is callable by C programs (which the Zend engine is)
*/
extern "C" {
/**
* Startup function that is called by the Zend engine
* to retrieve all information about the extension
* @return void*
*/
PHPCPP_EXPORT void *get_module() {
// extension object
static Php::Extension myExtension("my_extension", "1.0");
// description of the class so that PHP knows
// which methods are accessible
Php::Class<MyClass> myClass("MyClass");
// add the class to the extension
myExtension.add(std::move(myClass));
// return the extension
return myExtension;
}
}
The casting methods are automatically called when an object is casted to a scalar type, or when it is used in a scalar context. The following example demonstrates this.
<?php
// initialize an object
$object = new MyClass();
// cast it
echo((string)$object."\n");
echo((int)$object."\n");
echo((bool)$object."\n");
echo((float)$object."\n");
?>
If you compare two objects in PHP with comparison operators like < ==, != > (and the obvious others), the Zend engine runs an object comparison function. The PHP-CPP library interupts this method, and passes the comparison method to the __compare method of your class. In other words, if you want to install a custom comparison operator, you can do so by implementing __compare().
#include <phpcpp.h>
/**
* A sample class, that shows how objects can be compared
*/
class MyClass : public Php::Base
{
private:
/**
* Internal value of the class
* @var int
*/
int _value;
public:
/**
* C++ constructor
*/
MyClass()
{
// start with random value
_value = rand();
}
/**
* C++ destructor
*/
virtual ~MyClass() {}
/**
* Cast the object to a string
* @return std::string
*/
std::string __toString()
{
return std::to_string(_value);
}
/**
* Compare with a different object
* @param that
* @return int
*/
int __compare(const MyClass &that) const
{
return _value - that._value;
}
};
/**
* Switch to C context to ensure that the get_module() function
* is callable by C programs (which the Zend engine is)
*/
extern "C" {
/**
* Startup function that is called by the Zend engine
* to retrieve all information about the extension
* @return void*
*/
PHPCPP_EXPORT void *get_module() {
// extension object
static Php::Extension myExtension("my_extension", "1.0");
// description of the class so that PHP knows
// which methods are accessible
Php::Class<MyClass> myClass("MyClass");
// add the class to the extension
myExtension.add(std::move(myClass));
// return the extension
return myExtension;
}
}
The comparison function is automatically called when you try to compare objects in PHP scripts. It should return 0 when the two objects are identical, a value less than zero when the 'this' object is smaller, and higher than zero when 'this' is bigger.
<?php
// initialize a couple of objects
$object1 = new MyClass();
$object2 = new MyClass();
$object3 = new MyClass();
// compare the objects
if ($object1 < $object2)
{
echo("$object1 is smaller than $object2\n");
}
else
{
echo("$object1 is bigger than $object2\n");
}
if ($object1 == $object3)
{
echo("$object1 is equal to $object3\n");
}
else
{
echo("$object1 is not equal to $object3\n");
}
?>
The above PHP script could produce the following output:
// output<PHONE_NUMBER> is bigger than 151717746<PHONE_NUMBER> is not equal to 627198306


The icon module provides full access to the eBay iconography via the <svg> tag (i.e. foreground icons) and the <span> tag (i.e. background icons).
By default, the icon module bundles all CSS for both types of tag. However, the background icon CSS contains a base64 data-url for every icon in the set, therefore significantly increasing CSS payload. For this reason, Skin also provides the ability to bring in background or foreground CSS independently, via their own modules.
Below we give a quick, introductory example of how to use each type of icon; followed up by the full list of icons.
Foregound icons use the <svg> tag and can inherit their colour via the CSS cascade.
To avoid gigantic icons when in a non-CSS state, we use the SVG width and height attributes to override the browser's default 300x150 size.
Background icons use the <span> tag. Their colour fixed in base64 and cannot be changed via CSS.
Remember, this module contains a base64 encoded string for every icon in the set, therefore a significant increase in CSS payload will occur.
NOTE: Skin removes all mouse and touch events on foreground icons due to a bug in IE. To add events to these icons you should wrap them in another element and attach your events there.
An icon can be presentational or non-presentational.
A presentational icon provides no additional content, context or affordance to a page, section or widget.
Presentational foreground icons require aria-hidden="true".
Presentational background icons require no special treatment. Assistive technology simply ignores empty span tags.
A non-presentational icon provides essential content, context or affordance to a page, section or widget.
Non-presentational icons nested inside of an interactive element (typically a button or link) require no special treatment. The label and role of the interactive element is sufficient for assistive technology.
Non-presentational icons not nested inside of an interactive element require role="img" and an aria-label.
The table below displays all icons, in default size and small size (DS6 only, where applicable). Append -small to the icon name to render the small version.
| Name | Default | Small |
|---|---|---|
| filter-gallery | ||
| filter-single | ||
| filter-list | ||
| checkbox-checked | ||
| checkbox-unchecked | ||
| radio-checked | ||
| radio-unchecked | ||
| tick | ||
| pause | ||
| play | ||
| attention | ||
| confirmation | ||
| information | ||
| attention-filled | ||
| confirmation-filled | ||
| information-filled | ||
| chevron-down | ||
| chevron-down-bold | ||
| chevron-left | ||
| chevron-up | ||
| chevron-up-bold | ||
| chevron-right | ||
| chevron-right | ||
| arrow-left | ||
| arrow-move | ||
| arrow-right | ||
| arrow-right-bold | ||
| cart | ||
| close | ||
| menu | ||
| notification | ||
| overflow | ||
| search | ||
| search-bold | ||
| bids | ||
| categories | ||
| deals | ||
| download | ||
| event | ||
| help | ||
| home | ||
| messages | ||
| profile | ||
| purchases | ||
| selling | ||
| settings | ||
| add | ||
| window | ||
| camera | ||
| clear | ||
| clock | ||
| watch | ||
| following | ||
| send | ||
| refresh | ||
| edit | ||
| wallet | ||
| mic | ||
| red-laser | ||
| photo-rotate | ||
| photo-crop | ||
| photo-select-all | ||
| photo-select-none | ||
| photo-brightness | ||
| photo-gallery | ||
| photo-gallery-more | ||
| delete | ||
| top-seller | ||
| fast-n-free | ||
| truck | ||
| thumbs-up | ||
| thumbs-up-selected | ||
| thumbs-down | ||
| thumbs-down-selected | ||
| icon-star | ||
| icon-star-empty | ||
| icon-star-filled | ||
| icon-star-filled-grey | ||
| icon-star-half | ||
| icon-star-undefined | ||
| icon-star-undefined | ||
| icon-save | ||
| icon-save-selected | ||
| icon-save-bold |
For a full list of DS4 icons, please visit the archive.
{% endif %}For pages that do not load Skin under node, but only use the CSS from it, inline icons need to be included in the HTML page.
In order to include inline icons, enter the following markup inside your page's body <body> along with any <symbol> that are needed on the page
View inline icon source and pick the icons you need to load on the page.
{% highlight html %} {% endhighlight %}Then you can display the icon in the page by referring to the symbol ID.
{% highlight html %} {% endhighlight %}


Puzzle 10
There is a pond with seven lily pads in a line that allow frogs to
cross from one side of the pond to the other.
One day, three frogs approach from the West and want to cross to the East;
meanwhile three frogs approach from the East and want to cross to the West.
eeewww
- Only one frog can move at a time.
- Only one frog per lily pad.
-
A frog can either hop forward one lily pad
(if that lily pad is vacant), or jump over
one other frog onto a vacant lily pad.
- Frogs can only hop or jump forwards (and they can’t turn round
and go the other way)
How can we get all the eastbound frogs ⓔ to the east
and all the westbound frogs ⓦ to the west,
so that the final positions look like this
wwweee
Puzzle 10 step 1
As always, our first step is to
eliminate impossibles.
In the frog-jumping puzzle the impossible is for a frog to jump
over two (or more) other frogs.
So the following situations (among others)
prevent us from reaching a solution because a westbound
frog needs to jump over two eastbound frogs to progress.
eeewww
eweeww
ewweew
From this we can see that
a frog must not hop or jump so that it ends up immediately behind one
of its own group (unless it has cleared all of the frogs from the other
group). This situation is easy to avoid.
However, there may be situations where whatever we do will lead to an
impossibility.
eeweww
In the situation above, if ⓔ jumps we get the impossible situation
eweeww
and if ⓦ jumps we get a different impossible situation
eewwew
Puzzle 10 step 2
It may be too difficult to find all of these situations that inevitably
lead to an impossibility.
So how do we proceed?
A technique we can use is to
solve a simpler puzzle!
One way of doing this is to posit a situation from which we can
easily solve the original puzzle then try to reach this intermediate
situation from the starting position.
So, if we could get the frogs into the following positions, we
should be easily able to solve the puzzle.
ewewew
Try to solve the puzzle from this position before you read the
rest of the chapter.
Use coins or playing cards to represent the two groups of
frogs and make sure you know where the vacant lily pad is at all times.
Puzzle 10 step 3
A second way of making a simpler puzzle is to
reduce the size of the puzzle.
So let’s try with only two eastbound and two westbound frogs.
eeww
and let’s try to reach either of the following intermediate positions.
wewe
wewe
Again, try to solve this simpler puzzle before reading the rest
of the chapter.
If you moved ⓔ first (with a hop rather than a jump!)
then you should be easily able to reach the following position:
wewe
And the steps to reach this positions would have been:
- ⓔ hop
- ⓦ jump, ⓦ hop
- ⓔ jump, ⓔ jump
Puzzle 10 step 4
Now, before finishing this puzzle,
let us imagine that another eastbound frog
and another westbound frog join the queue of frogs wishing to cross the pond
ewewew
We are only one move away (an ⓔ hop) from the position in step 2.
A position from which we have already solved the puzzle.
So, to reach the position in step 2,
our sequence of moves would have been:
- ⓔ hop
- ⓦ jump, ⓦ hop
- ⓔ jump, ⓔ jump, ⓔ hop
You should be able to see that it makes no difference if the two extra
frogs joined the queue at the beginning of step 3
or the beginning of step 4.
You should also notice that there is a pattern to the sequence of moves.
Each group makes a set of moves that always ends in a hop.
Before the hop there are zero or more jumps.
The number of jumps increases by one each time.
In fact, what we have found is a
sieve.
This will allow is to solve the jumping frogs puzzle with any number of
frogs.


Brain Judge
-
take: 看法；意见 the particular opinion or idea that sb has about sth
-
例句：
What's his take on the plan?
他对这项计划有什么意见？
不同人的相同意见
-
consensus: 一致的意见；共识 an opinion that all members of a group agree with
不同人的不同意见
-
controversial: 引起争论的；有争议的causing a lot of angry public discussion and disagreement
-
questionable: 可疑的；有问题的；未必准确（或正确）的that you have doubts about because you think it is not accurate or correct


The Football fantasy game Cartola is a online game where each round of the brasilian competition where you can pick a team of real athletes and pontuate based on the perfomance of the chosen athletes. The game also has online rankings and competitions.
Each athlete cost cartoletas, the virtual coin of the game, the game objective is to maximize the number of points of your team, given an your amount of cartoletas.
- Which will be the pontuation of a athlete in the next round?
- Within my cartoletas, what players do I choose?
The first problem is prediction problem, find the next pontuation of an athlete is not trivial and I shall not work this part of the problem here, maybe in a next opportunity. Right now, I will estimate the next pontuation with simply the average of the previous pontuations.
The second problem is the knapsack problem, each player has a cost and some metric that we want to maximize, in this case the average pontuation. We want to find the maximum pontuation we can find given our number of cartoletas. To solve this problem we will use Python and Gurobi, a tool for mathmatical optimization.
The first part of our code is to get the data from Cartola API. This is simples, so I’ll let the code here:
import pandas as pd
import requests as req
import json
def get_df_players():
base_url = 'https://api.cartolafc.globo.com'
mercado_path = '/atletas/mercado'
res = req.get(base_url + mercado_path)
df = pd.json_normalize(res.json()["atletas"])
df = df[['atleta_id', 'slug', 'posicao_id', 'status_id', 'preco_num', 'media_num', 'jogos_num']]
return df
This file is called utils.py
. It’s posible to add other available data of Cartola API in our dataframe, but I’ll use just these ones. I added these lines to simplify some functionalities:
from utils import get_df_players
import gurobipy as gp
from gurobipy import GRB
df = get_df_players()
N = len(df)
cost = df['preco_num']
cartoletas = 125
medias = df['media_num']
jogos = df['jogos_num']
posicoes = df['posicao_id']
status = df['status_id']
So, we start the model:
m = gp.Model("Mochila")
And add the variables gurobi will use to know which player should or should not be added in the knapsack.
x = m.addVars(N, vtype=GRB.BINARY)
The GRB.BINARY
tells that a player can’t be added in parts, this is, our knapsack is a binary integer problem, the player is or isn’t present in the knapsack. There is no such thing as adding half a player or even adding 1 player, there is just the presence or abstinence of player in the knapsack.
Now we add the function which define what is to maximize within our model, in our case, the player average perfomance:
m.setObjective(sum(medias[i]*x[i] for i in range(N)), GRB.MAXIMIZE)
Após adicionar a função a ser maximizada, temos que colocar as restrições do modelo, o cartola possibilita que apenas 12 atletas façam parte de seu plantel, sendo um deles o técnico e um o goleiro, os outros jogadores vão depender da formação escolhida. Aqui eu decidi pela formação \(4\)-\(3\)-\(3\), com \(2\) zagueiros, \(2\) laterais, \(3\) meias e \(3\) atacantes.
After adding a function to be maximized, we must add the restrictions of our model. This is a important part of the modelling proccess and in this case is a caveat of cartola fantasy. So things like, the team formation (4-3-3), the number of players, the total cost, the position of each player, etc, will be taken into the model here.
m.addConstr(sum(jogos[i]*x[i] for i in range(N)) >= 7) # Each player should have played at least 7 games
m.addConstr(sum(cost[i]*x[i] for i in range(N)) <= cartoletas) # The cost of the team must be smaller or equal than our number of cartoletas
m.addConstr(sum(1*x[i] for i in range(N)) <= 12) # There must be 12 players (11 players + 1 coach)
m.addConstr(sum((posicoes[i] == 1)*1*x[i] for i in range(N)) == 1) # Just 1 Goalkeeper
m.addConstr(sum((posicoes[i] == 2)*1*x[i] for i in range(N)) == 2) # Just 2 Full-backs
m.addConstr(sum((posicoes[i] == 3)*1*x[i] for i in range(N)) == 2) # Just 2 Center-backs
m.addConstr(sum((posicoes[i] == 4)*1*x[i] for i in range(N)) == 3) # Just 3 Midfielders
m.addConstr(sum((posicoes[i] == 5)*1*x[i] for i in range(N)) == 3) # Just 3 Fowards
m.addConstr(sum((posicoes[i] == 6)*1*x[i] for i in range(N)) == 1) # Just 1 Coach
m.addConstr(sum((status[i] == 7)*1*x[i] for i in range(N)) == 12) # Just players with the "available" status
The restriction of just “available” athletes could be done directly in the dataframe via an filter, but I wanna show the capabilities of gurobi modelling. Now, let the optimizer do its job:
m.optimize()
Just see which players the model chose:
print("\nOptimal Solution Value:\t"+str(m.objVal))
print("Weight:\t"+str(sum(cost[i]*x[i].X for i in range(N))))
for i in range(N):
if (x[i].X != 0):
print("Item "+str(i+1)+": "+str(x[i].X) + " - Name: " + df.iloc[i]['slug'])
Well, if you’ve ever played cartola and did the tests, you know the chosen model is not good. It’s an insensible solution, this is only because of our metric, just the players average is not a good way of estimating performance. To improve this model we would need to come up with a different estimative.


CADEC 2017 - Pär Wenåker, Anders Asplund
Creator of Reactive Extensions @ Microsoft
https://youtu.be/sTSQlYX5DU0?t=173
"I have absolutely no f***ing clue!"
Better resource utilisation
Future<Response> f = httpClient.get("http://www.gp.se/");
Response r = f.get(); // Blocking!!!
Not Asychronous!!
httpClient.get("http://www.gp.se", response -> {
/* Handle response */
});
httpClient.get("http://www.gp.se", response -> {
/* Handle response */
});
httpClient.get("http://www.dn.se", response -> {
/* Handle response */
});
Needs state machine...
State state = ...;
httpClient.get("http://www.gp.se", response -> {
state.addGp(response);
});
httpClient.get("http://www.dn.se", response -> {
state.addDn(response);
});
Needs synchronization!!
State state = ...;
httpClient.get("http://www.gp.se", response -> {
synchronized(state) {
state.addGp(response);
}
});
httpClient.get("http://www.dn.se", response -> {
synchronized(state) {
state.addDn(response);
}
});
"Code that deals with more than one event or asynchronous computation gets complicated quickly as it needs to build a state-machine to deal with ordering issues.
Next to this, the code needs to deal with successful and failure termination of each separate computation. This leads to code that doesn’t follow normal control-flow, is hard to understand and hard to maintain."
http://go.microsoft.com/fwlink/?LinkID=205219
Reactive Programming to rescue!!
Is not easy and has a significant learning curve!
Requires a shift from imperative programing to asynchronous, non-blocking and functional style.
Do not rely on side-effects and mutable state!
Observable<Tweets> twitterFirehose = ...
twitterFirehose
.sample(5, MILLISECONDS)
.filter(t -> hasImage(t))
.flatMap(t -> getImage(t.image))
.publish()
tweets.subscribe(/* Do something */);
tweets.subscribe(/* Do something else */);
CompletableFuture<Response> response1 =
httpClient.get("http://gp.se");
CompletableFuture<Response> response2 =
httpClient.get("http://dn.se");
CompletableFuture<State> state =
response1.thenCombine(response2,
(value1, value2) -> f(value1, value2)
);
state.thenAccept(s -> /* Handle result */)
.exceptionally(/*Handle error*/ return errorStatus; });
Observable<Response> resp1 = httpClient.get("http://gp.se");
Observable<Response> resp2 = httpClient.get("http://dn.se");
Observable<Status> status =
resp1.zipWith(resp2, (r1,r2) -> f(r1,r2))
.onErrorReturn(t -> {/*Handle error*/ return errorStatus; });
status.subscribe(/* Handle result */)
CompletableFuture handles only one element!
Observables!
a combination of the iterator and observer patterns!
PULL BASED
PUSH BASED
PUSH BASED
Observable<Integer> obs = Observable.create(observer -> {
observer.onNext(1);
observer.onNext(2);
observer.onComplete();
});
println("Before subscribe")
obs.subscribe(v -> println(v));
println("After subscribe")
Thread[main,5,main] : Before subscribe
Thread[main,5,main] : 1
Thread[main,5,main] : 2
Thread[main,5,main] : After subscribe
Observable<Integer> obs = Observable.create(observer -> {
new Thread(() -> {
observer.onNext(1);
observer.onNext(2);
observer.onComplete();
}).start();
});
println("Before subscribe")
obs.subscribe(v -> println(v));
println("After subscribe")
Thread[main,5,main] : Before subscribe
Thread[main,5,main] : After subscribe
Thread[Thread-0,5,main] : 1
Thread[Thread-0,5,main] : 2
Don't do this...
Observable<Response> obs = Observable.create(observer -> {
httpClient.get("http://www.gp.se", response -> {
observer.onNext(response);
observer.onComplete();
});
});
obs.subscribe(response -> /* Handle output */);
Single<Response> obs = Single.create(observer -> {
httpClient.get("http://www.gp.se", response -> {
observer.onSuccess(response);
});
});
obs.subscribe(response -> /* Handle output */);
| Single | Multiple | |
| Synchronous | T get() | Iterator<T> |
| Asynchronous | Future<T> | Observable<T> |
http://bit.ly/2hU6wdA
https://youtu.be/fabN6HNZ2qY
Terminates with onComplete
Terminates with onError
Observable<Integer> obs1 = ...
Observable<Integer> obs2 = obs1.filter(x -> x%2 == 0)
Observable<Integer> obs1 = ...
Observable<Integer> obs2 = obs1.map(x -> 2 * x)
Observable<Integer> obs1 = ...
Observable<Integer> obs2 = obs1.flatMap(x -> Observable.just(x, x+1))
Observable<Integer> obs1 = ...
Observable<Integer> obs2 = ...
Observable<Integer> obs3 = obs1.zipWith(obs2, (a,b) -> a+b)
http://www.reactive-streams.org
"Until now, one missing category was "push" style operations on items as they become available from an active source." /Doug Lea
@RestController
public class PersonController {
private final PersonRepository repository;
public PersonController(PersonRepository repository) {
this.repository = repository;
}
@PostMapping("/person")
Mono<Void> create(@RequestBody Publisher<Person> personStream) {
return this.repository.save(personStream).then();
}
@GetMapping("/person")
Flux<Person> list() {
return this.repository.findAll();
}
@GetMapping("/person/{id}")
Mono<Person> findById(@PathVariable String id) {
return this.repository.findOne(id);
}
}


Before Change
self.sensor_type = sensor_type
// here we keep the temperature values after removing outliers
self.filtered_temperature = []
// here we keep the filtered humidity values after removing the outliers
self.filtered_humidity = []
// we are using an event so we can close the thread as soon as KeyboardInterrupt is raised
self.event = threading.Event()
if self.sensor_type == 0:
self.set_descriptor("Blue DHT Sensor")
else:
self.set_descriptor("White DHT Sensor")
except Exception as e:
print("DHTSensor: {}".format(e))
raise ValueError("DHT Sensor not found")
After Change
print(e)
raise IOError("Distance Sensor not found")
self.use_mutex = use_mutex
if self.use_mutex is True:
Mutex.__init__(self)
self.set_descriptor("Distance Sensor")
// Returns the values in cms
def read_mm(self):


{% extends "base.html" %} {% block content %}
ContactOtter is a work-in-progress for better contact management for small groups families, a friendly CRM. Right now, you can add contacts, log when you chat with them, and share your contact book with others
ContactOtter is alpha software, and currently comes with no warranty. You use it at your own risk.


Thank you for Signing up.  Share them, let others enjoy and like. As you do yourself.
Like it, share it, love it...Live it


HELLO,
Apart from being a web developer, I enjoy most of my time being outdoors. During the warmer months here in Houston, I enjoy hiking and biking. When forced indoors, I spend a large amount of my free time exploring the latest technolgy advancements in the web development world.
Major: Computer Science; Minor: Mathematics
GPA: 3.70
GPA: 4.00


My work cannot be measured in pixels. It involves tasks way beyond that physical entity. I am working on complete study cases. In the meantime I am showing a series of snapshots taken from both client and personal work Want to see more examples? Email me.
Design World offers Web Devolepment and Gsraphic design services of the highest quality and is based in Bangalore,
working World wide.
Maintain a cohesive identity with a brand system. Establish your logos, fonts, colors and more, for consistency and unity.
Tell your brand’s story while maximizing leads, with a custom website that will out-perform your competition!
I’ll
ensure that your brand stands out from the crowd with premium visual design solutions
Thanks for looking at my work.


An automobile’s on-board diagnostics (OBD) port allows for access to a wealth of system diagnostics and performance information. The OBD-II diagnostics connector provides a standardized means of connecting after-market products to the automobile. Triad Semiconductor’s extensive IC design experience in the automotive market positions us with an IP portfolio that matches OBD port applications: ARM Cortex processors, analog, CAN, LIN, and more.
OBD-II interface compatible products include:
- Hand-held diagnostic code scanners
- Emission testing and monitoring
- Vehicle telematics
- Insurance safe-driver monitoring devices
- OBD-II to wireless (Bluetooth Low Energy) diagnostic devices
Automotive OBD-II Port Product Requirements
- Rapid time to market
- CAN bus interfacing
- Combination of diverse functions: precision analog, power management, microprocessors, non-volitile memory
- Small size
- Cost optimization of high-volume applications


Preparing search index...
The search index is not available
shevchenko.js - v3.0.4
shevchenko.js - v3.0.4
DeclensionInput
Type alias DeclensionInput
Declension
Input
:
Anthroponym
&
{
gender
:
GrammaticalGender
;
}
The input parameters for anthroponym declension.
Try it out
API Specification
Source Code
License
Migration Guide
Settings
Member Visibility
Protected
Private
Inherited
Theme
OS
Light
Dark
Modules
shevchenko.js -
v3.0.4
Grammatical
Case
Grammatical
Gender
Anthroponym
Declension
Input
Declension
Output
Gender
Detection
Input
Gender
Detection
Output
detect
Gender
in
Ablative
in
Accusative
in
Dative
in
Genitive
in
Locative
in
Nominative
in
Vocative
Generated using
TypeDoc
The input parameters for anthroponym declension.


Geoff made it a lot harder to guess his password by using a combination of uppercase and lowercase characters, as well as numbers. If he'd wanted to make it even harder to guess, he should've used special characters like: '%', '&', '£', '_' and '@' .
We’ve finally regained control of everything thanks to you, {{Four.user_name}}, but Geoff knows we haven’t changed the master password yet. Can you create a strong and safe password using the knowledge you’ve gained so far? Remember, Geoff knows your name!
Do not type a password you have used before!
To crack your password, it would take a hacker:
{{Four.timeToCrack()}}


Input Types : ComplexSpectrumSpectrumTimeFrequency
Output Types : ComplexSpectrumSpectrumTimeFrequency
Date : 04 Mar 2001
The user can also choose to smooth the edges of the frequency cutoff using a choice of window functions. The functions are those given in WindowFnc. These are useful if the filtered spectrum is to be inverted back to the time-domain: a sharp cutoff gives unwanted oscillations in the time-domain that are suppressed if the cutoff is smoothed.
The user can also choose to reduce the Nyquist
frequency of the output set to the upper-frequency cutoff. The Nyquist
frequency is the highest frequency that can be held in a spectral data
set. When the data set is inverted by FFT,
the time-domain result will have a sampling frequency that is twice the
Nyquist frequency. Thus, if the user reduces the Nyquist frequency when
filtering, then the time-domain inversion will be sampled at twice the
rate of the upper-frequency cutoff. This ensures that the time-domain set
contains no more samples than necessary.
The first slider chooses the lower-frequency cutoff in Hz. All data at frequencies below this are set to zero.
The second slider chooses the upper-frequency cutoff in Hz. All data at frequencies above this are set to zero.
The third line is a check box. Select this if you want narrow-band output. If it is not selected (the default) then the output spectral data set will have the same length as the input but the filtered data elements will be set to zero. If you choose narrow-band, then these zeros will not be present in the output: this saves storage. The FFT unit will still invert this properly.
The fourth choice is the window function that can be used to smooth the edges of the frequency cutoffs.
The fifth choice is a check box. Select this if you want the Nyquist
frequency of the output data set to be reduced to the frequency chosen
in the slider. The output data set will be a full-bandwidth spectrum with
this maximum frequency. See the discussion above
for the meaning of the Nyquist frequency.


Billy Porter, TLC, Ozuna set for Macy’s Thanksgiving Parade
by Mesfin FekaduNEW YORK (AP) — Emmy-winning “Pose” actor Billy Porter, Latin singer Ozuna and Grammy-winning performers Black Eyed Peas, TLC, Chicago and Kelly Rowland will be among the stars celebrating at Macy’s Thanksgiving Day Parade in New York City.
Macy’s said Friday that Ciara, Idina Menzel, Lea Michele, Debbie Gibson, Miss America 2019 Nia Franklin and former NASA astronauts Kay Hire and Janet Kavandi also will participate in the 93rd annual parade on Nov. 28.
The special will air at 9 a.m. EST on NBC’s “Today” show.
Others part of the lineup include the cast and Muppets of “Sesame Street,” That Girl Lay Lay, Natasha Bedingfield, Chris Young, NCT 127, Chris Janson and Josh Dela Cruz.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


Sofoline Interchange: Contractors resume work despite receiving 40% of $32m debt
After a 12-year delay, work has resumed on the Sofoline-Abuakwa Interchange project. This follows the release of funding by government.
It is the second time in a year government has released funds for the project which is 9-years behind schedule.
The amount released is less than 40 per cent of the $32 million certificates raised by contractors.
Nhyira News sources say management of the China Geo-Engineering Corporation said “we have been given something to start working though it is not enough. Currently, as you can see we are working. We are here working.," Safety Officer of CGC, Twumasi Ankrah revealed.
Contractors return to site has been a welcomed relieve for motorists on the main Kumasi-Sunyani road.
They have had to endure undue hardship as a result of heavy vehicular traffic on the Apatrapa-Abuakwa section of the road.
The project has 5-main components, including widening of Komfo Anokye-Abuakwa road and construction of an interchange at Sofoline and Komfo Anokye Teaching Hospital.
The project also involves the construction of 5-underpass bridges.
It was envisaged to solve the heavy vehicular traffic jam on the Komfo Anokye Hospital Sofoline-Abuakwa road.
Work has only been done on the Bekwai Roundabout-Sofoline-Apatrapa Junction section, leaving the Apatrapa-Junction-Abuakwa section with heavy congestion.
Residents of Abuakwa and its environs last month hit the streets over what they said was government's failure to complete the project.
But contractors are back to site to install safety measures on the road. The portion of the Apatrapa Junction-Tanoso road, as well as the Prempeh College portion, are being graded as workers begin new work order.
Lighting, especially on the interchange has been improved as an underpass pedestrian tunnel installed with CCTV cameras is opened to traffic.
" We are improving safety because when you are driving on the bridge, you need to have visibility. At the moment what you see being painted is the base and then they will bring in the white to warn drivers that this is where they are to drive to so that they would not topple over.
“The grader and bulldozer are also working at the other side of the road, " he said.
According to Mr Ankrah, several other works will follow to mark the return of contractors.


{{member.first_name}} {{ member.last_name }} {% if member.disabled_at %} Disabled {% endif %}
{{member.email}}
Member since {{member.created_at.strftime("%d/%m/%Y")}}


You can convert Your docker-compose.yml file here using Kubernetes/Kompose into service files.
This website sends Your docker-compose file to server and converts it. Immediately after conversion while working directory is destroyed.


--- 🌯 🌯 🌯 🌯 🌯 🌯 🌯 ---
We hid the burritos from you. But you found them. So here is the best burrito
MCA{🌯🍩🍪🍍🌶🥑🍦🍅🍿🥗🌭🥓🐳🐔🐁}
you're welcome


Before you install LoopBack, make sure to download and install Node.js (version 8.9.x or higher), a JavaScript runtime.
The LoopBack 4 CLI is a command-line interface that can scaffold a project or extension. The CLI provides the fastest way to get started with a LoopBack 4 project that adheres to best practices.
$ npm install -g @loopback/cli
To create a new project, run the CLI as follows.
$ lb4 app
Answer the prompts as follows.
[?] Project name: getting-started[?] Project description: Getting started tutorial[?] Project root directory: (getting-started)[?] Application class name: StarterApplication[?] Select project build settings: Enable tslint, Enable prettier, Enable mocha, Enable loopbackBuild
The project comes with a "ping" route to test the project. Let's try it out by running the projects.
In a browser, visit http://<IP_ADDRESS>:3000/ping
$ cd getting-started$ npm start
Now that we have a basic project created, it’s time to add our own controller. Let’s add a simple “Hello World” controller as follows.
$ lb4 controller[?] Controller class name: hello[?] What kind of controller would you like to generate? Empty Controller create src/controllers/hello.controller.ts update src/controllers/index.ts Controller Hello was now created in src/controllers/
Paste the following contents into the file /src/controllers/hello.controller.ts
.
import {get }from '@loopback/rest';export class HelloController { @get('/hello') hello(): string {return 'Hello world!'; } }
Start the application using npm start
.
Hello world!
Follow the tutorial to create a real-world application with LoopBack 4.


CHROMIC CHLORIDE - chromic chloride injection, solution
American Regent, Inc.
Disclaimer: This drug has not been found by FDA to be safe and effective, and this labeling has not been approved by FDA. For further information about unapproved drugs, click here.
Rx Only
STERILE, NONPYROGENIC, TRACE ELEMENT
ADDITIVE FOR IV USE AFTER DILUTION
(Chromium 4 mcg/mL)
PRESERVATIVE FREE
Chromic Chloride Injection, USP is a sterile, nonpyrogenic solution intended for use as an additive to solutions for Total Parenteral Nutrition (TPN). Each mL contains Chromic Chloride Hexahydrate 20.5 mcg, Water for Injection q.s. pH adjusted with Hydrochloric Acid if necessary. It delivers elemental Chromium 4 mcg/mL. The 10 mL vial is a single dose preservative free vial. Discard any unused portion.
Trivalent chromium is part of glucose tolerance factor, an activator of insulin-mediated reactions. Chromium helps to maintain normal glucose metabolism and peripheral nerve function.
Providing chromium during TPN prevents development of the following deficiency symptoms: impaired glucose tolerance, ataxia, peripheral neuropathy and a confusional state similar to mild/moderate hepatic encephalopathy.
Chromic Chloride Injection, USP is indicated for use as a supplement to intravenous solutions given for Total Parenteral Nutrition (TPN). Administration helps to maintain plasma levels and to prevent depletion of endogenous stores and subsequent deficiency symptoms.
Chromic Chloride Injection, USP should not be given undiluted by direct injection into a peripheral vein because of the potential for infusion phlebitis and increased renal loss of chromium from a bolus injection.
This product contains aluminum that may be toxic. Aluminum may reach toxic levels with prolonged parenteral administration if kidney function is impaired. Premature neonates are particularly at risk because their kidneys are immature, and they require large amounts of calcium and phosphate solutions, which contain aluminum.
Research indicates that patients with impaired kidney function, including premature neonates, who receive parenteral levels of aluminum at greater than 4 to 5 mcg/kg/day accumulate aluminum at levels associated with central nervous system and bone toxicity. Tissue loading may occur at even lower rates of administration.
In assessing the contribution of chromium supplements to maintenance of normal glucose hemostasis, consideration should be given to the possibility that the patient may be diabetic, in which case oral or intravenous antidiabetic medication may be indicated.
The amount of chromium present in Chromic Chloride Injection, USP is very small, symptoms from chromium toxicity are considered unlikely to occur. Symptoms of toxic chromium reactions include nausea, vomiting, ulcers of the gastrointestinal tract, renal and hepatic damage, and abnormalities of the central nervous system culminating in convulsions and coma.
Chromic Chloride Injection, USP provides 4 mcg chromium/mL. For the metabolically stable adult receiving TPN, the suggested additive dosage level is 10-15 mcg chromium/day. The metabolically stable adult with intestinal fluid loss may require 20 mcg chromium/day, with frequent monitoring of blood levels as a guideline for subsequent administration. For pediatric patients, the suggested additive dosage level is 0.14 to 0.20 mcg/kg/day. Aseptic addition of Chromic Chloride Injection, USP to the TPN solution under a laminar flow hood is recommended. Chromium is physically compatible with the electrolytes and vitamins usually present in the amino acid/dextrose solution used for TPN.
Parenteral drug products should be inspected visually for particulate matter and discoloration, whenever solution and container permit.
Trivalent chromium administered intravenously to TPN patients has been shown to be nontoxic when given at dosage levels up to 250 mcg/day for two consecutive weeks.
Chromic Chloride Injection, USP (Chromium 4 mcg/mL)
NDC 0517-6310-25 10 mL SDV packed in a box of 25
Store at 20 to 25 C (68 to 77 F); excursions permitted to 15 to 30 C (59 to 86 F) (See USP Controlled Room Temperature).
AMERICAN
REGENT, INC.
SHIRLEY, NY 11967
IN6310
Rev. 1/09
PRINCIPAL DISPLAY PANEL – 10 mL Carton
CHROMIC CHLORIDE
INJECTION, USP
Chromium 40 mcg/10 mL
(4 mcg/mL)
Trace Element Additive
NDC 0517-6310-25
25 x 10 mL SINGLE DOSE VIALS
FOR INTRAVENOUS USE AFTER DILUTION
PRESERVATIVE FREE
Rx Only
Each mL contains: Chromic Chloride (Hexahydrate) 20.5 mcg, Water for Injection q.s. pH adjusted with Hydrochloric Acid if necessary. Sterile, nonpyrogenic.
WARNING:DISCARD UNUSED PORTION.
Store at 20 -25 C (68 -77 F); excursions permitted to 15 - 30 C (59 -86 F) (See USP Controlled Room Temperature).
Directions for Use: See Package Insert.
AMERICAN REGENT, INC.
SHIRLEY, NY 11967
Rev. 11/05
|
CHROMIC CHLORIDE
chromic chloride injection, solution | ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
|
| Labeler - American Regent, Inc. (622781813) |


MONDO products are a delicious and healthy alternative to more sugary edibles. Every MONDO product is organic, vegan, and gluten free, as well as free of added sugar - everyone can find something to love about MONDO.
Due to the way we process our cannabis material using coconut oil, we have all but removed the taste of cannabis from MONDO products.
As part of our focus on environmental stewardship, each bar is wrapped in 100% compostable packaging with post-consumer recycled paper.
Classic Flavor
100mg THC (10 Suggested Doses)
Ingredients: Gluten-Free Oats*, Dates*, Almonds*, Raisins*, Coconut*, Maple Syrup*, Brown Rice Crisps*, Brown Rice Syrup*, Molasses*, THC-Infused Coconut Oil, Spices*
*indicates Certified Organic


| sass_import {sass} | R Documentation |
Create an import statement to be used within your Sass file. See https://sass-lang.com/documentation/file.SASS_REFERENCE.html#import for more details.
sass_import(input, quote = TRUE) sass_file(input)
input |
Character string to be placed in an import statement. |
quote |
Logical that determines if a double quote is added to the import
value. Defaults to |
sass_file
adds extra checks to make sure an appropriate file path
exists given the input value.
Fully defined Sass import string.
sass_import("foo") sass_import("$foo", FALSE) tmp_scss_file <- tempfile(fileext = ".scss") writeLines("$color: red; body{ color: $color; }", tmp_scss_file) sass_file(tmp_scss_file) sass(sass_file(tmp_scss_file))


CapitaATMs
Simple
Payment Processing
!
Contact Us
Things You Are Looking For Is Currently Not Available.
Looking For More Info?
Reach Out Anytime To
Setup Your Free Consultation!
Vector Payment Consultants
Your Payment Processing Specialists
Click To Call
650-553-4341


Today we are gonna take a look at text classification with NLTK.
First of all we need to gather data for our project. This time i've collected some english and italian words from this website.
I've downloaded two files:
• English Words (converted to utf-8)
• Italian Words (converted to utf-8)
Let's start coding:
Data Preparation
from nltk import NaiveBayesClassifier
from nltk import classify
import random
ITA = open('data/italiano_utf.txt','r',encoding='utf-8').read().split('\n')
ENG = open('data/english_utf.txt','r',encoding='utf-8').read().split('\n')
In this snippet we import the libraries we need and store our words into 2 distinct variables.
labeled_words = ([(word, 'english') for word in ENG] +
[(word, 'italian') for word in ITA])
random.shuffle(labeled_words)
Here we create a unique list for all the words and we label them with the correct language. After that we shuffle the list.
Feature Creation
Now we need to create the function that we will use to extract the features from every word. I'm going to recycle the function of the official NLTK tutorial
def language_features(name):
features = {}
features["first_letter"] = name[0].lower()
features["last_letter"] = name[-1].lower()
for letter in 'abcdefghijklmnopqrstuvwxyz':
features["count({})".format(letter)] = name.lower().count(letter)
features["has({})".format(letter)] = (letter in name.lower())
return features
With this function we are going to create a dictionary containing all the features we decided for every single word.
For example:
language_features('Hello')
{'count(a)': 0, 'count(b)': 0, 'count(c)': 0, 'count(d)': 0, 'count(e)': 1...}
We can now create our set of features by passing the function to a list comprehension
featuresets = [(language_features(n), language) for (n, language) in labeled_words]
Training and Testing
Now we can train the NaiveBayesClassifier, by dividing our featuresets into two parts: training and testing. After this we can check the accuracy of the classifier.
train_test = int(len(featuresets)/2)
train_set, test_set = featuresets[train_test:], featuresets[:train_test]
classifier = NaiveBayesClassifier.train(train_set)
print(classify.accuracy(classifier, test_set))
# Accuracy: 0.9022325311684546
We easily reach an accuracy of 90%! That's pretty good. Let's check what are the most informative features to determine the language.
classifier.show_most_informative_features(10)
# Most Informative Features
# count(y) = 2 english : italian = 113.9 : 1.0
# last_letter = 'y' english : italian = 110.3 : 1.0
# has(y) = True english : italian = 95.1 : 1.0
# count(y) = 1 english : italian = 93.9 : 1.0
# last_letter = 's' english : italian = 86.6 : 1.0
# last_letter = 'g' english : italian = 61.8 : 1.0
# count(h) = 2 english : italian = 61.4 : 1.0
# last_letter = 'd' english : italian = 61.3 : 1.0
# count(w) = 1 english : italian = 52.1 : 1.0
# has(w) = True english : italian = 51.9 : 1.0
The most important letters are y and w which are frequently present in the english language, but not in italian.
We can also test the model with our words:
print(classifier.classify(language_features('Hello'))) # CORRECT
print(classifier.classify(language_features('Ciao'))) # CORRECT
print(classifier.classify(language_features('Incredibile'))) # WRONG (Really similar between italian and english)
# Let's check the model's confidence about this prediction
print(classifier.prob_classify(language_features('Incredibile')).prob("english"))
# 0.7238920683977703 (confidence level is much lower than expected because the 2 words are similar)
Testing our model on Sentences
We can now test our model on a block of text to determine its language. For this example i've collected the introduction of "English" Wikipedia Page.
Let's import the data:
wiki_eng = open('data/wiki_eng.txt','r',encoding='utf-8').read().split()
wiki_eng = list(set(wiki_eng))
I've used set in this part to remove all the duplicated words in the text. Now we can apply our model on the text:
wiki_lang = []
for w in wiki_eng:
wiki_lang.append([w,classifier.classify(language_features(w))])
words_ita = len([w for w in wiki_lang if w[1] == 'italian'])
words_eng = len([w for w in wiki_lang if w[1] == 'english'])
print('Italian: {} | English: {}'.format(words_ita,words_eng))
# Italian: 52 | English: 221
That's all for today! You can find the code here


switch
statement
and used in another branch. Such declarations can be extremely confusing.
Example:
switch(i) {
case 2:
int x = 0;
break;
case 3:
x = 3;
System.out.println(x);
break;
}


Last updated: 2017-09-09
Code version: e676f7d
We now proceed to demonstrate various applications of Logolas.
Transcription factor binding site(TFBS) data are available from several databases, e.g. JASPAR2014, Encode, HOCOMOCO, etc. Common methods to obtain these data include Chip-seq, Chip-Chip, HT-SELEX, etc.
The figure below shows the application of Logolas on the TFBS data from Chip-seq and HT-SELEX. The data of these examples are from JASPAR2014. JASPAR is a collection of transcription factor DNA-binding preferences.
library(JASPAR2014)
library(TFBSTools)
library(Logolas)
color_profile = list("type" = "per_row",
"col" = RColorBrewer::brewer.pal(4,name ="Spectral"))
opts_ht=list()
opts_ht[['type']]='SELEX'
pfm_ht=getMatrixSet(JASPAR2014,opts_ht)
opts_chip=list()
opts_chip[['type']]='ChIP-seq'
pfm_chip=getMatrixSet(JASPAR2014,opts_chip)
library(grid)
grid.newpage()
layout.rows <- 1
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(6,layout.cols), rep("null", 2)),
heights=unit(c(20,50), rep("lines", 2))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
pfm1=as.matrix(pfm_chip[[1]])
colnames(pfm1)=1:ncol(pfm1)
logomaker(pfm1,xlab = 'position',color_profile = color_profile,
frame_width = 1,
newpage = FALSE,
pop_name = 'Logo plot, Chip-seq'
)
seekViewport(paste0("plotlogo", 2))
pfm2=as.matrix(pfm_ht[[1]])
colnames(pfm2)=1:ncol(pfm2)
logomaker(pfm2,xlab = 'position',color_profile = color_profile,
frame_width = 1,
newpage = FALSE,
pop_name = 'Logo plot, HT-SELEX'
)
One may notice that the number of positions of TFBS from Chip-seq is usually larger than that from HT-SELEX. A comparison of this is shown in the figure below. The data are from JASPAR2014.
library(ggplot2)
library(plyr)
ns = lapply(pfm_ht,function(x) dim(x)[2])
nc = lapply(pfm_chip,function(x) dim(x)[2])
dat = data.frame(method = factor(rep(c("SELEX","CHIP"), c(length(pfm_ht),length(pfm_chip)))),number = as.numeric(c(ns,nc)))
mdat = ddply(dat,"method",summarise,nummean=mean(number))
ggplot(dat,aes(x = number, fill = method)) +
geom_histogram(binwidth = 1, alpha = 0.5, position="identity") +
geom_vline(data=mdat,aes(xintercept = nummean,colour = method),linetype="dashed", size=1)
One kind of logo plots that are of particular interests is the dimer, in which the depleitons are in the middle and the enrichments are in the two sides. An example is the EBF1 family. The data are from Manollis Kellis webpage.
library(atSNP)
pfm_mk=LoadMotifLibrary('http://compbio.mit.edu/encode-motifs/motifs.txt',tag = ">",transpose = F, field = 1, sep = c("\t", " ", ">"), skipcols = 1, skiprows = 1, pseudocount = 0)
EBF1_disc1=t(pfm_mk[[52]]);rownames(EBF1_disc1)=c('A','C','G','T');colnames(EBF1_disc1)=1:10
EBF1_known4=t(pfm_mk[[1325]]);rownames(EBF1_known4)=c('A','C','G','T');colnames(EBF1_known4)=1:14
grid.newpage()
layout.rows <- 1
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(6,layout.cols), rep("null", 2)),
heights=unit(c(20,50), rep("lines", 2))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
nlogomaker(EBF1_disc1,logoheight = 'log_odds',
color_profile = color_profile,frame_width = 1,
newpage = F,
pop_name = 'EBF1_disc1')
seekViewport(paste0("plotlogo", 2))
nlogomaker(EBF1_known4,logoheight = 'log_odds',
color_profile = color_profile,frame_width = 1,
newpage = F,
pop_name = 'EBF1_known4')
Notice that both of the plots show the pattern TCCC–GGGA, with G and C depleted in the middle. The typical case is that there is depleted ‘gaps’ in the middle of palindromic sequences.
While we usually assume the uniform background probability(bg) for all symbols, there are some databases providing specific bg for each species, for example, the PlantTFDB. The database plantTFDB provides transcription factors of more than 160 species, including main lineages of green plants. The figures below show the logo plot and negative logo plot of TF motif from Vigna radiata.
Vra=plantTF("C:/Users/happy/OneDrive/Research/Logoplot/data/Vra",cb=T)
library(grid)
grid.newpage()
layout.rows <- 2
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(5,layout.cols), rep("null", 2)),
heights=unit(rep(5,layout.rows), rep("null", 1))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
logomaker(Vra$pwm_original[[12]],xlab = 'position',color_profile = color_profile,
frame_width = 1,
bg=Vra$bg,
newpage = FALSE,
pop_name = 'Logo plot',
yscale_change = F,
control = list(viewport.margin.left = 5))
seekViewport(paste0("plotlogo", 2))
logomaker(Vra$pwm_dash[[12]],xlab = 'position',color_profile = color_profile,
frame_width = 1,
bg=Vra$bg,
newpage = FALSE,
pop_name = 'Logo plot, dash applied',
yscale_change = FALSE,
control = list(viewport.margin.left = 5))
seekViewport(paste0("plotlogo", 3))
nlogomaker(Vra$pwm_original[[12]],
logoheight = 'log_odds',
xlab = 'position',color_profile = color_profile,
frame_width = 1,
bg=Vra$bg,
newpage = FALSE,
control = list(viewport.margin.left = 5))
seekViewport(paste0("plotlogo", 4))
nlogomaker(Vra$pwm_dash[[12]],
logoheight = 'log_odds',
xlab = 'position',color_profile = color_profile,
frame_width = 1,
bg=Vra$bg,
newpage = FALSE,
pop_name = 'Nrg logo plot, dash applied',
control = list(viewport.margin.left = 5))
In plantTFDB, the transcription factors from the same species have the same background probability. There are two ways to apply dash. One is to apply dash to each PFM, called signature wise dash. The second way is to firstly combine all the PFM then apply dash to the combined PFM. For example, we have three PFMs, with 5,6,7 positions respectively. After combining the three PFMs, we get a large combined PFM with 18 positions. The dash is applied to this combined PFM and then restore the PWM by separating the result given by dash. In this combined way, the “sample size”(number of positions) is larger. It turns out that the combined dash shrinks less than the signature wise dash.
For example, the original PFM is
Vra$pfm[[12]]
1 2 3 4 5 6 7 8 9 10
A 6 17 3 18 16 0 0 1 4 5
C 3 2 1 0 0 0 19 2 1 2
G 9 1 15 0 0 0 0 1 11 5
T 2 0 1 1 4 19 1 17 4 8
The signature wise dash gives
round(Vra$pwm_dash[[12]],3)
1 2 3 4 5 6 7 8 9 10
A 0.314 0.804 0.171 0.916 0.769 0.012 0.013 0.082 0.221 0.336
C 0.154 0.106 0.062 0.008 0.011 0.006 0.921 0.103 0.067 0.159
G 0.347 0.060 0.684 0.008 0.011 0.006 0.006 0.061 0.490 0.164
T 0.185 0.031 0.082 0.068 0.209 0.976 0.061 0.754 0.221 0.341
The combined dash gives
round(Vra$pwm_cbdash[[12]],3)
1 2 3 4 5 6 7 8 9 10
A 0.311 0.809 0.172 0.922 0.774 0.011 0.011 0.093 0.232 0.286
C 0.153 0.105 0.063 0.007 0.009 0.005 0.924 0.105 0.076 0.125
G 0.371 0.059 0.683 0.007 0.009 0.005 0.005 0.065 0.459 0.214
T 0.166 0.027 0.083 0.064 0.208 0.978 0.059 0.737 0.232 0.375
The background probability is (A,C,G,T)=
Vra$bg
[1] 0.339 0.161 0.161 0.339
Another application of logo plot is for the protein sequence motif. Protein is composed of 20 amino acid.
Protein sequence motif can be found in 3PFDB database. The database provides the multiple alignment data, PSSM, PWM(weighted observed percentages), etc. It does not give the PFM directly, but we could recover it from the PWM as well as the number of reference sequences.
user could make logo plot and negative plot of protein sequence motif using Logolas.
cols1 <- c(rev(RColorBrewer::brewer.pal(12, "Paired"))[c(3,4,7,8,11,12,5,6,9,10)],
RColorBrewer::brewer.pal(12, "Set3")[c(1,2,5,8,9)],
RColorBrewer::brewer.pal(9, "Set1")[c(9,7)],
RColorBrewer::brewer.pal(8, "Dark2")[c(3,4,8)])
color_profile <- list("type" = "per_row",
"col" = cols1)
bg=c(0.074,0.052,0.045,0.054,0.025,0.034,0.054,0.074,0.026,0.068,0.099,0.058,0.025,0.047,0.039,0.057,0.051,0.013,0.034,0.073)
pwm= readprotein('http://caps.ncbs.res.in/cgi-bin/mini/databases/3pfdb/3pfdb_pssm_download.cgi?id=PF07966&data_dir=SDB_folder',nrows = 29,nsites = 85,adash = FALSE,mat='pwm')
pwm=pwm[,19:27]
colnames(pwm)=1:9
pfm=round(pwm*85)
grid.newpage()
layout.rows <- 1
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(6,layout.cols), rep("null", 2)),
heights=unit(c(20,50), rep("lines", 2))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
logomaker(pwm,color_profile = color_profile,
frame_width = 1,
bg=bg,
newpage = F)
seekViewport(paste0('plotlogo',2))
nlogomaker(pwm,logoheight = 'log_odds',
color_profile = color_profile,
frame_width = 1,
bg=bg,
newpage = F)
One may also apply dash to some protein family PFMs, which have very few sequences mapped. The figure below shows the logo plot and negative logo plot of the same PFM as the one in above figure.
pwm_dash=t(dash(t(pfm),optmethod = 'mixEM',mode = bg)$posmean)
rownames(pwm_dash)=c('A' ,'R','N','D', 'C' , 'Q', 'E' , 'G', 'H' , 'I', 'L' , 'K' , 'M' , 'F', 'P' , 'S' , 'T' , 'W', 'Y', 'V')
colnames(pwm_dash)=1:ncol(pwm_dash)
grid.newpage()
layout.rows <- 1
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(6,layout.cols), rep("null", 2)),
heights=unit(c(20,50), rep("lines", 2))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
logomaker(pwm_dash,color_profile = color_profile,
bg=bg,
frame_width = 1,
newpage = F)
seekViewport(paste0('plotlogo',2))
nlogomaker(pwm_dash,logoheight = 'log_odds',
bg=bg,
color_profile = color_profile,
newpage = F)
As discussed in the entended feature of Logolas, one important feature of Logolas is that it could plot the patterns of somatic mutation or “mutation signature”.
Shiraishi et al.(2015) proposed a parsimonious approach to model the mutation signatures, by assuming independence across mutation patterns, and applied the model to somatic mutation data from Alexander et al.(2013), which analyzed mutations from 7042 cancers and found more than 20 distinct mutational signatures.
The model in Shiraishi et al.(2015) assumes each mutation arose from one of K mutation signatures. The number of signatures, K, for each cancer types is selected by examining the likelihood, bootstrap errors and correlation of membership parameters. There are 27 mutation signatures identified. The visualization of signatures are in the Figure 4 of the paper.
Here, we propose a new approach to visualize these mutation signatures. The new approach clearly shows the enrichment of the mutation and bases while also presents the depletion. The figure below is the mutation signature 16, which corresponds to the Ovary cancer.
mat=read.table('C:/Users/happy/OneDrive/Research/Logoplot/data/Fig4_rawdata/sig_16.txt')
mat1=cbind(t(mat[2:3,1:4]),rep(NA,4),t(mat[4:5,1:4]))
rownames(mat1)=c('A','C','G','T')
colnames(mat1) = c("-2", "-1", "0", "1", "2")
mat2=cbind(rep(NA,6),rep(NA,6),t(mat[1,]),rep(NA,6),rep(NA,6))
colnames(mat2) = c("-2", "-1", "0", "1", "2")
rownames(mat2) = c("C>A", "C>G", "C>T", "T>A", "T>C", "T>G")
table = rbind(mat1, mat2)
cols = RColorBrewer::brewer.pal.info[RColorBrewer::brewer.pal.info$category ==
'qual',]
col_vector = unlist(mapply(RColorBrewer::brewer.pal, cols$maxcolors, rownames(cols)))
total_chars = c("A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O",
"P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "zero", "one", "two",
"three", "four", "five", "six", "seven", "eight", "nine", "dot", "comma",
"dash", "colon", "semicolon", "leftarrow", "rightarrow")
set.seed(20)
color_profile <- list("type" = "per_symbol",
"col" = sample(col_vector, length(total_chars), replace=FALSE))
grid.newpage()
layout.rows <- 1
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(6,layout.cols), rep("null", 2)),
heights=unit(c(20,50), rep("lines", 2))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
logomaker(table,
color_profile = color_profile,
total_chars = total_chars,
frame_width = 1,
newpage = FALSE,
xlab = "Position",
ylab = "Information content")
seekViewport(paste0("plotlogo", 2))
nlogomaker(table,
logoheight='log_odds',
color_profile = color_profile,
total_chars = total_chars,
frame_width = 1,
newpage = FALSE,
xlab = "Position",
ylab = "Information content")
library(pmsignature)
file='Ovary.3.Rdata'
load(paste('C:/Users/happy/OneDrive/Research/Logoplot/data/mutation/',file,sep = ''))
visPMSignature(resultForSave[[1]],1,isScale=T)
We also apply the nlogomaker
to some of the mutation signatures from Alexandrov et al.(2013).
grid.newpage()
layout.rows <- 1
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(6,layout.cols), rep("null", 2)),
heights=unit(c(20,50), rep("lines", 2))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
load('C:/Users/happy/OneDrive/Research/Logoplot/data/mutation/ALL.2.RData')
mat=resultForSave[[1]]@signatureFeatureDistribution[1,,]
mat1=cbind(t(mat[2:3,1:4]),rep(NA,4),t(mat[4:5,1:4]))
rownames(mat1)=c('A','C','G','T')
colnames(mat1) = c("-2", "-1", "0", "1", "2")
mat2=cbind(rep(NA,6),rep(NA,6),(mat[1,]),rep(NA,6),rep(NA,6))
colnames(mat2) = c("-2", "-1", "0", "1", "2")
rownames(mat2) = c("C>A", "C>G", "C>T", "T>A", "T>C", "T>G")
table = rbind(mat1, mat2)
nlogomaker(table,
logoheight = 'log_odds',
color_profile = color_profile,
frame_width = 1,
xlab = "Position",
ylab = "Information content",
pop_name = 'ALL',
newpage = F
)
seekViewport(paste0("plotlogo", 2))
load('C:/Users/happy/OneDrive/Research/Logoplot/data/mutation/Bladder.2.Rdata')
mat=resultForSave[[1]]@signatureFeatureDistribution[1,,]
mat1=cbind(t(mat[2:3,1:4]),rep(NA,4),t(mat[4:5,1:4]))
rownames(mat1)=c('A','C','G','T')
colnames(mat1) = c("-2", "-1", "0", "1", "2")
mat2=cbind(rep(NA,6),rep(NA,6),(mat[1,]),rep(NA,6),rep(NA,6))
colnames(mat2) = c("-2", "-1", "0", "1", "2")
rownames(mat2) = c("C>A", "C>G", "C>T", "T>A", "T>C", "T>G")
table = rbind(mat1, mat2)
nlogomaker(table,
logoheight = 'log_odds',
color_profile = color_profile,
frame_width = 1,
xlab = "Position",
ylab = "Information content",
pop_name = 'Bladder',
newpage = F
)
load('C:/Users/happy/OneDrive/Research/Logoplot/data/count_table_19101.3.B12.AGCCACTT.L004.R1.C6WYKACXX.rda')
nlogomaker(mat,
logoheight = 'log',
color_profile = color_profile,
frame_width = 1,
xlab = 'UMI base position')
We have showed the logo plot for field categories of professors in the document mining section. Here we describe it in more details.
One way to get the data of professors’ field categories is to summarize the categories of their publications. The aRxiv is a repository of e-prints of scientific papers and the package aRxiv
can easily fetch the data from the repository. A tutorial of aRxiv
package is here.
For a set of professor’ names, we firstly get their most recent publications that have been put on aRxiv and limit the number of publications to be 50, using the function arxiv_search
. Then extract the primary categories of the publications. So now we have a set of field categories(without replications). Next, for each professor, we count the number of publications in each category. Finally, a table is formulated with field categories as rows and the professor’s name as columns. This is analogous to the position frequency matrix.
User has the option to apply dash to this kind of string logo based data, which is illustrated by the figure below.
library(aRxiv)
rec1 <- aRxiv::arxiv_search('au:"Matthew Stephens"', limit=50)
rec2 <- aRxiv::arxiv_search('au:"John Lafferty"', limit=50)
rec3 <- aRxiv::arxiv_search('au:"Wei Biao Wu"', limit=50)
rec4 <- aRxiv::arxiv_search('au:"Peter Mccullagh"', limit=50)
primary_categories_1 <- toupper(rec1$primary_category)
primary_categories_2 <- toupper(rec2$primary_category)
primary_categories_3 <- toupper(rec3$primary_category)
primary_categories_4 <- toupper(rec4$primary_category)
factor_levels <- unique(c(unique(primary_categories_1),
unique(primary_categories_2),
unique(primary_categories_3),
unique(primary_categories_4)))
primary_categories_1 <- factor(primary_categories_1, levels=factor_levels)
primary_categories_2 <- factor(primary_categories_2, levels=factor_levels)
primary_categories_3 <- factor(primary_categories_3, levels=factor_levels)
primary_categories_4 <- factor(primary_categories_4, levels=factor_levels)
tab_data <- cbind(table(primary_categories_1),
table(primary_categories_2),
table(primary_categories_3),
table(primary_categories_4))
colnames(tab_data) <- c("Matthew Stephens",
"John Lafferty",
"Wei Biao Wu",
"Peter McCullagh")
tab_data <- as.matrix(tab_data)
color_profile <- list("type" = "per_row",
"col" = RColorBrewer::brewer.pal(dim(tab_data)[1],
name = "Spectral"))
tab_data_dash=t(dash(t(tab_data),optmethod = 'mixEM')$posmean)
colnames(tab_data_dash) <- c("Matthew Stephens",
"John Lafferty",
"Wei Biao Wu",
"Peter McCullagh")
rownames(tab_data_dash)=rownames(tab_data)
grid.newpage()
layout.rows <- 2
layout.cols <- 2
top.vp <- viewport(layout=grid.layout(layout.rows, layout.cols,
widths=unit(rep(5,layout.cols), rep("null", 2)),
heights=unit(rep(5,layout.rows), rep("null", 1))))
plot_reg <- vpList()
l <- 1
for(i in 1:layout.rows){
for(j in 1:layout.cols){
plot_reg[[l]] <- viewport(layout.pos.col = j, layout.pos.row = i, name = paste0("plotlogo", l))
l <- l+1
}
}
plot_tree <- vpTree(top.vp, plot_reg)
pushViewport(plot_tree)
seekViewport(paste0("plotlogo", 1))
logomaker(tab_data,
color_profile = color_profile,
frame_width = 1,
pop_name = "arXiv field categories of UChicago STAT professors",
xlab = "Professors",
ylab = "Information content",
yscale_change = F,
newpage = F)
seekViewport(paste0("plotlogo", 2))
logomaker(tab_data_dash,
color_profile = color_profile,
frame_width = 1,
pop_name = "arXiv field categories of UChicago STAT professors, dash applied",
xlab = "Professors",
ylab = "Information content",
yscale_change = F,
newpage = F)
seekViewport(paste0("plotlogo", 3))
nlogomaker(tab_data,
logoheight = 'log',
color_profile = color_profile,
frame_width = 1,
pop_name = "arXiv field categories of UChicago STAT professors",
xlab = "Professors",
ylab = "Information content",
newpage = F)
seekViewport(paste0("plotlogo", 4))
nlogomaker(tab_data_dash,
logoheight = 'log',
color_profile = color_profile,
frame_width = 1,
pop_name = "arXiv field categories of UChicago STAT professors, dash applied",
xlab = "Professors",
ylab = "Information content",
newpage = F)
Logolas provides users the freedom to create specific logos. Take the symbol “Lambda” for example. Firstly, create the function for it:
LAMBDAletter <- function(plot=FALSE,
fill_symbol = TRUE,
colfill="green",
lwd=10){
x <- c(0.15, 0.5, 0.85, 0.75, 0.5, 0.25)
y <- c(0, 1, 0, 0, 0.8, 0)
fill <- colfill
id <- rep(1, length(x))
colfill <- rep(colfill, length(unique(id)))
if(plot){
get_plot(x, y, id, fill, colfill, lwd = lwd, fill_symbol = fill_symbol)
}
ll <- list("x"= x,
"y"= y,
"id" = id,
"fill" = fill,
"colfill" = colfill)
return(ll)
}
Notice that the function name has to be of the form “\(*\)letter”, where the user can be creative with the â€\(*\)â€ part. Also the name must be in uppercase letters. The user can then check if the symbol plot looks like a lambda or not in the following way.
lambda <- LAMBDAletter()
grid::grid.newpage()
grid::pushViewport(grid::viewport(x=0.5,y=0.5,width=1, height=1,
clip=TRUE))
grid::grid.polygon(lambda$x, lambda$y,
default.unit="native",
id=lambda$id,
gp=grid::gpar(fill=lambda$fill,
lwd=10))
The user can then add this symbol to the library. To use lambda as part of a string, the user has to put lambda inside â€/…/â€ to make sure that the function reads it as a new symbol and not general English alphabets or numbers. We provide an example below.
counts_mat <- rbind(c(0, 10, 100, 60, 20),
c(40, 30, 30, 35, 20),
c(100, 0, 15, 25, 75),
c(10, 30, 20, 50, 70)
)
colnames(counts_mat) <- c("Pos 1", "Pos 2", "Pos 3", "Pos 4", "Pos 5")
rownames(counts_mat) <- c("R/LMBD/Q", "A", "X", "Y")
color_profile <- list("type" = "per_row",
"col" = RColorBrewer::brewer.pal(dim(counts_mat)[1], name = "Spectral"))
logomaker(counts_mat,
color_profile = color_profile,
frame_width = 1,
addlogos="LMBD",
addlogos_text="LAMBDA")
sessionInfo()
R version 3.4.0 (2017-04-21)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 15063)
Matrix products: default
locale:
[1] LC_COLLATE=English_United States.1252
[2] LC_CTYPE=English_United States.1252
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United States.1252
attached base packages:
[1] grid stats4 parallel stats graphics grDevices utils
[8] datasets methods base
other attached packages:
[1] aRxiv_0.5.16 pmsignature_0.3.0 tidyr_0.6.3
[4] dplyr_0.7.2 dash_0.99.0 SQUAREM_2016.8-2
[7] atSNP_1.0 motifStack_1.20.0 ade4_1.7-6
[10] MotIV_1.31.0 grImport_0.9-0 XML_3.98-1.6
[13] GenomicRanges_1.28.4 GenomeInfoDb_1.12.0 doParallel_1.0.10
[16] iterators_1.0.8 foreach_1.4.3 data.table_1.10.4
[19] Rcpp_0.12.12 plyr_1.8.4 ggplot2_2.2.1
[22] Logolas_1.1.2 TFBSTools_1.14.0 JASPAR2014_1.12.0
[25] Biostrings_2.43.8 XVector_0.15.2 IRanges_2.9.19
[28] S4Vectors_0.13.17 BiocGenerics_0.22.0
loaded via a namespace (and not attached):
[1] bitops_1.0-6 matrixStats_0.52.2
[3] DirichletMultinomial_1.18.0 RColorBrewer_1.1-2
[5] httr_1.2.1 rprojroot_1.2
[7] LaplacesDemon_16.0.1 tools_3.4.0
[9] backports_1.0.5 R6_2.2.0
[11] rGADEM_2.23.0 seqLogo_1.42.0
[13] DBI_0.6-1 lazyeval_0.2.0
[15] colorspace_1.3-2 curl_2.5
[17] compiler_3.4.0 git2r_0.18.0
[19] Biobase_2.35.1 DelayedArray_0.2.0
[21] rtracklayer_1.35.12 labeling_0.3
[23] caTools_1.17.1 scales_0.4.1
[25] readr_1.1.1 stringr_1.2.0
[27] digest_0.6.12 Rsamtools_1.27.16
[29] rmarkdown_1.6 R.utils_2.5.0
[31] pkgconfig_2.0.1 htmltools_0.3.5
[33] BSgenome_1.44.0 htmlwidgets_0.8
[35] rlang_0.1.1 RSQLite_1.1-2
[37] VGAM_1.0-3 bindr_0.1
[39] BiocParallel_1.10.0 gtools_3.5.0
[41] R.oo_1.21.0 RCurl_1.95-4.8
[43] magrittr_1.5 GO.db_3.4.1
[45] GenomeInfoDbData_0.99.0 Matrix_1.2-9
[47] munsell_0.4.3 R.methodsS3_1.7.1
[49] stringi_1.1.5 yaml_2.1.14
[51] SummarizedExperiment_1.6.0 zlibbioc_1.21.0
[53] CNEr_1.12.0 lattice_0.20-35
[55] splines_3.4.0 annotate_1.54.0
[57] hms_0.3 KEGGREST_1.16.0
[59] knitr_1.15.1 reshape2_1.4.2
[61] codetools_0.2-15 TFMPvalue_0.0.6
[63] glue_1.1.1 evaluate_0.10
[65] png_0.1-7 gtable_0.2.0
[67] poweRlaw_0.70.0 assertthat_0.2.0
[69] xtable_1.8-2 tibble_1.3.3
[71] GenomicAlignments_1.11.12 AnnotationDbi_1.38.1
[73] memoise_1.1.0 bindrcpp_0.2
This R Markdown site was created with workflowr