Designed with humans in mind, Libero will help you deliver scholarly content to the highest standards in design and usability while lowering publishing costs and making the content you publish more accessible across the web.
Libero is stewarded by eLife and supported by a robust community of publishers and developers worldwide, making sure it’s always at the cutting edge. And because our community values transparency, all of Libero’s decision making and development is done in the open.
To stay up to date with the latest Libero-related developments, sign up to eLife’s Technology and Innovation newsletter or follow @eLifeInnovation on Twitter. You can join the conversation on the Libero slack channel, explore the development roadmap or find the code on GitHub.
To get in touch with us, contact<EMAIL_ADDRESS>Our partners
Why Libero?
Most publishing solutions today still carry the accumulated burden of their print-era origins. Libero is something new: a publishing platform designed from the ground up to take advantage of the opportunities created by the latest web technologies.
Libero is a modern, flexible and cost-effective solution to managing, reviewing, curating, presenting, sharing and interacting with research. It’s an opportunity to reduce costs and maximise reuse with an open source solution that can be easily adapted to the needs of different content providers – whether large publishers or small, libraries or independent academics.
Introducing Libero Publisher
The Libero platform is launching with Libero Publisher, a post-production publishing system designed to help you deliver beautiful content to your readers, wherever they may be. Libero Publisher is available as a free self-serve solution or as a service from one of our partner service providers.
Designed for humans: Libero is designed to work with you, and it can make your content look beautiful no matter how your readers reach you. Balancing elegance with accessibility, Libero’s mobile-optimised article layouts are designed for comfort but built for speed.
Friendly with machines: Libero’s XML based article store makes sure your content is accessible to data mining and indexing services, and data feeds to third-party services like CrossRef and PubMed Central are built-in.
Keeps you in control: Libero’s real-time publishing dashboard lets you see what’s happening, when it’s happening, letting you quickly manage your publishing queues, create issues for publication, and check that everything is working smoothly.
It takes requests: Libero’s open API lets you make your content available to developers, whether it’s for a third-party service integration, content syndication, or a mobile application.
And more: from Libero’s built-in Lens reader to its ElasticSearch-powered content search and recommendation engines, Libero lets you offer your readers flexible ways of finding, viewing and sharing your content.
Who’s involved?
Libero is stewarded by eLife and guided by input from a Steering Committee, Special Interest Groups and the community. Our coding and decision making are both done in the open, and we actively encourage community involvement in our projects, which means faster iteration, more experimentation, greater transparency and increased robustness and reach for our work. Learn more about Libero’s governance and join the discussion.
Special interest groups
A Special Interest Group (SIG) is comprised of members from multiple organisations, with a common purpose of advancing the Libero project with respect to a specific topic. Their goal is to provide focused forums for getting work done, making topic related decisions, onboarding new contributors and advising the Project Lead or Steering Committee.
Technology SIG – focuses on topics related to the codebase, architecture, testing, continuous integration, deployment and related tools or services.
Product SIG – focuses on the product roadmap and direction of Libero in terms of a platform for the various use cases. This includes the user-experience design, user-interface design, new and existing features, prioritisation and movement of components between the different classifications.
About eLife
eLife is a non-profit organisation inspired by research funders and led by scientists. Our mission is to help scientists accelerate discovery by operating a platform for research communication that encourages and recognises the most responsible behaviours in science.
eLife invests heavily in software development, new product design, collaboration and outreach so that the potential for improvements in the digital communication of new research can start to be realised. We support the development of open-source tools, with extensible capabilities, that can be used, adopted and modified by any interested party to help move towards an ecosystem that serves science and scientists as efficiently and as cost-effectively as possible.
We’re pleased to offer a growing suite of tools that is open-source, with permissive licensing to enable others to adopt, use and build on the work we do.
eLife also publishes work of the highest scientific standards and importance in all areas of the life and biomedical sciences. The research is selected and evaluated by working scientists and is made freely available to all readers without delay.
For more information about eLife, visit https://elifesciences.org/about


Chicken and spinach curry (palak murgh) recipe
by Monisha BharadwajYou can wilt the spinach first then whizz it in a blender. I add it freshly chopped for texture.
Prep time: 15 minutes | Cooking time: 30 minutes
SERVES
four
INGREDIENTS
- 2 tbsp sunflower oil
- 2 large onions, finely diced
- 2 tbsp ginger-garlic paste (grate together 1 part peeled ginger and 2 parts peeled garlic, by volume)
- 2 tbsp tomato purée
- 600g boneless chicken breasts or thighs, skinned and cubed
- 1 tsp ground turmeric
- 1 tsp medium-hot chilli powder
- 1 tsp garam masala
- 200g fresh spinach, washed and chopped
- Rotis or rice, to serve
METHOD
- Heat the oil in a frying pan and fry the onions over a high heat for 4-5 minutes until they start to change colour. Reduce the heat and cook for a further 3-4 minutes until they are soft and can be cut easily with the edge of a spoon.
- Add the ginger-garlic paste and fry for 30 seconds, then add the tomato purée and fry for a couple of minutes.
- Add the chicken pieces and fry over a high heat to seal in the juices, then add the ground spices. Season with salt, pour in about 150ml cold water and bring to the boil. Reduce the heat, cover and cook for 10 minutes, or until the chicken is tender, and is white and hot all the way through when a piece is cut open.
- Stir in the spinach and bring to the boil again. Adjust the seasoning to taste. Serve hot with rotis or plain boiled rice.
Recipe from ‘Indian in 7’ by Monisha Bharadwaj (Kyle Books ,£17.99). Order your copy from books.telegraph.co.uk


Key Word(s): matplotlib, seaborn, plots, pandas
CS109A Introduction to Data Science
Lab 5: Exploratory Data Analysis, seaborn
, more Plotting¶
Harvard University
Fall 2019
Instructors: Pavlos Protopapas, Kevin Rader, and Chris Tanner
Material Preparation: Eleni Kaxiras.
#RUN THIS CELL
import requests
from IPython.core.display import HTML
styles = requests.get("https://raw.githubusercontent.com/Harvard-IACS/2018-CS109A/master/content/styles/cs109.css").text
HTML(styles)
# import the necessary libraries
%matplotlib inline
import numpy as np
import scipy as sp
import matplotlib as mpl
import matplotlib.cm as cm
import matplotlib.pyplot as plt
import pandas as pd
import time
pd.set_option('display.width', 500)
pd.set_option('display.max_columns', 200)
pd.set_option('display.notebook_repr_html', True)
import seaborn as sns
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
import warnings
warnings.filterwarnings('ignore')
%config InlineBackend.figure_format ='retina'
%%javascript
IPython.OutputArea.auto_scroll_threshold = 9999;
Learning Goals¶
By the end of this lab, you should be able to:
- know how to implement the different types of plots such as histograms, boxplots, etc, that were mentioned in class.
- have
seaborn
as well asmatplotlib
in your plotting toolbox.
This lab corresponds to lecture 6 up to 9 and maps to homework 3.
1 - Visualization Inspiration¶
Notice that in “Summers Are Getting Hotter,” above, the histogram has intervals for global summer temperatures on the x-axis, designated from extremely cold to extremely hot, and their frequency on the y-axis.
That was an infographic intended for the general public. In contrast, take a look at the plots below of the same data published at a scientific journal. They look quite different, don't they?
James Hansen, Makiko Sato, and Reto Ruedy, Perception of climate change. PNAS
2 - Implementing Various Types of Plots using matplotlib
and seaborn
.¶
Before you start coding your visualization, you need to decide what type of vizualization to use. A box plot, a histogram, a scatter plot, or something else? That will depend on the purpose of the plot (is it for performing an inspection on your data (EDA, or for showing your results/conclusions to people) and the number variables that you want to plot.
You have a lot of tools for plotting in Python. The basic one, of course, is matplotlib
and there are other libraries that are built on top of it, such as seaborn
, bokeh
, or altair
.
In this class we will continue using matplotlib
and also look into seaborn
. Those two libraries are the ones you should be using for homework.
Introduction to seaborn
¶
Seaborn
is a Python data visualization library based on matplotlib. It provides a high-level interface for drawing attractive and informative statistical graphics. The library provides a database of useful datasets for educational purposes that can be loaded by typing:
seaborn.load_dataset(name, cache=True, data_home=None, **kws)
For information on what these datasets are : https://github.com/mwaskom/seaborn-data
The plotting functions in seaborn
can be decided in two categories¶
'axes-level' functions, such as
regplot
,boxplot
,kdeplot
,scatterplot
,distplot
which can connect with thematplotlib
Axes object and its parameters. You can use that object as you would inmatplotlib
:f, (ax1, ax2) = plt.subplots(2) sns.regplot(x, y, ax=ax1) sns.kdeplot(x, ax=ax2) ax1 = sns.distplot(x, kde=False, bins=20)
'figure-level' functions, such as
lmplot
,factorplot
,jointplot
,relplot
. In this case,seaborn
organizes the resulting plot which may include several Axes in a meaningful way. That means that the functions need to have total control over the figure, so it isn't possible to plot, say, anlmplot
onto one that already exists. Calling the function always initializes a figure and sets it up for the specific plot it's drawing. These functions return an object of the typeFacetGrid
with its own methods for operating on the resulting plot.
To set the parameters for figure-level functions:
sns.set_context("notebook", font_scale=1, rc={"lines.linewidth": 2.5})
The Titanic dataset¶
The titanic.csv
file contains data for 887 passengers on the Titanic. Each row represents one person. The columns describe different attributes about the person including whether they survived, their age, their on-board class, their sex, and the fare they paid.
titanic = sns.load_dataset('titanic');
titanic.info();
titanic.columns
'embarked', 'who', 'adult_male', 'embark_town', 'alive', 'alone'
# your code here
# your code here
Histograms¶
Plotting one variable's distribution (categorical and continous)¶
The most convenient way to take a quick look at a univariate distribution in seaborn
is the distplot()
function. By default, this will draw a histogram and fit a kernel density estimate (KDE).
A histogram displays a quantitative (numerical) distribution by showing the number (or percentage) of the data values that fall in specified intervals. The intervals are on the x-axis and the number of values falling in each interval, shown as either a number or percentage, are represented by bars drawn above the corresponding intervals.
# What was the age distribution among passengers in the Titanic?
import seaborn as sns
sns.set(color_codes=True)
f, ax = plt.subplots(1,1, figsize=(8, 3));
ax = sns.distplot(titanic.age, kde=False, bins=20)
# bug
#ax = sns.distplot(titanic.age, kde=False, bins=20).set(xlim=(0, 90));
ax.set(xlim=(0, 90));
ax.set_ylabel('counts');
f, ax = plt.subplots(1,1, figsize=(8, 3))
ax.hist(titanic.age, bins=20);
ax.set_xlim(0,90);
# your code here
infants = len(titanic[(titanic.age < 3)])
children = len(titanic[(titanic.age >= 3) & (titanic.age < 10)])
print(f'There were {infants} infants and {children} children on board the Titanic')
Pandas trick: We want to creat virtual "bins" for readability and replace ranges of values with categories.
We will do this in an ad hoc way, it can be done better. For example in the previous plot we could set:
(age<3) = 'infants'
,(3
, (18
See matplotlib colors here.
# set the colors
cmap = plt.get_cmap('Pastel1')
young = cmap(0.5)
middle = cmap(0.2)
older = cmap(0.8)
# get the object we will change - patches is an array with len: num of bins
fig, ax = plt.subplots()
y_values, bins, patches = ax.hist(titanic.age, 10)
[patches[i].set_facecolor(young) for i in range(0,1)] # bin 0
[patches[i].set_facecolor(middle) for i in range(1,3)] # bins 1 and 2
[patches[i].set_facecolor(older) for i in range(3,10)] # 7 remaining bins
ax.grid(True)
fig.show()
Kernel Density Estimation¶
The kernel density estimate can be a useful tool for plotting the shape of a distribution. The bandwidth (bw) parameter of the KDE controls how tightly the estimation is fit to the data, much like the bin size in a histogram. It corresponds to the width of the kernels we plotted above. The default behavior tries to guess a good value using a common reference rule, but it may be helpful to try larger or smaller values.
sns.kdeplot(titanic.age, bw=0.6, label="bw: 0.6", shade=True, color="r");
sns.kdeplot(titanic.age, bw=2, label="bw: 2", shade=True);
# your code here
sns.kdeplot(titanic.fare, bw=0.5, label="bw: 0.5", shade=True);
You can mix elements of matplotlib
such as Axes with seaborn
elements for a best use of both worlds.¶
import seaborn as sns
sns.set(color_codes=True)
x1 = np.random.normal(size=100)
x2 = np.random.normal(size=100)
fig, ax = plt.subplots(1,2, figsize=(15,5))
# seaborn goes in first subplot
sns.set(font_scale=0.5)
sns.distplot(x1, kde=False, bins=15, ax=ax[0]);
sns.distplot(x2, kde=False, bins=15, ax=ax[0]);
ax[0].set_title('seaborn Graph Here', fontsize=14)
ax[0].set_xlabel(r'$x$', fontsize=14)
ax[0].set_ylabel(r'$count$', fontsize=14)
# matplotlib goes in second subplot
ax[1].hist(x1, alpha=0.2, bins=15, label=r'$x1$');
ax[1].hist(x2, alpha=0.5, bins=15, label=r'$x2$');
ax[1].set_xlabel(r'$x$', fontsize=14)
ax[1].set_ylabel(r'$count$', fontsize=14)
ax[1].set_title('matplotlib Graph Here', fontsize=14)
ax[1].legend(loc='best', fontsize=14);
Introduding the heart disease dataset.¶
More on this in the in-class exercise at the end of the notebook.
columns = ["age", "sex", "cp", "restbp", "chol", "fbs", "restecg",
"thalach", "exang", "oldpeak", "slope", "ca", "thal", "num"]
heart_df = pd.read_csv('../data/heart_disease.csv', header=None, names=columns)
heart_df.head()
# seaborn
ax = sns.boxplot(x='age', data=titanic)
#ax = sns.boxplot(x=titanic['age']) # another way to write this
ax.set_ylabel(None);
ax.set_xlabel('age', fontsize=14);
ax.set_title('Distribution of age in the Titanic', fontsize=14);
Two variables¶
# your code here
# two variables seaborn
# two variable boxplot in pandas
f, ax = plt.subplots(1,1, figsize=(10, 5))
sns.scatterplot(x="fare", y="age", data=titanic, ax=ax);
sns.jointplot("fare", "age", data=titanic, s=40, edgecolor="w", linewidth=1)
You may control the seaborn
Figure aesthetics.
# matplotlib
fig, ax = plt.subplots(1,1, figsize=(10,6))
ax.scatter(heart_df['age'], heart_df['restbp'], alpha=0.8);
ax.set_xlabel(r'$Age (yrs)$', fontsize=15);
ax.set_ylabel(r'Resting Blood Pressure (mmHg)', fontsize=15);
ax.set_title('Age vs. Resting Blood Pressure', fontsize=14)
plt.show();
Plotting the distribution of three variables¶
f, ax = plt.subplots(1,1, figsize=(10, 5))
sns.scatterplot(x="fare", y="age", hue="survived", data=titanic, ax=ax);
Plotting the distribution of four variables (going too far?)¶
Use size=
for the fourth variable
# your code here
Pairplots¶
titanic.columns
to_plot = ['age', 'fare', 'survived', 'deck']
df_to_plot = titanic.loc[:,to_plot]
sns.pairplot(df_to_plot);
from pandas.plotting import scatter_matrix
scatter_matrix(df_to_plot, alpha=0.8, figsize=(10, 10), diagonal='kde');
Plotting Categorical Variables¶
titanic = sns.load_dataset('titanic')
f, ax = plt.subplots(figsize=(7, 3));
ax = sns.countplot(y="deck", data=titanic, color="c");
ax.set_title('Titanic');
ax = sns.countplot(x="class", data=titanic)
ax.set_title('Titanic');
fig, ax = plt.subplots(figsize=(10,6)) # Create figure object
sns.set_context("notebook", font_scale=1, rc={"lines.linewidth": 2.5})
ax = sns.countplot(x="deck", data=titanic)
sns.set(style="ticks", palette="muted")
sns.relplot(x="age", y="deck", col="class", data=titanic);
sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
sns.pairplot(data=titanic, hue="deck");
Introduction to pandas
plotting.¶
There is plotting functionality built in pandas
. Look for it in the pandas
"encyclopedia", a mere 2883-page pdf from the creator Wes McKinney: pandas documentation (pdf)
Example: The value_counts()
Series method and top-level function computes a histogram of a 1D array of values. It can
also be used as a function on regular arrays.
Reminder: DataFrame: “index” (axis=0, default), “columns” (axis=1)
df = pd.DataFrame(np.random.randn(1000, 4), columns=['A', 'B', 'C', 'D'])
df.head()
# cumulative sum adds column values as it goes
df = df.cumsum()
df.head()
plt.figure();
df.plot();
plt.legend(loc='best');
ts = pd.Series(np.random.randn(1000),
index=pd.date_range('1/1/2000', periods=1000))
df = pd.DataFrame(np.random.randn(1000, 4),
index=ts.index, columns=list('ABCD'))
df = df.cumsum()
plt.figure();
df.plot();
Plotting methods allow for a handful of plot styles other than the default line plot. These methods can be provided as the kind keyword argument to plot(), and include:
- ‘bar’ or ‘barh’ for bar plots
- ‘hist’ for histogram
- ‘box’ for boxplot
- ‘kde’ or ‘density’ for density plots
- ‘area’ for area plots
- ‘scatter’ for scatter plots
- ‘hexbin’ for hexagonal bin plots
- ‘pie’ for pie plots
In addition to these kind s, there are the DataFrame.hist()
, and DataFrame.boxplot()
methods, which use a separate interface. scatter_matrix
in pandas.plotting takes a Series or DataFrame as an argument.
Bar Plots¶
plt.figure();
df.iloc[0].plot(kind='bar');
df2 = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df2
df2.plot.bar();
# horizontal bar plot
df2.plot.barh(stacked=False);
Histograms¶
df4 = pd.DataFrame({'a': np.random.randn(1000) + 1, 'b': np.random.randn(1000),
'c': np.random.randn(1000) - 1}, columns=['a', 'b', 'c'])
plt.figure();
df4.plot.hist(alpha=0.5, stacked=False, bins=60);
Boxplots¶
color = {'boxes': 'DarkGreen', 'whiskers': 'DarkOrange',
'medians': 'DarkBlue', 'caps': 'Gray'}
df = pd.DataFrame(np.random.rand(10, 5), columns=['A', 'B', 'C', 'D', 'E'])
df.plot.box(color=color );
Area plots¶
You can create area plots with Series.plot.area()
and DataFrame.plot.area()
. Area plots are stacked
by default. To produce stacked area plot, each column must be either all positive or all negative values.
df = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
df.plot.area(stacked=True);
df.plot.area(stacked=False);
Scatterplot¶
Scatter plot can be drawn by using the DataFrame.plot.scatter() method. Scatter plot requires numeric columns for the x and y axes. These can be specified by the x and y keywords.
ax = df.plot.scatter(x='a', y='b', color='DarkBlue', label='Group 1');
df.plot.scatter(x='c', y='d', color='DarkGreen', label='Group 2', ax=ax);
pandas
Tricks¶
The copy() method on pandas objects copies the underlying data (though not the axis indexes, since they are immutable) and returns a new object. Note that it is seldom necessary to copy objects. For example, there are only a handful of ways to alter a DataFrame in-place:
- Inserting, deleting, or modifying a column.
- Assigning to the index or columns attributes.
- For homogeneous data, directly modifying the values via the values attribute or advanced indexing.
To be clear, no pandas method has the side effect of modifying your data; almost every method returns a new object, leaving the original object untouched. If the data is modified, it is because you did so explicitly
4 - Group Exercise: 1/2 hour in the Life of a Cardiologist¶
Try each exercise on your own and then discuss with your peers sitting at your table. Feel free to engage the TFs and instructors as well.
Visualize and explore the data. Use .describe()
to look at your data and also examine if you have any missing values.
What is the actual number of feature variables after converting categorical variables to dummy ones?
List of available variables (includes target variable num
):
- age: continuous
- sex: categorical, 2 values {0: female, 1: male}
- cp (chest pain type): categorical, 4 values {1: typical angina, 2: atypical angina, 3: non-angina, 4: asymptomatic angina}
- restbp (resting blood pressure on admission to hospital): continuous (mmHg)
- chol (serum cholesterol level): continuous (mg/dl)
- fbs (fasting blood sugar): categorical, 2 values {0: <= 120 mg/dl, 1: > 120 mg/dl}
- restecg (resting electrocardiography): categorical, 3 values {0: normal, 1: ST-T wave abnormality, 2: left ventricular hypertrophy}
- thalach (maximum heart rate achieved): continuous
- exang (exercise induced angina): categorical, 2 values {0: no, 1: yes}
- oldpeak (ST depression induced by exercise relative to rest): continuous
- slope (slope of peak exercise ST segment): categorical, 3 values {1: upsloping, 2: flat, 3: downsloping}
- ca (number of major vessels colored by fluoroscopy): discrete (0,1,2,3)
- thal: categorical, 3 values {3: normal, 6: fixed defect, 7: reversible defect}
- num (diagnosis of heart disease): categorical, 5 values {0: less than 50% narrowing in any major vessel, 1-4: more than 50% narrowing in 1-4 vessels}
# load the dataset
heart_df = pd.read_csv('../data/heart_disease.csv', header=None, names=columns)
heart_df.head()
Answer the following question using plots¶
- At what ages do people seek cardiological exams?
- Do men seek help more than women?
- Examine the variables. How do they relate to one another?
- (Variation on 02): What % of men and women seek cardio exams?
- Does resting blood pressure increase with age?
Pandas trick: .replace
The response variable (num) is categorical with 5 values, but we don't have enough data to predict all the categories.
Therefore we'll replace num
with hd
(heart disease): categorical, 2 values {0: no, 1: yes}.
Use the code below (take a minute to understand how it works, it's very useful!):
# Replace response variable values with a binary response (1: heart disease(hd) or 0: not)
heart_df['num'].replace(to_replace=[1,2,3,4],value=1,inplace=True)
# Rename column for clarity
heart_df = heart_df.rename(columns = {'num':'hd'})
heart_df.head()
# look at the features
heart_df.info();
heart_df.describe()
At this point you should split in train and test set and work only on the train!!. For simplicity we will not do this in the solutions.
# your code here
# 01. what ages do people seek cardiological exams?
# %load solutions/q01.py
# your code here
# 02. do men seek help more than women?
# %load solutions/q02.py
# your code here
# 03. Examine the variables. How do they relate to one another?
# %load solutions/q03.py
# your code here
# 04. What percentage of men and women seek cardio exams?
# %load solutions/q04.py
# your code here
# 05. Does resting blood pressure increase with age?
# %load solutions/q05.py
Bonus: Find the hidden pattern¶
Read the following file into a pandas
Dataframe: '../data/mystery.csv' and plot it. How does it look? You should see a beautiful pattern. If not, think of ways to fix the issue.
mystery = pd.read_csv('../data/mystery.csv', sep=' ', header=None)
mystery.head()
# your code here
# %load solutions/mystery.py


TD Cards 2
Master:
{{ cards.master.length }}
Cards:
{{ cards.active.length }}
Discards:
{{ cards.discards.length }}
Liked:
{{ cards.liked.length }}
Disliked:
{{ cards.disliked.length }}
DISCARD


Log Files
No log files.
Name
Size
Last Modified
{{ val.name }}
{{val.size.toLocaleString()}}
{{val.mtime + ' (' + readableAge(val.mtime) + ')'}}
Modified within the last hour
Modified within 24 hours
More than 24 hours since last modified


2 writes to CompilingMemberFunction
System.Management.Automation (2)
engine\parser\Compiler.cs (2)
1981
CompilingMemberFunction
= true;
2002
CompilingMemberFunction
= true;
4 references to CompilingMemberFunction
System.Management.Automation (4)
engine\parser\Compiler.cs (4)
925
Diagnostics.Assert(
CompilingMemberFunction
, "Return not only set for member functions");
2544
if (
CompilingMemberFunction
)
2906
if (
CompilingMemberFunction
)
5572
if (
CompilingMemberFunction
)


Dean Smith given 'green light' to complete this Aston Villa transfer - reports
Aston Villa transfer news | With just over six weeks until the January window opens, rumours are continuing to emerge
by Ben Husband, https://www.birminghammail.co.uk/authors/ben-husband/Aston Villa boss Dean Smith has been give the green light to sell Lovre Kalinic this summer, according to reports.
It is less than a year since the Croatia international made the move to B6, but he has endured a nightmare spell at Villa Park, with both parties now willing to cut their losses.
Football Insider have reported that Smith is planning to shift the 29-year-old, who Villa signed for £7m last January.
Villa accept that they will struggle to recoup anything like the fee they paid for him, but are still keen to take him off the wage bill.
The news comes as Villa’s goalkeeping department has been ravaged by injuries. Tom Heaton missed the trip to Wolverhampton Wanderers last weekend, whilst his replacement Jed Steer was stretchered off minutes into the game at Molineux.
Aston Villa latest
This is your round up of all things Villa; the one-stop shop that will keep you updated on the latest goings on at the club and beyond.
Transfers, injuries, match-days and managers, we’ve got you covered.
We’ll be bringing the very latest on the Villains throughout the week and around the clock.
Make sure you keep yourself updated with our handy daily catch up...
Must reads...
- Villa fans make Chelsea transfer demand
- 'Worried' fans react to major announcement
- Former Villan reveals Newcastle bombshell
- Morelos saga takes new twist
For all your latest AVFC news, opinion, analysis and transfer gossip, click here
You can follow our Villa reporter Ashley Preece on Twitter, and his email address is<EMAIL_ADDRESS>Orjan Nyland completed the game against Wolves and said he is now ready to compete with Heaton for the first choice position in the Villa sticks.
"Now one keeper is injured and will probably be gone for a while," Nyland told Norwegian media outlet Dagbladet.
"So it is me and Tom Heaton who will fight for that place."
"Everything is relative.
"Injuries can take longer than expected, so you never know.
"It has been suggested that Heaton should be out for two to three weeks."
Kalinic was linked with an exit in the summer window, with a number of clubs across the continent credited with an interest.


×
Fish porridge
Pancake
Hamburger
Tteokpokki
Soy sauce tteopokki
Fried eggplant
Fried rice with beef
Seaweed soup
Dumpling soup
Fluffy biscuit
Roasted oyster
Gamja-tang
Rice cake soup
Fried rice with chicken
Bibimbap
Black sesame porridge
Churros
Korean miso soup
Noodle
Hamburger
Barbeque
Hand pulled noodles
Beer
Jamon
Seafood Jeon
Mac & Cheese
Cyranno pepper
Indian food
Gomtang
Pyongyang cold noodle
Musubi
Wine
Waffle
Tiwanese popcorn chicken
Curry fried rice
Fish-shaped bun
Donkatsu
Cake
Muffin
50 Comfort Foods
Pancakes
I used to have a pancake with my family on Sunday. It was kind of like our Sunday tradition.


--- layout: post title: Because all the cool kids have one tags: - ego - Web status: publish type: post published: true meta: _edit_last: '451289' --- Facebook | Alec Clews I now have a facebook account, as well as MySpace and LinkedIn. Come over and say "G'Day". However I gave up on Twitter, I'm not that cool. Updated Dec 2008 -- I'm cool again and have a twitter account @alecthegeek
Powered by ScribeFire.


Class ExConsole
Provides support for using an xml based markup text in console applications.
Markup contains text and control tags to set the foreground and background color of the text. Color names are limited to members of the ConsoleColor enum, but are case insensitive.
Markup example:
<c f='Yellow'>yellow text<c b='blue'> on blue background.</c></c>
Inheritance
Inherited Members
Namespace: ExtendedConsole
Assembly: ExtendedConsole.dll
Syntax
public class ExConsole
Methods
Write(String)
Writes the specified markup to the console.
Declaration
public ExConsole Write(string markup)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | markup | Markup text to write. |
Returns
| Type | Description |
|---|---|
| ExConsole | The current instance of ExConsole. |
Examples
Write "Hello World!", cyan on a dark gray background.
exConsole.Write("<c f='cyan' b='darkgray'>Hello World!<c>");
Exceptions
| Type | Condition |
|---|---|
| System.Xml.XmlException | Thrown when markup text isn't properly formatted xml. |
Write(String, Nullable<ConsoleColor>, Nullable<ConsoleColor>)
Changes console colors to the specified colors, and writes the specified markup to the console.
Note: This method is deprecated and will be removed in future versions.
Declaration
[Obsolete("this method is deprecated and will be removed in future versions.")]
public ExConsole Write(string markup, ConsoleColor? foregroundColor, ConsoleColor? backgroundColor)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | markup | Markup text to write. |
| System.Nullable<System.ConsoleColor> | foregroundColor | Foreground color. |
| System.Nullable<System.ConsoleColor> | backgroundColor | Background color. |
Returns
| Type | Description |
|---|---|
| ExConsole | The current instance of ExConsole. |
Examples
Write "Hello World!" in black on a magenta background, followed by "How are you?" in black on a white background.
exConsole.Write("Hello world! <c b='white' f='black'>How are you?<c>", ConsoleColor.Black, ConsoleColor.Magenta);
Exceptions
| Type | Condition |
|---|---|
| System.Xml.XmlException | Thrown when markup text isn't properly formatted xml. |
WriteLine(String)
Writes the specified markup to the console, advances the cursor to the next line.
Declaration
public ExConsole WriteLine(string markup)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | markup | Markup text to write. |
Returns
| Type | Description |
|---|---|
| ExConsole | The current instance of ExConsole. |
Examples
Write "Hello World!", black on a white background, and advance the cursor to the next line.
exConsole.WriteLine("<c b='white' f='black'>Hello World!<c>");
Exceptions
| Type | Condition |
|---|---|
| System.Xml.XmlException | Thrown when markup text isn't properly formatted xml. |
WriteLine(String, Nullable<ConsoleColor>, Nullable<ConsoleColor>)
Changes console colors to the specified colors, and writes the specified markup to the console. Advances the cursor to the next line.
Note: This method is deprecated and will be removed in future versions.
Declaration
[Obsolete("this method is deprecated and will be removed in future versions.")]
public ExConsole WriteLine(string markup, ConsoleColor? foregroundColor, ConsoleColor? backgroundColor)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String | markup | Markup text to write. |
| System.Nullable<System.ConsoleColor> | foregroundColor | Foreground color. |
| System.Nullable<System.ConsoleColor> | backgroundColor | Background color. |
Returns
| Type | Description |
|---|---|
| ExConsole | The current instance of ExConsole. |
Examples
Write "Hello World!" in magenta, followed by "How are you?" in black on a white background. Advance the cursor to the next line.
exConsole.WriteLine("Hello world! <c b='white' f='black'>How are you?<c>", ConsoleColor.Magenta, null);
Exceptions
| Type | Condition |
|---|---|
| System.Xml.XmlException | Thrown when markup text isn't properly formatted xml. |
WriteLines(String[])
Writes multiple markup lines to the console.
Declaration
public ExConsole WriteLines(params string[] lines)
Parameters
| Type | Name | Description |
|---|---|---|
| System.String[] | lines | Lines of markup text to write. |
Returns
| Type | Description |
|---|---|
| ExConsole | The current instance of ExConsole. |
Examples
Write "Hello World!" in yellow, "This is exConsole writing multiple markup lines" in the next line, with exConsole in green, and "To the Console." in the last line. Advance the cursor to the next line.
exConsole.WriteLines(
"<c f='Yellow'>Hello World!<c>",
"This is <c f='green'>exConsole<c> writing multiple markup lines",
"To the Console."
);
Exceptions
| Type | Condition |
|---|---|
| System.Xml.XmlException | Thrown when markup text isn't properly formatted xml. |


The button has been clicked {{uiState.clicks}} time{{uiState.clicks === 1 ? '' : 's'}}.
No one has clicked the button yet.
Button Unclick the Button


I know I haven't posted a newsletter for a couple of months. I've been working day and night to improve my website. Just in time for sld.codes' first anniversary, I decided to build it again from the ground up. As you can imagine, this has taken some time. I encourage you to go check it out. It's got some new tech and a flashy design.
Along with the new site, I will also be changing the format and feel of these newsletters. I never felt like I did you, the audience, justice.
What you can expect from this newsletter:
⚡ Resources - I'll be sending you useful developer tools and resources direct to your inbox.
🍎 Learnings - I'll keep you posted about my new articles and coding adventures so that you can learn something new.
📔 Books and Audio - I'll share what I am reading and listening to. Most often it'll be design and tech focused but not always.
🚀 Fun - No newsletter is complete without the occasional meme and a little programming humour.
So with that, here's your first issue of the new newsletter. As this is a new format, let me know what you think by replying to this email.
Cheers,
Sam Larsen-Disney


Movie Suggestions
Select a genre for suggestions
17 Again
Rom-Com
Annabelle
Horror
Date Night
Rom-Com
Don't Breathe
Thriller
Edge Of Tomorrow
Sci-Fi
Five Feet Apart
Romance
Gravity
Sci-Fi
Inception
Sci-Fi
Interstellar
Sci-Fi
IT
Horror
Oculus
Horror
PS I Love You
Romance
Shutter Island
Thriller
Split
Thriller
The Fault In Our Stars
Romance
The Dictator
Comedy
The Hangover
Comedy
The Maze Runner
Thriller
The Notebook
Romance
To All The Boys I've Loved Before
Rom-Com
We're The Millers
Comedy
Why Him
Comedy


|
Forecast daily summary with expected Temperature Ranges for the upcoming seven days provided by the Darksky API. Or data from OpenWeatherMap which is for every three
hours for the next seven days.
| Forecast |
| Rain, légère pluie, 2019-07-19 21:00:00, Temp Range: 29.97 to 31.7, Humidity: 70, Pressure: 1003.9 |
| Rain, légère pluie, 2019-07-20 00:00:00, Temp Range: 26.41 to 27.71, Humidity: 81, Pressure: 1005.33 |
| Rain, légère pluie, 2019-07-20 03:00:00, Temp Range: 24.51 to 25.37, Humidity: 90, Pressure: 1006.05 |
| Clouds, partiellement nuageux, 2019-07-20 06:00:00, Temp Range: 22.31 to 22.74, Humidity: 92, Pressure: 1006.42 |
| Clear, ciel dégagé, 2019-07-20 09:00:00, Temp Range: 20.81 to 20.81, Humidity: 95, Pressure: 1007.02 |
| Clear, ciel dégagé, 2019-07-20 12:00:00, Temp Range: 23.22 to 23.22, Humidity: 90, Pressure: 1007.85 |
| Clouds, nuageux, 2019-07-20 15:00:00, Temp Range: 27.57 to 27.57, Humidity: 77, Pressure: 1006.56 |
| Clouds, nuageux, 2019-07-20 18:00:00, Temp Range: 30.67 to 30.67, Humidity: 67, Pressure: 1005.91 |
| Clouds, peu nuageux, 2019-07-20 21:00:00, Temp Range: 31.17 to 31.17, Humidity: 70, Pressure: 1005.15 |
| Rain, légère pluie, 2019-07-21 00:00:00, Temp Range: 26.87 to 26.87, Humidity: 82, Pressure: 1006.01 |
| Clouds, couvert, 2019-07-21 03:00:00, Temp Range: 24.68 to 24.68, Humidity: 86, Pressure: 1005.67 |
| Clouds, couvert, 2019-07-21 06:00:00, Temp Range: 22.55 to 22.55, Humidity: 92, Pressure: 1006.01 |
| Clouds, peu nuageux, 2019-07-21 09:00:00, Temp Range: 20.82 to 20.82, Humidity: 96, Pressure: 1006.19 |
| Clouds, partiellement nuageux, 2019-07-21 12:00:00, Temp Range: 22.69 to 22.69, Humidity: 89, Pressure: 1007.29 |
| Clouds, peu nuageux, 2019-07-21 15:00:00, Temp Range: 25.81 to 25.81, Humidity: 71, Pressure: 1007.14 |
| Clouds, partiellement nuageux, 2019-07-21 18:00:00, Temp Range: 25.83 to 25.83, Humidity: 63, Pressure: 1007.61 |
| Clouds, partiellement nuageux, 2019-07-21 21:00:00, Temp Range: 26.56 to 26.56, Humidity: 66, Pressure: 1008.42 |
| Clouds, nuageux, 2019-07-22 00:00:00, Temp Range: 22.45 to 22.45, Humidity: 68, Pressure: 1010.22 |
| Clouds, couvert, 2019-07-22 03:00:00, Temp Range: 19.35 to 19.35, Humidity: 53, Pressure: 1011.28 |
| Clouds, nuageux, 2019-07-22 06:00:00, Temp Range: 17.22 to 17.22, Humidity: 60, Pressure: 1012.01 |
| Clouds, nuageux, 2019-07-22 09:00:00, Temp Range: 16.38 to 16.38, Humidity: 60, Pressure: 1011.37 |
| Clouds, couvert, 2019-07-22 12:00:00, Temp Range: 18.71 to 18.71, Humidity: 67, Pressure: 1011.5 |
| Clouds, couvert, 2019-07-22 15:00:00, Temp Range: 18.97 to 18.97, Humidity: 66, Pressure: 1010.87 |
| Rain, légère pluie, 2019-07-22 18:00:00, Temp Range: 16.52 to 16.52, Humidity: 80, Pressure: 1010.05 |
| Rain, légère pluie, 2019-07-22 21:00:00, Temp Range: 15.44 to 15.44, Humidity: 84, Pressure: 1008.49 |
| Rain, légère pluie, 2019-07-23 00:00:00, Temp Range: 14.72 to 14.72, Humidity: 92, Pressure: 1007.67 |
| Rain, légère pluie, 2019-07-23 03:00:00, Temp Range: 14.05 to 14.05, Humidity: 95, Pressure: 1007.2 |
| Rain, légère pluie, 2019-07-23 06:00:00, Temp Range: 13.97 to 13.97, Humidity: 95, Pressure: 1006.92 |
| Clouds, couvert, 2019-07-23 09:00:00, Temp Range: 13.83 to 13.83, Humidity: 94, Pressure: 1007.76 |
| Clouds, nuageux, 2019-07-23 12:00:00, Temp Range: 15.57 to 15.57, Humidity: 90, Pressure: 1010.23 |
| Rain, légère pluie, 2019-07-23 15:00:00, Temp Range: 19.31 to 19.31, Humidity: 75, Pressure: 1010.61 |
| Rain, légère pluie, 2019-07-23 18:00:00, Temp Range: 21.79 to 21.79, Humidity: 59, Pressure: 1010.41 |
| Clear, ciel dégagé, 2019-07-23 21:00:00, Temp Range: 20.76 to 20.76, Humidity: 60, Pressure: 1010.76 |
| Clear, ciel dégagé, 2019-07-24 00:00:00, Temp Range: 16.05 to 16.05, Humidity: 70, Pressure: 1013.31 |
| Clear, ciel dégagé, 2019-07-24 03:00:00, Temp Range: 11.65 to 11.65, Humidity: 70, Pressure: 1015.06 |
| Clear, ciel dégagé, 2019-07-24 06:00:00, Temp Range: 9.45 to 9.45, Humidity: 78, Pressure: 1015.97 |
| Clear, ciel dégagé, 2019-07-24 09:00:00, Temp Range: 8.14 to 8.14, Humidity: 82, Pressure: 1017.15 |
| Clear, ciel dégagé, 2019-07-24 12:00:00, Temp Range: 12.22 to 12.22, Humidity: 74, Pressure: 1018.18 |
| Clear, ciel dégagé, 2019-07-24 15:00:00, Temp Range: 17.55 to 17.55, Humidity: 61, Pressure: 1017.94 |
| Clear, ciel dégagé, 2019-07-24 18:00:00, Temp Range: 19.85 to 19.85, Humidity: 55, Pressure: 1016.68 |
|


People Monitor is a video analytics engine for detecting, tracking, counting, analyzing, and recognizing people in surveillance videos.
It has several use cases:
(1) Customer analytics and service optimization for retail, banking, and hospitality.
(2) Indexing and searching suspects in surveillance video network.
(3) Automated staffing monitoring.


Drop PDF or Word documents here or click to select files. They will show in the search as "internal" documents.


| Version 2 (modified by trac, 4 years ago) (diff) |
|---|
Using HTML in Wiki Text
Trac supports inserting HTML into any wiki context, accomplished using the #!html WikiProcessor.
However a constraint is that this HTML has to be well-formed. In particular you can't insert a start tag in an #!html block, resume normal wiki text and insert the corresponding end tag in a second #!html block.
Fortunately, for creating styled
s, s or even complex tables containing arbitrary Wiki text, there's a powerful alternative: use of dedicated #!div, #!span and #!table, #!tr, #!td and #!th blocks.
Those Wiki processors are built-in, and does not require installing any additional packages.
How to use #!html
To inform the wiki engine that a block of text should be treated as HTML, use the html processor.
| Wiki Markup | Display |
|---|---|
{{{ #!html
HTML Test
 }}} | HTML Test |
Note that Trac sanitizes your HTML code before displaying it. That means that if you try to use potentially dangerous constructs such as Javascript event handlers, those will be removed from the output.
Since 0.11, the filtering is done by Genshi, and as such, the produced output will be a well-formed fragment of HTML. As noted above in the introduction, this mean that you can no longer use two HTML blocks, one for opening a
, the second for closing it, in order to wrap arbitrary wiki text. The new way to wrap any wiki content inside a
 is to use the #!div Wiki processor.
How to use #!div and #!span
| Wiki Markup | Display |
|---|---|
{{{ #!div class="important" style="border: 2pt solid; text-align: center" This is the ''only'' way to go in Trac 0.11 }}} {{{ #!div class="wikipage" style="border: 1pt dotted" Only `wikipage` (same as specifying no class attribute) }}} {{{ #!div class="wikipage compact " style="border: 1pt solid" Use combined classes (`compact` and `wikipage`) }}} {{{ #!div class="compact" style="border: 1pt dotted" Only `compact` }}} {{{ #!div class="" style="border: 1pt solid" No classes (//not// the same as specifying no class attribute...) }}} | This is the only way to go in Trac 0.11 Only wikipage (same as specifying no class attribute) Use combined classes (compact and wikipage) Only compact No classes (not the same as specifying no class attribute...) |
Note that the contents of a #!div block are contained in one or more paragraphs, which have a non-zero top and bottom margin. This leads to the top and bottom padding in the example above. To remove the top and bottom margin of the contents, add the compact class to the #!div. Another predefined class besides wikipage and compact is important, which can be used to make a paragraph stand out. Extra CSS classes can be defined via the site/style.css file for example, see TracInterfaceCustomization#SiteAppearance.
For spans, you should rather use the Macro call syntax:
| Wiki Markup |
|---|
Hello [[span(''WORLD'' (click [#anchor here]), style=color: green; font-size: 120%, id=anchor)]]! |
| Display |
|
How to use #!td and other table related processors
#!td or #!th processors are actually the main ones, for creating table data and header cells, respectively. The other processors #!table and #!tr are not required for introducing a table structure, as #!td and #!th will do this automatically. The |- row separator can be used to start a new row when needed, but some may prefer to use a #!tr block for that, as this introduces a more formal grouping and offers the possibility to use an extra level of indentation. The main purpose of the #!table and #!tr is to give the possibility to specify HTML attributes, like style or valign to these elements.
| Wiki Markup | Display | ||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Simple 2x2 table with rich content: {{{#!th align=left - Left - Header }}} {{{#!th align=left - Right - Header }}} |---------------------------------- {{{#!td style="background: #ffd" - Left - Content }}} {{{#!td style="vertical-align: top" !RightContent }}} |---------------------------------- || ... and this can be mixed||\ ||with pipe-based cells || {{{#!td colspan=2 Pick the style the more appropriate to your content See WikiFormatting#Tables for details on the pipe-based table syntax. }}} If one needs to add some attributes to the table itself... {{{ #!table style="border:none;text-align:center;margin:auto" {{{#!tr ==================================== {{{#!th style="border: none" Left header }}} {{{#!th style="border: none" Right header }}} }}} {{{#!tr ==== style="border: 1px dotted grey" {{{#!td style="border: none" 1.1 }}} {{{#!td style="border: none" 1.2 }}} }}} {{{#!tr ==================================== {{{#!td style="border: none" 2.1 }}} {{{#!td 2.2 }}} }}} }}} | Simple 2x2 table with rich content:
If one needs to add some attributes to the table itself...
|
Note that by default tables are assigned the "wiki" CSS class, which gives a distinctive look to the header cells and a default border to the table and cells (as can be seen for the tables on this page). By removing this class (#!table class=""), one regains complete control on the table presentation. In particular, neither the table, the rows nor the cells will have a border, so this is a more effective way to get such an effect than having to specify a style="border: no" parameter everywhere.
| Wiki Markup | Display | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
{{{#!table class="" || 0|| 1|| 2|| || 10|| 20|| 30|| || 11|| 22|| 33|| ||||||= numbers =|| }}} |
|
Other classes can be specified as alternatives (remember that you can define your own in site/style.css).
| Wiki Markup | Display | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
{{{#!table class="listing" || 0|| 1|| 2|| || 10|| 20|| 30|| || 11|| 22|| 33|| ||||||= numbers =|| }}} |
|
HTML comments
HTML comments are stripped from the output of the html processor. To add an HTML comment to a wiki page, use the htmlcomment processor (available since 0.12). For example, the following code block:
| Wiki Markup |
|---|
{{{ #!htmlcomment This block is translated to an HTML comment. It can contain <tags> and &entities; that will not be escaped in the output. }}} |
| Display |
 |
Please note that the character sequence "--" is not allowed in HTML comments, and will generate a rendering error.
More Information
- http://www.w3.org/ -- World Wide Web Consortium
- http://www.w3.org/MarkUp/ -- HTML Markup Home Page
See also: WikiProcessors, WikiFormatting, WikiRestructuredText


What is a Compiler?
A function that maps an input string to an output string.
Typically, the input and output strings are “programs”
For example, here are some well-known compilers
gcc, clang :: C -> Binary -- a.out, .exe
ghc :: Haskell -> Binary
javac :: Java -> JvmByteCode -- .class
scalac :: Scala -> JvmByteCode
ocamlc :: Ocaml -> OcamlByteCode -- .cmo
ocamlopt :: Ocaml -> Binary
gwt :: Java -> JavaScript -- .js
v8 :: JavaScript -> Binary
nasm :: X86 -> Binary
pdftex :: LaTeX -> PDF
pandoc :: Markdown -> PDF | Html | Doc
Key Requirements on output program:
- Has the same meaning (“semantics”) as input,
- Is executable in relevant context (VM, microprocessor, web browser).
A Bit of History
Compilers were invented to avoid writing machine code by hand
Richard Hamming – The Art of Doing Science and Engineering, p25:
In the beginning we programmed in absolute binary… Finally, a Symbolic Assembly Program was devised – after more years than you are apt to believe during which most programmers continued their heroic absolute binary programming. At the time [the assembler] first appeared I would guess about 1% of the older programmers were interested in it – using [assembly] was “sissy stuff”, and a real programmer would not stoop to wasting machine capacity to do the assembly.
John A.N. Lee, Dept of Computer Science, Virginia Polytechnical Institute
One of von Neumann’s students at Princeton recalled that graduate students were being used to hand assemble programs into binary for their early machine. This student took time out to build an assembler, but when von Neumann found out about it he was very angry, saying that it was a waste of a valuable scientific computing instrument to use it to do clerical work.
What does a Compiler look like?
An input source program is converted to an executable binary in many stages:
- Parsed into a data structure called an Abstract Syntax Tree
- Checked to make sure code is well-formed (and well-typed)
- Simplified into some convenient Intermediate Representation
- Optimized into (equivalent) but faster program
- Generated into assembly
x86
- Linked against a run-time (usually written in C)
What is CSE 131 ?
A bridge between two worlds
- High-level: ML (CSE 130)
- Machine Code: X86/ARM (CSE 30)
A sequel to both those classes.
How to write a compiler for
NanoML -> X86
- Parsing
- Checking & Validation
- Simplification & Normalizing
- Optimization
- Code Generation
But also, how to write complex programs
- Design
- Implement
- Test
- Iterate
How write a Compiler?
General recipe, applies to any large system
- gradually, one feature at a time!
We will
- Step 1 Start with a teeny tiny language,
- Step 2 Build a full compiler for it,
- Step 3 Add a few features,
- Go to Step 2.
(Yes, loops forever, but we will hit Ctrl-C in 10 weeks…)
Mechanics
Who are we?
Prof:
- Ranjit Jhala
TAs:
- Marc Andrysco
- Gary Soeller
- Anish Tondwalkar
How will we grade?
(30%) Assignments
- 7 assignments, first one is up, due 10/5
- All programming
- Groups of upto 2
(30%) Midterm (11/2)
- In-class
- 2-sided printed “cheat sheet”
(35%) Final (12/14)
- 2-sided printed “cheat sheet”
(05%) Clickers
- Attempting to answer > 75% questions
- Starting from next week
(05%) Piazza Extra Credit
- To top-20 best participants
Course Outline
What will we do ?
Write a compiler for NanoML -> X86
But Rome wasn’t built in a day … and neither is any serious software.
So we will write many compilers:
- Numbers and increment/decrement
- Local Variables
- Nested Binary Operations
- Booleans, Branches and Dynamic Types
- Functions
- Tuples and Structures
- Lambdas and closures
- Types and Inference
- Garbage Collection
What will you learn ?
Core principles of compiler construction
- Managing Stacks & Heap
- Type Checking
- Intermediate forms
- Optimization
Several new languages
Haskell
to write the compilerC
to write the “run-time”X86
compilation target
More importantly how to write a large program
- How to use types for design
- How to add new features / refactor
- How to test & validate
What do you need to know ?
This 131 depends very heavily on CSE 130
- Familiarity with Functional Programming and Ocaml
- Datatypes (e.g. Lists, Trees, ADTs)
- Polymorphism
- Recursion
- HOFs (e.g.
map
,filter
,fold
)
Also depends on CSE 30
- Experience with some
C
programming - Experience with some assembly (
x86
)
A few words on the medium of instruction
We will use Haskell which, for our purposes is like Ocaml but with nicer syntax.
Haskell has many advanced features beyond what we saw in 130, but we won’t be using them; in the few cases we do, I’ll explain them as we go.
Here are some links to get you started:
Lets Go!
[“cat”, “dog”, “horse”] – :: [String] – words String – separator “cat;dog;horse” – :: String – “crunche words with separator”


{% extends "payments/base.html" %} {% block title %}Payment History{% endblock title %} {% block main %} {% include "payments/_subscription_status.html" %}
Your transaction history
{% if request.user.customer.invoices.all %}| Transaction ID | Date | Amount |
|---|---|---|
| #{{ invoice.id }} | {{ invoice.date|date:"M d" }} |
{% if invoice.paid and invoice.total > 0 %}
Paid ${{ invoice.total|floatformat:"2" }} {% endif %} {% if invoice.paid and invoice.total < 0 %}Credit ${{ invoice.total|floatformat:"2" }} {% endif %} |
You have not made any payments yet.
{% endif %} {% endblock %}


is for string comparisons. Use -gt instead.
if [[ $var > 10 ]]
then
echo "Incorrectly triggers when var=5"
fi
if [[ $var -gt 10 ]]
then
echo "Correct numerical comparison"
fi
<
and >
, in both [[
and [
(when escaped) will do a lexicographical comparison, not a numerical comparison.
This means that [[ 5 > 10 ]]
is true because 5 comes after 10 alphabetically. Meanwhile [[ 5 -gt 10 ]]
is false because 5 does not come after 10 numerically.
If you want to compare numbers by value, use the numerical comparison operators -gt
, -ge
, -lt
and -le
.
If the strings happen to be version numbers and you're using <, or > to compare them as strings, and you consider this an acceptable thing to do, then you can ignore this warning.


Authentication failed :(((
Make sure your cookies are enabled for this site.
This issue could also be because the authentication processed timed out (10 minutes).
Please close this window and reload the main window to try again.
If the problem persists, please contact the developer.


This rule checks that classes inheriting from Cto classes end with the suffix Cto.
public class MyClass extends AbstractCto {}
public class ClassCto extends AbstractCto {}


Image
Export (binary download)
download image
Export as json
Show json
Import from json
upload
load from json
Show image
redrawArea.toBase64URL();
dump base64 string
Check emptyness
redrawArea.toBase64URL();
is canvas empty?


Map
News
Blog
Articles and Publications
How to
FAQ
Tutorials
Definitions
About
The project
Partners
Research Program
Contact us
log in
Remember password
Sign up
Map
News
Blog
Articles and Publications
How to
FAQ
Tutorials
Definitions
About
The project
Partners
Research program
Contact us
Login
Change password
Enter a new password
Your password must have at least:
8 characters, 1 letter, 1 number
Old Password *
New Password *
Repeat New Password *
Photo: Aysunbk/iStock/Thinkstock


This is no official advice and exists only to raise awareness. For real advice and valid information please visit the page of the WHO or the official website of your local government.
This is an art project. The YES/NO-recommendations express the personal view of the author having taken into account scientists' opinions and health authorities' guidelines as of 22 March 2020 (Bavaria, Germany). The recommendations do not constitute professional medical or legal advice of any kind. For guidance on Covid-19, especially when to seek medical treatment, please refer to your doctor or local health officials. For your decision whether or not to leave the house please observe the policies and regulations in place in your country, state or community.
stay safe, stay sound, stay healthy, stay happy. Spread the word, not the virus. #flatten the curve.


Before Change
df1 = pd.read_csv(rel_path)
input_features_template = Template(
"[{type: text, name: random_text, vocab_size: 100,"
" max_len: 10, encoder: stacked_cnn}, {type: numerical,"
" name: random_number}, "
"{type: image, name: random_image, preprocessing: {width: 8,"
" in_memory: ${in_memory}, height: 8, num_channels: 1},"
" encoder: ${encoder}, fc_size: 32, "
" resnet_size: 8, destination_folder: ${folder}}]")
input_features = input_features_template.substitute(
encoder="resnet",
folder=image_dest_folder,
in_memory="true",
)
rel_path = generate_data(
input_features, output_features, csv_filename, num_examples=100
)
df2 = pd.read_csv(rel_path)
After Change
text_feature(encoder="embed", min_len=1),
numerical_feature()
]
output_features = [binary_feature(), numerical_feature()]
rel_path = generate_data(
input_features, output_features, csv_filename, num_examples=50
)


Movie Tickets!
Movie
Movie Showing
"My Little Mermaid"
"Avengers"
"Enchanted"
"Scary Movie II"
Time
Time Showing
10am
2pm
6pm
9pm
Age
Age group
under 14
over 15
over 50
Submit
Cost:
$


---
subject: IMPORTANT TAX RETURN DOCUMENT AVAILABLE
---
Dear: {firstname},
Our records indicate that you are enrolled in the XXXXX Company paperless W2 Program. As a result, you do not receive a paper W2 but instead receive e-mail notification that your online W2 (i.e. "paperless W2") is prepared and ready for viewing.
Your W2 is ready for viewing under Employee Self Service. Logon at the following link:
Click Here to Logon
If you have trouble logging in to Employee Self Service at the link above, please contact your Payroll Department for support.
If you would like to un-enroll in the Paperless W2 Program, please logon to Employee Self Service at the link above and go to the W2 Delivery Choice webpage and follow the instructions.


Crystal has global type inference. You can program without type annotations except for a few cases where you are required to do so (generic type arguments).
This is a double-edged sword.
On one side, it’s really nice not to have to be explicit about types. This allows for very quick prototyping, similar to dynamic languages. You can quickly sketch an idea and evolve it without having to constantly retype things. This is also very helpful when refactoring and reorganizing code because the friction is very low. For example, when you extract a method out of a piece of code you just specify the names of the arguments and the compiler will take care of figuring out the arguments’ types and the return type. Or you can start using an instance variable right away by assigning some value to it, without having to declare it first with the possible types it will hold.
But there are also some downsides to this approach. Let’s analyze each of them.
Code becomes harder to understand and follow
Some say that without type annotations a code becomes harder to follow. Let’s look at an example.
What is the type of values
? How can one understand this piece of code
without knowing what type it operates on?
When you learned how to program we are sure that at one point you were introduced to pseudocode. It looks similar to code you would find in real life, only it’s simplified: you can rarely see type annotations there. Type is kind of obvious in the context it is given. If you add type annotations and other information, it would make it harder to see the code’s intention. Sounds familiar?
In our view, Ruby code is very close to pseudocode. In the above code there are
no type annotations. The algorithm is clear: iterate each of the items in values
and add them to a count
variable. That’s it. What’s the type of values
? It
doesn’t really matter. All we care about is that it can be iterated (with each
) and
that it can be summed. Additionally, then name sum
, values
and count
help
in understanding the method’s intention and the variables’ possible types.
Compare this to some other language where you would have to add some types:
Here we are telling the compiler that there is a type, Iterable
that has an
each
method that yields elements of a generic type T
. Then we also tell the
compiler that there’s a type Addable<T>
that has a method +
that operates with
values of its same type. Finally, we define the sum
method to operate on
values that belong to the Iterable<T>
type, where each T
implements
Addable<T>
.
To us, this last code is farther from the pseudocode we had in mind. Also, there’s more code to read and understand.
One possible counter-argument to this is that it now becomes easier to navigate
the code. I want to know how each
is implemented, or what Addable
is about, and
I know where to find that. We can’t do that with dynamic languages if we don’t
have type annotations.
But… wait! Crystal is not a dynamic language. When it finishes compiling it
assigns a type to every variable and method that were used. From that information we can recreate
the code and make it browsable. And, in fact, Crystal has a (very experimental)
tool for that, if you compile your code with crystal browser file.cr
. This will
open a web browser where you can see the type of variables and navigate methods. So
in our opinion this is not a valid reason here.
This last thing also means that Crystal knows the type of a class’ instance variables.
In Ruby you might be looking at some class with a @foo
instance variable and wonder
what its type is. Don’t worry, run crystal hierarchy file.cr
and you will know the
exact type. This will be mostly useful if you run it in your spec files because these
show a class’ usage. And in the future it will be possible to view this
information in a documentation format like RDoc.
Incremental compilation is not possible
Because there are no type annotations, the compiler needs to figure out the type of everything, each time, from scratch. There’s no way to compile a module to an object file, or some other format, and later reuse that information, because there isn’t any (type) information at first glance.
Luckily Crystal’s compiler is pretty fast: it takes between 5 and 10 seconds to compile the whole compiler (just 2.3 seconds of that time is spent in the type inference phase). For larger programs the time will become bigger, so we will have to find a solution for this problem.
Another issue is that it is hard to do a REPL. If code always had type annotations we could generate machine code and not worry about a variable’s type possibly changing, or even a type’s instance variables being created or changed.
Many times we were tempted to give up. “If we require the programmer to add type annotations in instance variables and methods, incremental compilation and a REPL might become a reality”. “At least the syntax would be pleasant”. Fourtunately, whenever one of us said that, another one replied with a big “NO”.
This “NO” has a very strong reason. If we change the language in that direction we will end up with another language. Crystal is a language where you can leave out type annotations (mind you: you can add type annotations if you really want to). But if you are forced to add them, then it will not be Crystal anymore. It will probably be very similar to one of the existing programming languages. And why would we want to do that? What would be the benefit of inventing yet another language that is similar to another language in existence (or maybe being developed)? None. It would be a waste of time, a duplication of effort.
 Is incremental compilation really impossible? Couldn’t we think of a similar technique? Is a REPL doable somehow in this language? Very interesting questions arise. Challenging problems appear. Fun times come.
We believe a language where type annotations are not required from the compiler’s part, but where types are still there, is possible. We want a smart compiler. We don’t want to simplify the language to make our job, compiler writers, easier. We want to make programmers work easier. And fun :-)


LGraph Class
LGraph is the class that contain a full graph. We instantiate one and add nodes to it, and then we can run the execution loop.
Constructor
LGraph
()
Item Index
Methods
add
-
node
Adds a new node instasnce to this graph
Parameters:
-
node
LGraphNodethe instance of the node
attachCanvas
-
graph_canvas
Attach Canvas to this graph
Parameters:
-
graph_canvas
GraphCanvas
clear
()
Removes all nodes from this graph
configure
-
str
Configure a graph from a JSON string
Parameters:
-
str
Stringconfigure a graph from a JSON string
detachCanvas
-
graph_canvas
Detach Canvas from this graph
Parameters:
-
graph_canvas
GraphCanvas
findNodesByClass
-
classObject
Returns a list of nodes that matches a class
Parameters:
-
classObject
Classthe class itself (not an string)
Returns:
a list with all the nodes of this type
findNodesByName
-
name
Returns a list of nodes that matches a name
Parameters:
-
name
Stringthe name of the node to search
Returns:
a list with all the nodes with this name
findNodesByType
-
type
Returns a list of nodes that matches a type
Parameters:
-
type
Stringthe name of the node type
Returns:
a list with all the nodes of this type
getElapsedTime
()
Number
Returns the amount of time it took to compute the latest iteration. Take into account that this number could be not correct if the nodes are using graphical actions
Returns:
number of milliseconds it took the last cycle
getFixedTime
()
Number
Returns the amount of time accumulated using the fixedtime_lapse var. This is used in context where the time increments should be constant
Returns:
number of milliseconds the graph has been running
getNodeById
-
id
Returns a node by its id.
Parameters:
-
id
String
getNodeOnPos
-
x
-
y
-
nodes_list
Returns the top-most node in this position of the canvas
Parameters:
-
x
Numberthe x coordinate in canvas space
-
y
Numberthe y coordinate in canvas space
-
nodes_list
Arraya list with all the nodes to search from, by default is all the nodes in the graph
Returns:
a list with all the nodes that intersect this coordinate
getTime
()
Number
Returns the amount of time the graph has been running in milliseconds
Returns:
number of milliseconds the graph has been running
isLive
()
returns if the graph is in live mode
runStep
-
num
Run N steps (cycles) of the graph
Parameters:
-
num
Numbernumber of steps to run, default is 1
sendEventToAllNodes
-
eventname
-
params
Sends an event to all the nodes, useful to trigger stuff
Parameters:
-
eventname
Stringthe name of the event (function to be called)
-
params
Arrayparameters in array format
serialize
()
Object
Creates a Object containing all the info about this graph, it can be serialized
Returns:
value of the node
setInputData
-
name
-
value
Assigns a value to all the nodes that matches this name. This is used to create global variables of the node that can be easily accesed from the outside of the graph
Parameters:
-
name
Stringthe name of the node
-
value
value to assign to this node
setInputData
-
name
Returns the value of the first node with this name. This is used to access global variables of the graph from the outside
Parameters:
-
name
Stringthe name of the node
Returns:
value of the node
start
-
interval
Starts running this graph every interval milliseconds.
Parameters:
-
interval
Numberamount of milliseconds between executions, default is 1
stop execution
()
Stops the execution loop of the graph
updateExecutionOrder
()
Updates the graph execution order according to relevance of the nodes (nodes with only outputs have more relevance than nodes with only inputs.


| Package | Description |
|---|---|
| name.fraser.neil.plaintext |
External sources.
|
| Modifier and Type | Field and Description |
|---|---|
java.util.LinkedList<diff_match_patch.Diff> |
diff_match_patch.Patch.diffs |
| Modifier and Type | Method and Description |
|---|---|
protected java.util.LinkedList<diff_match_patch.Diff> |
diff_match_patch.diff_bisect(java.lang.String text1,
java.lang.String text2,
long deadline)
Find the 'middle snake' of a diff, split the problem in two and return
the recursively constructed diff.
|
java.util.LinkedList<diff_match_patch.Diff> |
diff_match_patch.diff_fromDelta(java.lang.String text1,
java.lang.String delta)
Given the original text1, and an encoded string which describes the
operations required to transform text1 into text2, compute the full diff.
|
java.util.LinkedList<diff_match_patch.Diff> |
diff_match_patch.diff_main(java.lang.String text1,
java.lang.String text2)
Find the differences between two texts.
|
java.util.LinkedList<diff_match_patch.Diff> |
diff_match_patch.diff_main(java.lang.String text1,
java.lang.String text2,
boolean checklines)
Find the differences between two texts.
|
| Modifier and Type | Method and Description |
|---|---|
protected void |
diff_match_patch.diff_charsToLines(java.util.LinkedList<diff_match_patch.Diff> diffs,
java.util.List<java.lang.String> lineArray)
Rehydrate the text in a diff from a string of line hashes to real lines
of text.
|
void |
diff_match_patch.diff_cleanupEfficiency(java.util.LinkedList<diff_match_patch.Diff> diffs)
Reduce the number of edits by eliminating operationally trivial
equalities.
|
void |
diff_match_patch.diff_cleanupMerge(java.util.LinkedList<diff_match_patch.Diff> diffs)
Reorder and merge like edit sections.
|
void |
diff_match_patch.diff_cleanupSemantic(java.util.LinkedList<diff_match_patch.Diff> diffs)
Reduce the number of edits by eliminating semantically trivial
equalities.
|
void |
diff_match_patch.diff_cleanupSemanticLossless(java.util.LinkedList<diff_match_patch.Diff> diffs)
Look for single edits surrounded on both sides by equalities which can be
shifted sideways to align the edit to a word boundary.
|
int |
diff_match_patch.diff_levenshtein(java.util.LinkedList<diff_match_patch.Diff> diffs)
Compute the Levenshtein distance; the number of inserted, deleted or
substituted characters.
|
java.lang.String |
diff_match_patch.diff_prettyHtml(java.util.LinkedList<diff_match_patch.Diff> diffs)
Convert a Diff list into a pretty HTML report.
|
java.lang.String |
diff_match_patch.diff_text1(java.util.LinkedList<diff_match_patch.Diff> diffs)
Compute and return the source text (all equalities and deletions).
|
java.lang.String |
diff_match_patch.diff_text2(java.util.LinkedList<diff_match_patch.Diff> diffs)
Compute and return the destination text (all equalities and insertions).
|
java.lang.String |
diff_match_patch.diff_toDelta(java.util.LinkedList<diff_match_patch.Diff> diffs)
Crush the diff into an encoded string which describes the operations
required to transform text1 into text2.
|
int |
diff_match_patch.diff_xIndex(java.util.LinkedList<diff_match_patch.Diff> diffs,
int loc)
loc is a location in text1, compute and return the equivalent location in
text2.
|
java.util.LinkedList<diff_match_patch.Patch> |
diff_match_patch.patch_make(java.util.LinkedList<diff_match_patch.Diff> diffs)
Compute a list of patches to turn text1 into text2.
|
java.util.LinkedList<diff_match_patch.Patch> |
diff_match_patch.patch_make(java.lang.String text1,
java.util.LinkedList<diff_match_patch.Diff> diffs)
Compute a list of patches to turn text1 into text2.
|
java.util.LinkedList<diff_match_patch.Patch> |
diff_match_patch.patch_make(java.lang.String text1,
java.lang.String text2,
java.util.LinkedList<diff_match_patch.Diff> diffs)
Deprecated.
Prefer patch_make(String text1, LinkedList
|


|
| PwPfConversion | | Portability | portable | | Stability | experimental | | Maintainer |<EMAIL_ADDRESS>|
|
|
|
|
|
| Description |
| Translations between pointwise and point-free expressions, expressed in
the modules PWCore and PointFree.
|
|
| Synopsis |
|
|
|
|
| Translation from Pointfree to PWCore |
|
| pf2core :: PFTerm -> PWTerm |
| Applies a simple transformation from a PFTerm to a PWTerm, in an automated manner.
|
|
| Translation from PWCore to Pointfree |
|
| core2Pf :: PWTerm -> PFTerm |
| Applies the conversion of a pointwise expression of type A and obtains
a pointfree expression of type 1->A, to which is applied a poinfree macro
to get the correct type again.
|
|
| Produced by Haddock version 0.6 |


Man struck with SUV in Bellevue crosswalk suffered life-threatening injuries
by Evan BushA man who was struck by a sport utility vehicle in a Bellevue crosswalk Sunday evening suffered life-threatening injuries, according to police.
The vehicle was traveling northbound on 145th Place Southeast near Southeast 18th Street at about 7:10 p.m. when it struck the man, said Meeghan Black, a Bellevue Police Department spokeswoman. The vehicle’s hood was dented. A shoe remained in the roadway, according to photos at the scene.
“It was pouring down rain, pitch black,” Black said, though she noted the crosswalk had lights overhead. “The driver looked down and then looked back up and there was somebody in the crosswalk. That’s what he said happened.”
Emergency responders were not able to immediately identify the person who was struck by the vehicle. He was likely between 40 and 60 years of age, Black said.
“They’re trying to go through his phone. There was no ID,” Black said. The man was taken to Harborview Medical Center.
The driver, a man, called 911 after the collision and stayed at the scene.
“He is cooperating,” Black said. “He’s talking to investigators.”
Portions of 145th Place Southeast remained closed Sunday night as investigators gathered evidence.
Evan Bush:<PHONE_NUMBER> or<EMAIL_ADDRESS>on Twitter: @EvanBush.


Class KHRTerminateContext
- java.lang.Object
-
- org.lwjgl.opencl.KHRTerminateContext
-
public class KHRTerminateContext extends java.lang.Object
Native bindings to the khr_terminate_context extension.OpenCL provides an API to release a context. This operation is done only after all queues, memory object, programs and kernels are released, which in turn might wait for all ongoing operations to complete. However, there are cases in which a fast release is required, or release operation cannot be done, as commands are stuck in mid execution. An example of the first case can be program termination due to exception, or quick shutdown due to low power. Examples of the second case are when a kernel is running too long, or gets stuck, or it may result from user action which makes the results of the computation unnecessary.
In many cases, the driver or the device is capable of speeding up the closure of ongoing operations when the results are no longer required in a much more expedient manner than waiting for all previously enqueued operations to finish.
This extension implements a new query to check whether a device can terminate an OpenCL context and adds an API to terminate a context.
-
-
Field Summary
Fields Modifier and Type Field and Description static int
CL_CONTEXT_TERMINATE_KHR
Specifies whether the context can be terminated.static int
CL_DEVICE_TERMINATE_CAPABILITY_KHR
Describes the termination capability of the OpenCL device.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method and Description static int
clTerminateContextKHR(long context)
Terminates all pending work associated with the context and renders all data owned by the context invalid.
-
-
-
Field Detail
-
CL_DEVICE_TERMINATE_CAPABILITY_KHR
public static final int CL_DEVICE_TERMINATE_CAPABILITY_KHR
Describes the termination capability of the OpenCL device. This is a bitfield where a value ofCL_DEVICE_TERMINATE_CAPABILITY_CONTEXT_KHR
indicates that context termination is supported.- See Also:
- Constant Field Values
-
CL_CONTEXT_TERMINATE_KHR
public static final int CL_CONTEXT_TERMINATE_KHR
Specifies whether the context can be terminated. The default value isFALSE
.- See Also:
- Constant Field Values
-
-
Method Detail
-
clTerminateContextKHR
public static int clTerminateContextKHR(long context)
Terminates all pending work associated with the context and renders all data owned by the context invalid. It is the responsibility of the application to release all objects associated with the context being terminated.When a context is terminated:
- The execution status of enqueued commands will be
TERMINATED_KHR
. Event objects can be queried usingGetEventInfo
. Event callbacks can be registered and registered event callbacks will be called withevent_command_exec_status
set toTERMINATED_KHR
.WaitForEvents
will return immediately for commands associated with event objects specified inevent_list
. The status of user events can be set. Event objects can be retained and released.GetEventProfilingInfo
returnsPROFILING_INFO_NOT_AVAILABLE
. - The context is considered to be terminated. A callback function registered when the context was created will be called. Only queries, retain and
release operations can be performed on the context. All other APIs that use a context as an argument will return
CONTEXT_TERMINATED_KHR
. - The contents of the memory regions of the memory objects is undefined. Queries, registering a destructor callback, retain and release operations can be performed on the memory objects.
- Once a context has been terminated, all OpenCL API calls that create objects or enqueue commands will return
CONTEXT_TERMINATED_KHR
. APIs that release OpenCL objects will continue to operate as thoughclTerminateContextKHR
was not called. - The behavior of callbacks will remain unchanged, and will report appropriate error, if executing after termination of context. This behavior is similar to enqueued commands, after the command queue has become invalid.
- Parameters:
context
- the context to terminate- Returns:
SUCCESS
if the function is executed successfully. Otherwise, it returns one of the following errors: "INVALID_CONTEXT
ifcontext
is not a valid OpenCL context.", "CONTEXT_TERMINATED_KHR
ifcontext
has already been terminated.", "INVALID_OPERATION
ifcontext
was not created withCONTEXT_TERMINATE_KHR
set toTRUE
.", OORE, OOHME
- The execution status of enqueued commands will be
-
-


#!/bin/bash
tests:put input <<EOF #!/bin/bash
# @description a desc for fn1 # @see fn2() fn1() {
return 0
}
# @description a desc for fn2 fn2(){
return 0
} EOF
tests:put expected <<EOF ## Index
-
[fn1()](#fn1)
-
[fn2()](#fn2)
### fn1()
a desc for fn1
#### See also
-
[fn2()](#fn2)
### fn2()
a desc for fn2 EOF
assert


Whatever people challenges you’re facing, we can help you tackle them head-on through brilliant communication and brand management.
Our approach is integrated, covering everything from initially grabbing your audience’s attention, to nurturing your relationship over time. We work with all kinds of clients – and audiences who include everyone from students to CEOs. Because every organisation is unique, we don’t like one-size-fits-all solutions. Instead, we prefer to work with you to create something absolutely spot-on. However, we can break down what we do into the following key areas:


My First Three Pull Requests
In the last couple of weeks I’ve made a few pull requests on Octopress, which is the blogging platform this blog uses. The primary reason I was making the pull requests, oddly enough, was to get a sense of how the process of making changes and improvements on github works. One of the things I picked up from it was a better understanding of the use and nuance of git.
The three pull requests I made were:
The first request got approved, the second is languishing with no current action, and the third got quickly requested, with an excellent conversation.
Read on →


Webpage Roaster - Advanced Results Analysis
WPT History
WPT ID
Read Results
Page
Summary
Objects
Headers
Images
Fonts
Third Parties


Customize Toy Car
Home
Garage
Profile
Card Name
Card Number
CVC
Card Type
Master
Visa
Expiration Date
Submit Payment


Akan Name Generator
The creative web application that makes things fun for the curious;
the web application takes a user's birthday and calculates the day of the week they were born and then depending on their gender outputs their Akan Name.


Grid Based Design
This is what we use to structure our webpages. 12 columns across means that we can have the most flexibility on how wide we want each column while keeping them big enough to hold text.
Responsive Webpages
We all use so many devises these days to access the internet and they can have widely different screen sizes. By using % instead of px we are able to make the content adapt to the different sized screens. By adding an @media formula we can also change the way content appears on smaller screens so that it is more usable as we will be using our fingers and not a mouse.
Semantic structure
We need to use tags that make sense to humans and machine. The title should go in a h1 tag because this needs to be the most prominent.
Other reflections
A couple of other interesting things to note from the tutorial is the css 'overflow: auto;' which means that you can limit the area that the text is taking and a scrollbar will apear. I also appreciated the mention of Google Fonts which look to be a fantastic resource and placepuppy.it which will hold the place of an image while the correct one is found.


Login
Register
Username
Password
Home Page
Username
Password
Repeat Password
Email Address
Already Member?


--- layout: basic ---
{{ site.title | newline_to_br }}
A beautiful feature-rich GraphQL Client for all platforms
{{ site.learn_more | markdownify }}


StackOverflow-Lite
Login
ASK THE EXPERTS
Meet the experts. Ask Questions, Get Answers and Contribute
Username
Email
Password
Register


Configuring NUT for the Eaton 3S UPS on Ubuntu Linux
Note: Since this post was published I’ve installed and tests on Ubuntu Server 14.04 and have highlighted the difference between Ubuntu 14.04 and 12.04 at the end of this post.
This post explains how to configure Network UPS Tools (NUT) to work with an Eaton 3S UPS on a stand-alone Ubuntu 12.04 PC (Nut version 2.6.3).
Network UPS Tools (NUT) seems to be the most widely supported and used UPS management package for Linux. It is extremely flexible and caters for a wide range of UPS makes, models and deployment scenarios. The sheer scope and flexibility of NUT makes UPS selection and configuration daunting. The purpose of this article is to illustrate a minimal configuration to achieve stand-alone UPS management of a single Ubuntu 12.04 based PC.
NUT configuration
Here’s how this configuration works: when power has dropped out for more than 3 minutes NUT triggers a shutdown. The shutdown sequence closes down Ubuntu; commands the UPS to commence shutdown; and then turns off the PC. Once the PC is off the UPS turns off to conserve the UPS battery. When power is reestablished the UPS powers up and reapplies power to the PC (whether your PC turns on automatically at power resumption is determined by it’s BIOS settings).
Here are the minimal NUT configuration files:
/etc/nut/nut.conf
# Set MODE=none to disable UPS monitoring, MODE=standalone to enable UPS monitoring.
MODE=standalone
/etc/nut/ups.conf
[eaton3s]
driver=usbhid-ups
port=auto
/etc/nut/upsd.conf
/etc/nut/upsmon.conf
MONITOR eaton3s@localhost 1 monuser pass master
SHUTDOWNCMD "/sbin/shutdown -P now"
POWERDOWNFLAG /etc/killpower
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
NOTIFYCMD "/etc/nut/notifycmd"
/etc/nut/upssched.conf
/etc/nut/upsd.users
[monuser]
password=pass
upsmon master
The following notifycmd
bash script handles NUT ONBATT and ONLINE events. Put it in /etc/nut
, it is executed when NUT detects power resumption (prior to the 3 minute timeout) and when NUT detects the UPS has switched to battery (power outage). Don’t forget to make this script executable (sudo chmod +x /etc/nut/notifycmd
).
/etc/nut/notifycmd
#!/bin/bash
#
# NUT NOTIFYCMD script
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin
trap "exit 0" SIGTERM
if [ "$NOTIFYTYPE" = "ONLINE" ]
then
echo $0: power restored | wall
# Cause all instances of this script to exit.
killall -s SIGTERM `basename $0`
fi
if [ "$NOTIFYTYPE" = "ONBATT" ]
then
echo $0: 3 minutes till system powers down... | wall
# Loop with one second interval to allow SIGTERM reception.
let "n = 180"
while [ $n -ne 0 ]
do
sleep 1
let "n--"
done
echo $0: commencing shutdown | wall
upsmon -c fsd
fi
Testing the UPS
Check NUT status:
$ sudo service nut status Checking status of Network UPS Tools * upsd is running * upsmon is running
If necessary start NUT:
$ sudo service nut start
Plug in USB cable and check it’s been detected:
$ lsusb : Bus 005 Device 003: ID 0463:ffff MGE UPS Systems UPS
Check the UPS status:
$ sudo upsc eaton3s battery.charge: 100 battery.charge.low: 20 battery.runtime: 3000 battery.type: PbAc device.mfr: EATON device.model: Eaton 3S 700 : ups.status: OL CHRG ups.timer.shutdown: -1 ups.timer.start: -1 ups.vendorid: 0463
Check power off/on status by unplugging the power to the UPS until it beeps a few times then plug it back in. You will get the following console messages:
Broadcast Message from nut@nas1 (somewhere) at 13:23 ... UPS eaton3s@localhost on battery Broadcast Message from nut@nas1 (somewhere) at 13:23 ... /etc/nut/notifycmd: 3 minutes till system powers down... Broadcast Message from nut@nas1 (somewhere) at 13:23 ... UPS eaton3s@localhost on line power Broadcast Message from nut@nas1 (somewhere) at 13:23 ... /etc/nut/notifycmd: power restored
The
/var/log/syslog
should have two messages like:Feb 19 11:37:54 nas1 upsmon[3044]: UPS eaton3s@localhost on battery Feb 19 11:38:14 nas1 upsmon[3044]: UPS eaton3s@localhost on line power
Simulate a power outage (NOTE: this will take the PC to shutdown immediately):
$ sudo upsmon -c fsd
Test the
/etc/nut/notifycmd
script fully by unplugging the power from the UPS and waiting until the full shutdown sequence is played out (takes 3 minutes). Look for the message:/etc/nut/notifycmd: 3 minutes till system powers down...
UPS selection
The key to using a UPS with NUT is getting a UPS that is fully supported by the NUT version you are using (Ubuntu 12.04 has NUT 2.6.3). Here’s why I chose the Eaton 3S:
- It is fully supported by NUT UPS Tools 2.6.3 on Unbuntu 12.04 with the usbhid-ups driver.
- The vendor has a Linux commitment – they provide their own Intelligent Power Protector (IPP) software for Linux (I didn’t use it, choosing NUT instead).
- Readily available replacement battery.
- Other users report it works with Ubuntu 12.04.
Ubuntu 14.04
Since this post was originally published I’ve installed and tested Nut on Ubuntu Server 14.04 (Nut version 2.7.1) where I encountered an intermittent startup error viz. about one boot in six the UPS driver failed to connect leaving the following error in the syslog:
Poll UPS [eaton3s@localhost] failed - Driver not connected
I tried unsuccessfully to find the root of the problem by changing the startup order, in the end I worked around it by starting the Nut server at the end of the boot from /etc/rc.local
:
# If UPS server driver is not connected then restart the server.
/bin/upsc eaton3s || /usr/sbin/service nut-server restart
NOTE: NUT in 14.04 has two startup services (replacing the single nut
in 12.04): nut-client
and nut-server
– they are both started at reboot, aside from the startup error I have encountered no other differences in the move from Ubuntu 12.04 to 14.04.


Coffee Creek Country Store is a pillar of the North Lake community. It is a clean store with friendly and helpful staff and has a great variety of food and general items that save you from a longer trip to Weaverville & Redding.
"Coffee Creek is the northernmost community in Trinity County, and was a very rich mining center during the Great Gold Rush. Legend has it that a pack train loaded with coffee for the gold fields was washed away in a torrential flood, hence the name "Coffee Creek." Others contend that the normally crystal clear waters were colored a deep rich coffee color by the spring runoff. Either way, today Coffee Creek is a community in a spectacular mountain setting. You can get a meal here, and a tank of gas for the 39-mile trip over Scotts Mountain toward Interstate 5.
Coffee Creek village is the gateway to the Trinity Alps wilderness area. In the late 1800s when gold rush fever struck and the Wintu Indians had essentially vanished, this area was a temporary home to more than 1,000 gold miners. As a young engineer, Herbert Hoover stayed in Coffee Creek at the Carrville Inn, a stagecoachbaiting stop along the California Oregon trail.
Twenty miles up Coffee Creek Road at Big Flat Meadow, a settlement of about 1,500 gold miners and support people lived in a tent city. The tales of severalpound gold nuggets are just part of the story lore that locals continue to pass along. Every year, people still spend time in the streams sluicing and panning for gold. If anyone has made a significant find he or she is keeping very quiet.
In more modern times, hikers, fishermen, and hunters travel into the wilderness area to visit many of the more than 450 Alpine lakes. Many of the lakes are stocked with Brookies and, some say, Golden trout. Coffee Creek flows out of the Alps and is home to Rainbows, Brookies, and Brown trout. Deer, mountain lion, and bear are common inhabitants. The Coffee Creek area offers a great variety for bird watchers."


Snookes1516.github.io
It really disturbs me when arround 2:38 the guy says that he's doing "The F chord. C#. no", but he's actually doing E and F#, what is almost the correct. My Girlfriend's Mom Shrieked - Loving Wives - Literotica.com.
Doing - English-French Dictionary WordReference.com.
Doing homework with music : My girlfriend is always doing. All My Sons Questions and Answers - eNotes.com.
Will he come back?  Here are 10 reasons why men always Homework help perth : Homework help for middle schoolers.
Need Some Motivation Right Now? Read This IMMEDIATELY. All My Sons Questions and Answers - Discover the eNotes.com community of teachers, mentors and students just like you that can answer any question you might. Siri do my homework, 3rd grade science homework Sislovesme- Girlfriend Catches Stepsis Sucking
I Do My Girlfriends Homework - So my girlfriend is pissed. My own experience with language learning has been a long and painful journey. Some people have told me they thought I had a “natural aptitude” for learning. Doing - traduction anglais-français. Forums pour discuter de doing, voir ses formes composées, des exemples et poser vos questions. Gratuit.
School Girl Sucks Dick instead of doing Homework - Pornhub. Some researchers are urging schools to take a fresh look at homework and its potential for improving student performance. The key, they say, is to take into account. The Rabbit Ate My Homework Rachel Elizabeth Cole on Amazon.com. FREE shipping on qualifying offers. Eleven-year-old Drew Montgomery Im becoming more and more frustrated as it seems my girlfriend is always studying or doing homework and so cant see me, this happens almost everyday. The Rabbit Ate My Homework (The Rabbit Ate My. Book 1) - Kindle edition by Rachel Elizabeth Cole. Download it once and read it on your Kindle device, PC, phones. The reason for some of my earlier blogs were born of frustration at some of the things you mention. Some lack of personal responsility did exist
10 Reasons Why Men Almost Always Come Back - Mr. Perspective. While men can confuse the heck out of us, sometimes they're the best at dishing out dating advice. Learn the 7 most important dating tips for women
Sislovesme - Девушка поймала меня со сводной сестрой. Making the Right Move is Critical For Employers and Individuals Considering Opportunities, Making the Wrong Move Can be a Costly Set-Back. Watch Lesbain Homework Session online on YouPorn.com. YouPorn is the largest Blowjob porn video site with the hottest selection of free, high quality dildokissing movies.  Pornhub is home to the widest selection of free Babe sex videos. Homework help integrated 1 help me solve my algebra homework gumtree coursework help leeds 101 reasons for not doing your homework. You always offered.
Fucked While Doing Homework Porn Videos Pornhub.com.   Browse through our impressive selection of porn videos in HD quality Answers - The Most Trusted Place for Answering Life's.
This is the story of a teen who suddenly becomes aware of the allure of his girlfriends mom. Of a boy/man who struggles with the feelings this woman ignites within. My language learning experiences - Toshuō. The Rabbit Ate My Homework: Rachel Elizabeth. 7 Dating Tips for Women from Men - Dating With Dignity. NEA - Research Spotlight on Homework. Brilliant post!! Love it! Your final part particularly attracts my attention as I am personally passionate about deeging really deep to uncover
Help me write my college We have always wanted to go to doing homework makes you smarter 24 Oct 2018 Seven students at Plumpton High School in Sydney.
  Pornhub es el hogar de la más amplia selección.
When The Mistress Feels Cheated : StudwithSwag.   My boyfriend and I have been dating for three years and live together, rent-free, in the house his parents bought for him to live in while he’s in college. My girlfriend is always doing homework, homework
Why Does My Husband's Ex-Wife Hate Me? - Stepmomhelp.com. The Rabbit Ate My Homework - amazon.com. My girlfriend is always doing homework. Turn things around, and they look similar: Having a nice lawn will attract plenty of people to come visit your house. My girlfriend is mad at me beccause im always busy? We are homework talking about women who are young and homework thin. At initial your dog pen case slept completely. My girlfriend is always doing homework - Select Expert. My girlfriend is always doing homework. Homework help integrated 1 : Homework help integrated. Top Writing: My girlfriend is always doing homework. My Girlfriend is too busy!!? Yahoo Answers. My girlfriend is always doing homework to write about creative writing online graduate programs. As discussed earlier how p g pursues related diversification
“My Boyfriend’s Mother Snoops In Our Closet!”. Watch Fucked While Doing Homework porn videos for free, here on Pornhub.com. Discover the growing collection of high quality Most Relevant XXX movies and clips. My girlfriend is always doing homework - No more Fs with our reliable essay services. Fast and reliable writings from industry leading agency. Enjoy the merits. I agree with you completely! I’ve been accused of doing too much, trying to be the mom… So I backed off a little and then was accused of not caring enough. Lesbain Homework Session - Free Porn Videos - YouPorn.


|
We created the Bitnami Project to help spread the adoption of freely
available, high quality Open Source web applications. Bitnami aims to make
it easier than ever to discover, download and install Open Source software such
as document and content management systems, wikis and blogging software.
You can learn more about Bitnami at https://bitnami.com
The Bitnami WAMP Stack is an easy to install
software platform that greatly simplifies the deployment of Open Source web
stacks. It includes ready-to-run versions of
Apache, MySQL and PHP. Bitnami WAMP Stack is
distributed for free under the Apache 2.0 license.
To get started with Bitnami WAMP Stack we suggest the following:
1.- Check our documentation. The stack is self-contained and independent on your system, you can find all components in your installation directory: C:/Bitnami/wampstack-5.6.31-0
2.- Start the servers. Open the graphical "Manager" tool in your installation directory to start & stop the installed servers. You can also use "ctlscript.sh" from the command line prompt.
3.- Add more apps. Download and install any Bitnami application module to run on top of this Stack.
4.- Deploy your own project.
|


{% extends "base.html" %} {% block content %}
HTML = Hyper Text Markup Language.
Text Content : What we see.
Markup : Formating.
References & links : Images, videos, links to other pages...
It's made of elements, with an oppening Tag, Content, Closing Tag. The tag can embed attributes with values, like for an image : the source (src) and alternative content (alt).
Inline elements are like a line of text :
Blocs have a width and a heigth :
An element can be switched to inline/bloc with css property (to confirm ?)
Document Object Model. Means the page should have a tree-like structure. This structure is made by the html. The css style it.
div and span are the two main container to build the structure, but i also can use footer, header, article, section, nav, aside...
Everythink is a BOX ! Boxify a layout by organising the page with main boxes organised themeselfes with other boxes and boxes inside. Boxify with pencil, sicors, photoshop...
Normal workflow :
The styles applied to an element is applied to every child element. They got "inherited" style for their parents.
That applied for text, not blocs (inline/bloc ?)
Tags already contains some styles. For exemple, h1 is 2em, bold, margin 0,67em... It can be change, but it's use the best tag at first.
It's good to avaid repetition when programming. If I want a style be applied for several elements, I should create a class ! I also can create several classes and mix them with the shared an non-shared properties (cf trafic lights : one commun class for make them round, one for each for the colors).
There's many selectors for styling. The more specific will affect instead of the less specific. The list is ordered by specificity :
You can combine selectors. The style will apply to elements validating all of them. See this CSS tricks post for selectors generalities.
A bloc element (and inline ?) has a size defined by :
If I have a padding and border, i'ts hard to know and manage the final size of the box. I can use the css propertie {box-sizing : border-box;}. Warning : use webkit, moz, ms... for compatibility. It's also recomanded to use percentage (%) when possible.
Blocs elements are 100% widht by default. I can allow them to align side by side with the propertie {display : flexbox} applied to the parent element. Don't foget to reduce the size of child smaller than 100% (80%, max-width, ...). A complete guide to floxbox in css-tricks.
Check compatibility !


abstract val whitelist: ClassWhitelist
A whitelist that contains (mostly for security purposes) which classes can be serialized and deserialized.


Nick Reynolds
Bio
You must attach a document in which you describe the development process and highlight what you consider was easy or difficult. Also provide a brief description explaining which tools did
Phone
555-555-5555
Email
<EMAIL_ADDRESS>Nick Reynolds
You must attach a document in which you desc the development process and highlight what you consider. document in which you.
2021-07-02
Nick Reynolds
You must attach a document in which you desc the development process and highlight what you consider. document in which you.
2021-07-02
Nick Reynolds
You must attach a document in which you desc the development process and highlight what you consider. document in which you.
2021-07-02
Nick Reynolds
You must attach a document in which you desc the development process and highlight what you consider. document in which you.
2021-07-02
Nick Reynolds
You must attach a document in which you desc the development process and highlight what you consider. document in which you.
2021-07-02
Nick Reynolds
You must attach a document in which you desc the development process and highlight what you consider. document in which you.
2021-07-02