Australian Animal Health Laboratory
My name is Mai Hlaing Loh (pronounced May-Lee-Young Low) and I manage projects within the Proficiency Testing and Reference Materials team based at CSIRO Australian Animal Health Laboratory
Before Data School FOCUS I did not have any coding experience. My daily work pattern involved turning csv files into rich Excel files, or collating more than 40 spreadsheets of testing data from different laboratories into one “collated data table” and forcing Excel to produce Z-score analysis or Youden Plots using convoluted formula which often corrupted! These graphs and tables were cut and pasted and painstakingly reformatted in Microsoft Word. In 2018 my team produced 37 reports manually and with new projects coming online we are set to increase this number to over 50. As this will be unsustainable, we are utilising the power of R to automate as much of the process as possible.
As the Proficiency Testing programmes my team provides are expanding at an exponential rate in terms of participating laboratories, pathogen targets and countries globally. It was our goal was to automate this process utilising R to increase the efficiency of this process. Instead of downloading csv files and manipulating the data in Excel, we are now working with AAHL’s informatics team to take the directly from the server of our Laboratory web portal and process the data ‘in situ’ through R, outputting directly into final draft versions of our reports using Markdown & Knitr.
My team at the CSIRO Australian Animal Health Laboratory is accredited by the National Australian Testing Authority (NATA) to International Standards Organisation (ISO) 17043 - Proficiency Testing. In a nutshell: we directly support AAHL and veterinary testing laboratories across Australia, Asia and the Pacific maintain or establish diagnostic testing capabilities to detect pathogens of significance to agricultural and human health. Examples of these pathogens are Avian Influenza virus, Hendra virus, Foot and Mouth Disease Virus, African swine disease virus and White spot syndrome virus to name just a few! This is an integral part of protecting Australia’s pre- and post-border biosecurity preparedness for these pathogens.
We provide quality tested blind testing panels which consist of tubes of various viruses and tubes containing no virus which are sent to veterinary testing laboratories. Laboratories test these tubes using their routine diagnostic test e.g. Avian Influenza virus and report their results back to my team. We analyse these results along with other participating laboratories and process their data using robust statistical methods, creating tables containing comparisons of all laboratory result data, graphical representations of Z-score and Youden plot analyses. Commentary on diagnostic testing methods used and finally an assessment detailing whether the laboratory has passed the round of Proficiency Testing is included.
Like learning any written component of a spoken language, learning to “speak” R was the most challenging part of Data School. But like learning any language, once it “clicked” and one slowly grasps the rules of the grammar of syntax and graphs, one can see the flow of syntax and how it is laid down “stone by stone” to create a logical path to achieve the visualisation and output desired. I found the best way to learn what format worked with R and which didn’t was to repeatedly try different syntax patterns (and having an amazing core teacher like Stephen Pearce!).
I have loved exploring the myriad of packages that one can utilise with ggplot2 and Tidyverse; combining these with Markdown has the potential to reduce the time my team uses to process data into visulisations and standard report formats to deliver to clients and stakeholders. Now I have a taste of coding it has reawakened my love of both languages and (bio)informatics, I am keen to expand my knowledge into Python and well as of course trying to become fluent in R in the next few years.
Data School has been fantastic. An unusual opportunity to have dedicated time to learn specific skills in a new area. The online/part-time format was new for the Data School FOCUS, but I think it worked very well. We had one week “in person” at Black Mountain, which cemented the connections and familiarity we have with other members of the group. Each week we would log-on for two days into WebEx even if we were working on our own data in silence, it truly was a virtual classroom. My cohort all feel something is amiss not sitting (virutally) with each other for 2 days a week! We will be implementing the syntax we have developed into our ISO accredited programmes with an ambitious deadline of December. Working with our informatics teams we will develop linkages using Shiny to have laboratories upload their data into our AAHL laboratory information webpage where the data will be housed and processed directly. I have thoroughly enjoyed Data School, and although it can be challenging taking two days a week out of your core role, I highly recommend Data School FOCUS to anyone. Also a big “shout out” to our amazing facilitator Natalie Lui, one of the best I’ve experienced in CSIRO (or anywhere!).


BOARD OF TRUSTEES OF THE GENERAL RETIREMENT SYSTEM OF THE CITY OF DETROIT
2019 MEETING SCHEDULE
Proposed agendas will be made available the day prior to any upcoming meeting
Meeting Location: RETIREMENT SYSTEMS
500 Woodward Ave., Suite 3000 Detroit, MI 48226
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CONFERENCE ROOM |
June 19, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
July 03, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
July 17, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
August 7, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
August 21, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
September 4, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
September 18, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
October 2, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
October 16, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
November 6, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
November 20, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
December 04, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
December 18, 2019 |
10:00 A.M. |
CONFERENCE ROOM |
**Please Note: Any Date/Time changes will be posted accordingly.
Notice of Available ADA Accommodations for Public Meetings: With advance notice of seven calendar days, the City of Detroit will provide interpreter services at public meetings, including language translation and reasonable ADA accommodations. Please contact the Civil Rights, Inclusion and Opportunity Department at<PHONE_NUMBER>, through the TTY number 7771, or email<EMAIL_ADDRESS>to schedule these services.


Hire someone new or upskill your staff at any level
Hi <name>,
If you’re interested in taking on an apprentice, you may have wondered who’s eligible.
- Apprenticeships are available at various levels. They can be equivalent to GCSE level, or even a master’s degree.
- Your apprentice can be any age, as long as they’re 16 or over by the end of the summer holidays.
- Apprenticeships are great for hiring new staff, but they’re also ideal for upskilling or retraining your current staff, so you can fill skill gaps, boost motivation and improve retention.
Learn more about hiring an apprentice and discover how you can upskill your staff.


Welcome to Jean Kummerow & Associates LLC
If you are interested in:
- Learning more about the MBTI® Step I or Step II Inventory
- Understanding psychological type
- Building a stronger team
- Developing your skills through coaching
Then you should:
Contact Jean Kummerow & Associates LLC
Be sure to read Jean's monthly blog entries at Type for Life


Welcome to Rock Quiz!
Please fill in the following information.
Username
Password
Confirm Password
Gender
Male
Female
Age
Email
What type of quizzes are you interested in?
Science
Engineering
Art
Language


public abstract class AbstractConnection
extends java.lang.Thread
This abstract class provides the neccesary methods to maintain the actual connection and encode the messages and headers in the proper format according to the Erlang distribution protocol. Subclasses can use these methods to provide a more or less transparent communication channel as desired.
Note that no receive methods are provided. Subclasses must provide methods for message delivery, and may implement their own receive methods.
If an exception occurs in any of the methods in this class, the connection will be closed and must be reopened in order to resume communication with the peer. This will be indicated to the subclass by passing the exception to its delivery() method.
The System property OtpConnection.trace can be used to change the initial
trace level setting for all connections. Normally the initial trace level is
0 and connections are not traced unless setTraceLevel()
is used to change the setting for a particular connection.
OtpConnection.trace can be used to turn on tracing by default for all
connections.
| Modifier and Type | Method and Description |
|---|---|
void |
close()
Close the connection to the remote node.
|
abstract void |
deliver(java.lang.Exception e)
Deliver communication exceptions to the recipient.
|
abstract void |
deliver(OtpMsg msg)
Deliver messages to the recipient.
|
int |
getFlags() |
int |
getTraceLevel()
Get the trace level for this connection.
|
boolean |
isConnected()
Determine if the connection is still alive.
|
void |
run() |
void |
setFlags(int flags) |
int |
setTraceLevel(int level)
Set the trace level for this connection.
|
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
public void close()
public abstract void deliver(java.lang.Exception e)
public abstract void deliver(OtpMsg msg)
public int getFlags()
public int getTraceLevel()
public boolean isConnected()
public void run()
run
in interface java.lang.Runnable
run
in class java.lang.Thread
public void setFlags(int flags)
public int setTraceLevel(int level)
Set the trace level for this connection. Normally tracing is off by default unless System property OtpConnection.trace was set.
The following levels are valid: 0 turns off tracing completely, 1 shows ordinary send and receive messages, 2 shows control messages such as link and unlink, 3 shows handshaking at connection setup, and 4 shows communication with Epmd. Each level includes the information shown by the lower ones.
level
- the level to set.


CEO compensation is something that people in finance, accounting, economics, and outside of academia are interested in. The topic is probably the one with the most overlap between accounting and finance. In these notes, I will focus on two research questions:
How high can we expect the total compensation of a CEO to be based on some simple economic assumptions. Too high CEO compensation is sometimes seen as a signal of bad corporate goverance. To measure what ‘too high’ means, we first need to establish a baseline of what normal levels of compensation actually mean.
How should CEOs be incentivised: equity or options? And how schould we measure whether CEOs have appropriate incentives? Pay-for-performance is a big topic in accounting, finance, and economics and there is a long standing discussion of what the best performance measure is for a CEO.
Altough I am not a specialist in this literature, I am comforable with the type of economic theories that researchers test in this literature.5 The theories in these notes are all based on the overview paper by Edmans and Gabaix (2016). Finding a good overview paper is the best start to any research project. I am going to stress the role of theory in data analysis a lot. Some of you will have a topic that is at first sight less theory driven or rely more strongly on very specific knowledge about your setting. One of my goals is to convince you that even with these projects it is useful to think about the underlying story that you are testing.6 I have been mocked by multiple people in the department for asking one too many times: “I understand, but what is the story?”
The first theory on CEO compensation is mathematically easy to follow. We assume that the value of a firm depends (\(V\)) on three variables: how good the CEO is (\(T\)), how much labour is available to the firm (\(L\)), and how much capital the firm has available (\(K\)).7 This is obviously a simplification and that is fine. All theories are simplifications and too much nuance in a theory can make a theory worthless (Healy 2017). We use (T)alent to describe how good the CEO is but you can also think of the CEO’s ability or connections as part of \(T\).
\[\begin{align} \tag{2.1} &V = T^{\alpha_T} \Bigl( \frac{K}{\alpha_K} \Bigl)^{\alpha_K} \Bigl( \frac{L}{\alpha_L} \Bigl)^{\alpha_L} \end{align}\]
\[\begin{align} &\alpha_T + \alpha_K + \alpha_L = 1 \tag{2.2} \end{align}\]
The condition (2.2) implies that there is nothing special about a specific size (\(V\)) of the firm. Bigger is not necessarily better, smaller is not necessarily better. This is a very traditional constant returns to scale assumption.
We also assume that the total compensation or wage (\(W\)) of the CEO is whatever value they create over the cost of labor (\(w_L\)) and the cost of capital (\(r\)).
\[\begin{equation} W^*_T = \max_{K, L} V - w_L L - rK \tag{2.3} \end{equation}\]
With these equations in hand we can derive an empirical relation that we can test with data. The derivations are not very difficult, they are just a bit tedious.
First, let us find the optimal level of capital from the CEO’s point of view. That is, the CEO will try to attract the amount of capital that will maximise their wage. Mathematically, that means that we need to find the level of \(K\) for which the first derivative of the CEO’s wage to \(K\) equals 0.8 The \(\frac{\alpha_K}{\alpha_K}\) is a bit weird and obviously it cancels out. It’s the result of using the chain rule. The numerator is the result of taking the derivative of an exponential function. The denominator is the result of fact that we need to multiply the derivative of the exponential function with the derivative of \(\frac{K}{\alpha_K}\). The whole reason why \(V\) was set-up this way was because it makes things cancel out; it’s mathematically convenient.
\[\begin{align*} 0 = \frac{\partial W_T}{\partial K} &= T^{\alpha_T} \frac{\alpha_K}{\alpha_K} \Bigl( \frac{K}{\alpha_K} \Bigl)^{\alpha_K - 1} \Bigl( \frac{L}{\alpha_L} \Bigl)^{\alpha_L} - r \\ T^{\alpha_T} \Bigl( \frac{K}{\alpha_K} \Bigl)^{\alpha_K} \Bigl( \frac{L}{\alpha_L} \Bigl)^{\alpha_L} \frac{\alpha_K}{K} &= r \\ \frac{V \alpha_K}{K} &= r \\ \frac{V}{r} &= \frac{K}{\alpha_K} \end{align*}\]
Next, we can find the optimal level of labour that the CEO should attract.
\[\begin{align*} 0 = \frac{\partial V}{\partial K} &= T^{\alpha_T} \Bigl( \frac{K}{\alpha_K} \Bigl)^{\alpha_K} \Bigl( \frac{L}{\alpha_L} \Bigl)^{\alpha_L - 1} - w_L \\ T^{\alpha_T} \Bigl( \frac{K}{\alpha_K} \Bigl)^{\alpha_K} \Bigl( \frac{L}{\alpha_L} \Bigl)^{\alpha_L} \frac{\alpha_L}{L} &= w_L \\ \frac{V}{w_L} &= \frac{L}{\alpha_L} \end{align*}\]
We can plug these results into equation (2.3) and we get
\[\begin{equation} W^*_T = V - V \alpha_K - V\alpha_L = (1 - \alpha_K - \alpha_L) V = \alpha_T V \end{equation}\]
I like the basic intuition and deriviation of the model. The derivation is straightforward and (some of) the implicit assumptions are relatively easy to accept. The effect of the CEO depends on the size of the firm (\(V\)). When there is more capital and labour available a more talented CEO will have a bigger impact.9 If a CEO is a talented people manager, the advantage of this talent will be larger when there are more employees working in the company. The model also predicts a clear quantitative relationship between firm size, \(V\), and CEO compensation, \(W_T\), i.e. that relationship should be linear. This is a nice result that we can test with data. In contrast we would not be able to test the relationship between CEO talent and compensation because talent is very difficult to measure. We can measure \(V\) but not \(T\).
One of the assumptions in the model is that the CEO takes the ultimate decision and they have an incentive to maximise firm value because they keep the all the value after workers and investors have been paid. As it turns out when you assume competitive labour and financial markets, that assumptions does not really matter a lot for the predicted relationship between wage and firm size (Edmans and Gabaix 2016).10 That is, you could set up the model so that investors take the final decision where they offer an incentive contract to the CEO who then chooses the number of workers that maximise the their compensation under the contract. The predictions for the model would be very similar to what we have here and we would have to deal with the contract as an extra complication. Good theory papers will explain when simplifications matter and when they do not. Nevertheless, This model is too simple to capture reality perfectly, but that is not the goal of the model and of this exercise. The idea is to see whether we can find a reasonable baseline for CEO compensation that we can test against the data. Here, we have established that there should be a positive relation between the company’s size and the CEO’s compensation and the relation is larger when the CEO is more talented.
We will test the predictions of the model with data from S&P500 companies in the US. I made the data available for UWA students on LMS.11 I really want to find an open dataset where we can test the same model. In the Appendix of this chapter, you can find how you can download the same data straight from the WRDS database. The data is downloaded from Compustat and Execucomp. A lot of you will use these are similar databases in your research project. I did not clean or check the data for this exercise. In your own project, you should show a better understanding of how the data are gathered and what they include than what I am displaying here.12 The CEO compensation data is fairly complete. It includes changes in the value of equity and options. Market value also includes all outstanding financial instruments on the company.
The code below does multiple things in R
. I do not expect you
to understand or even replicate what I have done here. I include
it as a reminder of what is possible with some coding. I hope it
may serve as an inspiration further down the track when you are
doing your own research project.
library(tidyverse)
library(cowplot)
# Read the data from a custom folder. If the data is not in this
# folder, change the path to the folder. Rename some of the
# variables to make them easier to work with.
folder = "data/"
us_comp = readRDS(paste0(folder, "us-compensation.RDS")) %>%
rename(total_comp = tdc1)
us_value = readRDS(paste0(folder, "us-value.RDS")) %>%
rename(year = fyear, market_value = mkvalt)
# Match the compensation data with the value data based on
# company key and year
us_comp_value = left_join(select(us_comp, gvkey, year, total_comp),
us_value, by = c("year", "gvkey"))
# Run the non-linear regression and save the results as an
# equation to put on the figure. This goes beyond what we are
# going to do in this module.
power_law_start = list(a= 5, b = .15)
power_law_comp =
nls(total_comp/1000 ~ a * (market_value/1000)^b,
data = us_comp_value, start = power_law_start)
eqn_comp = substitute(
italic("compensation") == a * italic("MV") ^ b,
list(a = as.numeric(format(coef(power_law_comp)[1],
digits = 2)),
b = as.numeric(format(coef(power_law_comp)[2],
digits = 2))))
# create the plot
plot_comp_value =
# Add dataset and define x and y axis
ggplot(us_comp_value, aes(x = market_value/1000,
y = total_comp/1000)) +
# Add the observations as points to the plot
geom_point(alpha = .125) +
# Draw the results of the power_law regression on the plot
stat_function(fun =
function(x){
coef(power_law_comp)[1] *
x ^ coef(power_law_comp)[2]},
colour = "blue") +
ggtitle("CEO compensation (in million USD)") +
# Add label for the x-axis
ylab("Compensation") +
xlab("Company market value (in billion USD)")
(ref:us-comp-value-plot) Relation between CEO compensation and market value for the largest US firms (2011-2019).
print(plot_comp_value +
annotate("text", y = 45, x = 500, parse = TRUE,
label = as.character(as.expression(eqn_comp))))
The qualitative relationship holds quite well. Larger companies have CEOs with higher compensation. However, the relationship is far from linear and looks more like a power function. Clearly there are other effects at play. In this sample, the power coefficient is 0.31 .13 Prior studies have found a coefficient more closely to 0.33 (Baker, Jensen, and Murphy 1988). Remember that in our setup the CEO can grow the firm at will by attracting more capital and more labour. That assumption is probably too strong. Later, we will see that there other theories that describe the relation between CEO compensation and firm size and they seem to describe the data better.
There are two things you should take away from this section. What we have just done here is a research project in a nutshell. First, we used theory to derive an empirical relation between two observable variables. Second, we tested the prediction against data. The evidence I present is not in the form of a complicated statistical analysis but in a graph. You will see in the remainder of this notes that I refer over and over to the connection between theory (‘your story’) and the data. The structure I used in this chapter (Introduction, Theory, Data Analysis, Conclusion ) is also the structure of most research papers and your thesis.
An other important message is that I did not speak about a causal relation between market value and compensation. Our theory gave us a mathematical relation between the two variables and it is that relation we tried to find in the data. This is absolutely fine and I think a worthwile way to do research. However, this focus away from causal relation sometimes clashes with the popular statistical techniques and frame of mind that is presented in textbooks on causal inference (Angrist and Pischke 2008; Cunningham 2018) and which permeates the literature in accounting and finance.14 This has been a source of frustration for me for awhile. I never could clearly articulate my unease. This podcast by physist Sean Caroll helped me crystalise my thoughts. He explains that from for a physicist on a fundamental level there are no causes. Fundamental particles follow equations and that is it. What we think of as causal relations, happens at a higher level of abstraction. If you have the time, give it a listen. The title of the podcast is appropriate: ‘Mindscape’.. I have seen students and established researchers alike get confused when their theory includes both equilibrium relations and a causal story. Throughout these notes I will try to explain the differences so that you can avoid the confusion when you start your own research project.
To get access to the Wharton Research Data
Services, you first
will have to obtain a username and password through your
university’s subscription. To get access to the databases, you
have to install the Rpostgres
package (Wickham, Ooms, and Müller 2019) and make a
file where you can securely store your password. The WRDS
website
gives excellent guidelines on how to do that. You can then use
the following code to establish a connection with the WRDS
services.
library(RPostgres)
wrds <- dbConnect(Postgres(),
host='wrds-pgdata.wharton.upenn.edu',
port=9737,
dbname='wrds',
user='stimas',
sslmode='require')
With an SQL string, we define which data we want. We send the SQL query to the database via de connection. We download the actual data and save in an R object. We close the data, see whether our dataset is the right one, and then save the R object as a file on our computer.
library(tidyverse)
sql1 <- "SELECT year, gvkey, cusip,
exec_fullname, coname, ceoann,
execid, bonus, salary,
stock_awards_fv, stock_unvest_val,
eip_unearn_num, eip_unearn_val,
option_awards, option_awards_blk_value,
option_awards_num, tdc1, tdc2,
shrown_tot_pct,
becameceo, joined_co, reason
FROM EXECCOMP.ANNCOMP
WHERE year > 2010 AND ceoann = 'CEO'"
res <- dbSendQuery(wrds, sql1)
compensation <- as_tibble(dbFetch(res)) %>%
rename_all(tolower)
dbClearResult(res)
glimpse(compensation)
saveRDS(compensation,
"../data/us-compensation-new.RDS")
Now, we do the same for the market value of the company.
gvkeys <- unique(compensation$gvkey)
length(gvkeys)
sql2 <- paste0("SELECT fyear, gvkey, mkvalt, ni ",
"FROM COMP.FUNDA ",
"WHERE fyear > 2010 ",
"AND gvkey in ('",
paste(gvkeys, collapse = "','"),
"')"
)
res <- dbSendQuery(wrds, sql2)
value <- as_tibble(dbFetch(res)) %>%
rename_all(tolower)
dbClearResult(res)
glimpse(value)
value <- distinct(value)
glimpse(value)
saveRDS(value, "../data/us-value-new.RDS")
Angrist, Joshua D, and Jörn-Steffen Pischke. 2008. Mostly Harmless Econometrics: An Empiricist’s Companion. Princeton university press.
Baker, George P, Michael C Jensen, and Kevin J Murphy. 1988. “Compensation and Incentives: Practice Vs. Theory.” The Journal of Finance 43 (3). Wiley Online Library: 593–616.
Cunningham, Scott. 2018. Causal Inference: The Mixtape.
Edmans, Alex, and Xavier Gabaix. 2016. “Executive Compensation: A Modern Primer.” Journal of Economic Literature 54 (4): 1232–87.
Healy, Kieran. 2017. “Fuck Nuance.” Sociological Theory 35 (2). SAGE Publications Sage CA: Los Angeles, CA: 118–27.
Wickham, Hadley, Jeroen Ooms, and Kirill Müller. 2019. RPostgres: ’Rcpp’ Interface to ’Postgresql’. https://CRAN.R-project.org/package=RPostgres.
Page built: 2021-02-24


As of 5 months before graduation, 77% of students already have an offer, and 15% of students are
still looking for a job.
7 students are planning to do graduate studies after
graduating. Although most of the class plans to join the workforce immediately,
34% of students are considering grad school in the future.
Even though 80% of the class has worked in California, less than half of
students have chosen to live in California after graduating. Although California
is perceived by many as the place to be for software engineers, seeing the gap
in the conversion rate suggests that there are many other great places for
software engineers such as East Coast Canada, East Coast US and Pacific North
West US.
Good compensation and growth as an engineer were the main
factors affecting post-graduation plans.
This could explain why California was a popular choice for full-time location.
Although family may be the least popular factor, most students working away
from home have expressed interest in working near their families in the
future.
65% of students are graduating debt-free.
30% of students have less than $30,000 in debt. Among students who are
in debt, the median debt is $22,500.
It's important to note that there were students from each family income bracket
who graduated debt-free.
All students with family income higher than $200,000 graduated debt-free.
"Figure out which advice applies best to you and ignore the rest."
The following is a summary of the advice shared by students with the
intention of being shared with both prospective and current SE students.
Many of the sentences
are directly quoted or rephrased from the original advice.
Your success should not be defined by others.  Instead, be open and realize
you can learn something from everyone. Realize that your peers' successes
should be motivation rather than a reason to put yourself down.
Find value in modesty, empathy, and courage. Learn to develop good habits
early on, and budget your time based on your options and priorities. These
skills are indispensable during university. Find a hobby you love. That
hobby just might be software engineering, or it could be something completely
different like drawing video game characters.
Stop worrying about marks. They don't get you far unless you're looking at
post graduate studies. This also means that you should know when to stop working
on assignments to work on other things. "After graduation, I won't remember
many of the bogus technical concepts. I will, however, remember the late
nights in the SE lab with friends, fooling around while doing a last minute
assignment."
Try out as many different co-ops as possible. And don't Cali or continuous.
It's tough to get your first job, but don't give up. And if you get a co-op at
a big company, it does not mean that you're at the top of the world.
And most importantly, university goes by in a flash, so enjoy it!
- University of Waterloo Software Engineering Class of 2018


13.40. Release 0.211
General Changes
- Fix missing final query plan in
QueryCompletedEvent
. Statistics and cost estimates
are removed from the plan text because they may not be available during event generation.
- Update the default value of the
http-server.https.excluded-cipher
config
property to exclude cipher suites with a weak hash algorithm or without forward secrecy.
Specifically, this means all ciphers that use the RSA key exchange are excluded by default.
Consequently, TLS 1.0 or TLS 1.1 are no longer supported with the default configuration.
The http-server.https.excluded-cipher
config property can be set to empty string
to restore the old behavior.
- Add
ST_GeomFromBinary()
and ST_AsBinary()
functions that convert
geometries to and from Well-Known Binary format.
- Remove the
verbose_stats
session property, and rename the task.verbose-stats
configuration property to task.per-operator-cpu-timer-enabled
.
- Improve query planning performance for queries containing multiple joins
and a large number of columns (#11196).
- Add built-in file based property manager
to automate the setting of session properties based on query characteristics.
- Allow running on a JVM from any vendor that meets the functional requirements.
Hive Connector Changes
- Fix regression in 0.210 that causes query failure when writing ORC or DWRF files
that occurs for specific patterns of input data. When the writer attempts to give up
using dictionary encoding for a column that is highly compressed, the process of
transitioning to use direct encoding instead can fail.
- Fix coordinator OOM when a query scans many partitions of a Hive table (#11322).
- Improve readability of columns, partitioning, and transactions in explain plains.
Thrift Connector Changes
- Fix lack of retry for network errors while sending requests.
Resource Group Changes
- Add documentation for new resource group scheduling policies.
- Remove running and queue time limits from resource group configuration.
Legacy behavior can be replicated by using the
file based property manager
to set session properties.
SPI Changes
- Clarify semantics of
predicate
in ConnectorTableLayout
.
- Reduce flexibility of
unenforcedConstraint
that a connector can return in getTableLayouts
.
For each column in the predicate, the connector must enforce the entire domain or none.
- Make the null vector in
ArrayBlock
, MapBlock
, and RowBlock
optional.
When it is not present, all entries in the Block
are non-null.


You may go ahead and log in now.


Education
-
2016-Present
Bachelor's of Engineering (Information Technology)
R.G.P.V. - Bhopal -
2014-2016
High School - Maths & Science
Central Board of Secondary Education
I am a third year student pursuing a Bachelor's degree in Information Technology with a focus on Full Stack Development. I love to learn new technologies and to see how things work. I tend to code things from scratch. I have always sought out opportunities and challenges that are meaningfull to me. I'm quite confident, naturally curious, and constantly improving my skills.
C
C++
Java
Python
HTML 5
CSS3
JS
PHP
MySQL
MongoDB
Git
Bachelor's of Engineering (Information Technology)
R.G.P.V. - Bhopal
High School - Maths & Science
Central Board of Secondary Education
When something is important enough, you do it even if the odds are not in your favor
- Elon Musk -


On 4 September 2019, 7 new articles were published in 6 journals.
Writing Southeast Asian Security: Regional Security and the War on Terror After 9/11
Pragmatic Implication in the Interrogation Room: A Comparison of Juveniles and Adults
Note: although this article was published on 27 August 2019, the publisher only added it to the journal RSS feed on 4 September 2019, which is why it is shown in the list of articles for that date.
Christchurch in the Context of New Zealand Terrorism and Right Wing Extremism
Assessing the Efficacy of Alternatives to Incarceration Within Seven Federal Districts
Succession, Opportunism, and Rebellion on State Supreme Courts: Decisions to Run For Chief Justice


Places
About
Gongfucha is a community of tea enthusiasts; we come together to celebrate good tea and tea ceremonies.
Submit
We welcome new submissions from our users. Submit a new gongfucha tea shop, tea house or tea event here.
Gongfucha is a community of tea enthusiasts; we come together to celebrate good tea and tea ceremonies.
We welcome new submissions from our users. Submit a new gongfucha tea shop, tea house or tea event here.


or create your own below
This kicks everything off, and needs to be called pretty much immediately. Never pass true to this function.
When a number is passed, it'll try to play the song based on position in the playlist. If nothing's passed, it resumes playing.
Pauses. This is triggered when the volume is set to 0.
Mixing things up. This toggles play and pause, for a certain button that shouldn't be enabled.
Plays the next song. I should probably make a prev() too.
Get or set the volume; Accepts a value between 0 and 1
Get or set the color of a specific element. There are currently only 3 elements: "main", "wave", and "progress".
- main is the background color for the playlist
- wave is the background color of the waveform/frequency bar thing
- progress is the color of the progress bar overlay
setColor accepts any css-valid color value.
You can also set the color by passing an object with the above keys paired with a color string eg. {main:'#eee',wave:'#444',progress:'#aaa'}
If you reallly feel like breaking away from the a e s t h e t i c you can pass true to this.


Every night one chicken refuses to climb into the coop. Every night I feel there's some lesson in her reluctance. Tonight I've got it... 6/25/2015, 9:25:17 PM Favs: 3 Retweets: 0 link


« CSS « CSS Reference « CSS Reference:Mozilla Extensions
:-moz-locale-dir(rtl)
matches an element if the user interface is being displayed right-to-left. This is determined by the preference intl.uidirection.
locale
(where locale
is the current locale) being set to "rtl".
This allows extensions (and themes) to easily adapt their user interface based on the user's locale's needs. This can vary from window to window, and even from tab to tab. This also allows extensions to work even if they don't support the user's default locale, since they can support both left-to-right and right-to-left layouts without worrying about the locale specifics.
This selector does not work properly from HTML; it never matches, no matter whether the UI locale is left-to-right or right-to-left.


Developing Smart Contracts With Eos
Developing Smart Contracts / Decentralized Applications with EOS.IO 使用eos开发智能合约（分布式应用程序）
本文翻译自：https://eosio.github.io/eos/md_contracts_eoslib_tutorial.html
译者：区块链中文字幕组 胡亮
翻译时间：2017-09-20
This tutorial is targeted toward those who would like to get started building decentralized applications or smart contracts using the EOS.IO software development kit. It will cover writing contracts/applications in C++ and uploading them to the blockchain. It will not cover how to build or deploy interactive web interfaces.
本教程的目标用户：想使用 eos sdk 来构建分布式应用程序或智能合约的人。包括两部分内容：如何使用 C++ 语言编写智能合约以及上传智能合约到区块链。它不涉及怎么编译eos和部署交互式web接口。
For the rest of this tutorial we will use the term “contract” to refer to the code that powers decentralized applications.
在后面的文章中，我们将使用术语”contract“表示分布式应用程序。
Required Background Knowledge 需要的背景知识
This tutorial assumes that you have basic understanding of how to use ‘eosd’ and ‘eosc’ to setup a node and deploy the example contracts. If you have not yet successfully followed that tutorial, then do that first and come back.
本教程假定你已经基本知道如何使用 eosd
和 eosc
来搭建一个节点和部署例子合约。如果你没有按照那个教程做成功，请先去完成它，然后再回来这里。
C / C++ Experience Required 需要有 C/C++ 编程经验
EOS.IO based blockchains execute user generated applications and code using Web Assembly (WASM). WASM is an emerging web standard with widespread support of Google, Microsoft, Apple, and others. At the moment the most mature toolchain for building applications that compile to WASM is clang/llvm with their C/C++ compiler.
EOS.IO 底层区块链使用 WASM 执行用户应用程序。WASM 是一个正被 Google、微软、苹果和其他公司广泛支持的web标准。当前构建应用程序最成熟的工具链是：使用带有c/c++编译器的 clang/llvm来编译应用程序为WASM。
Other toolchains in development by 3rd parties include: Rust, Python, and Solidiity. While these other languages may appear simpler, their performance will likely impact the scale of application you can build. We expect that C++ will be the best language for developing high-performance and secure smart contacts.
第三方的其他工具链包括：Rust，Python，和 Solidiity。这些语言看起来更简单，但是，性能可能会影响到应用程序的扩展。我们认为，C++ 是最好的用于开发高性能、安全智能合约的编程语言。
If you are not experienced with C/C++, then you should learn the basics first and then come back.
如果你对C/C++不熟，你应该先去学习一下C++基础知识，然后再回来这里。
Linux / Mac OS X Command Line Linux 或 Mac OSX 命令行
The EOS.IO software only officially supports unix environments and building with clang.
EOS.IO 软件，官方仅支持 Unix 环境，并且使用 clang 来构建。
Basics of Smart Contracts / Decentralized Applications 智能合约/分布式应用程序基础
Fundamentally every contract is a state machine that responds to signed user actions. These contracts are uploaded to the blockchain as pre-compiled Web Assembly (WASM) files with an ABI (Application Binary Interface).
本质上，每一个智能合约都是一个状态机。它响应签名的用户行为。智能合约以 WASM 和 ABI 的形式被上传到区块链。
To keep things simple we have created a tool called eoscpp which can be used to bootstrap a new contract. For this to work we assume you have installed the eosio/eos code installed and that ${CMAKE_INSTALL_PREFIX}/bin is in your path.
简化起见，我们已经创建了 eoscpp
工具来生成一个新的智能合约。该工具正常工作的前提是，你已经安装了 eosio/eos 代码，并且 ${CMAKE_INSTALL_PREFIX}/bin
在你的 PATH
路径了。
译者说：
eoscpp
工具在你 make 完eos项目之后，在/path/to/build/tools
文件夹中。你需要执行make install
来安装它。
$ eoscpp -n hello
$ cd hello
$ ls
The above will create a new empty project in the ‘./hello’ folder with three files:
以上命令执行完后，将在 ./hello
目录下生成一个新的空项目。hello
文件夹包括三个文件：
hello.abi hello.hpp hello.cpp
Let’s take a look at the simplest possible contract:
让我们来看一下最简单可用的智能合约：
cat hello.cpp
#include <hello.hpp>
/**
* The init() and apply() methods must have C calling convention so that the blockchain can lookup and
* call these methods.
*/
extern "C" {
/**
* This method is called once when the contract is published or updated.
*/
void init() {
eos::print( "Init World!\n" );
}
/// The apply method implements the dispatch of events to this contract
void apply( uint64_t code, uint64_t action ) {
eos::print( "Hello World: ", eos::Name(code), "->", eos::Name(action), "\n" );
}
} // extern "C"
This contract implements the two entry points, init and apply. All it does is log the messages delivered and makes no other checks. Anyone can deliver any message at any time provided the block producers allow it. Absent any required signatures, the contract will be billed for the bandwidth consumed.
这个合约实现两个入口点：init 和 apply。他们都仅仅是打印了日志，而没有做其他的校验。所以，任何人都可以在任何时间发生任何消息，只要区块生产者允许。不带任何签名的合约将会产生带宽消费的账单。
You can compile this contract into a text version of WASM (.wast) like so:
你可以像这样编译合约为文本格式的 WASM：
$ eoscpp -o hello.wast hello.cpp
Deploying your Contract 部署合约
Now that you have compiled your application it is time to deploy it. This will require you to do the following first:
既然你已经编译完了，下面就来部署它。部署之前，需要先完成以下步骤：
- start eosd with wallet plugin enabled 带着钱包插件启动
eosd
- create a wallet & import keys for at least one account 创建一个钱包，并且为至少一个账户导入私钥
- keep your wallet unlocked 确保钱包没有锁定
Assuming your wallet is unlocked and has keys for ${account}, you can now upload this contract to the blockchain with the following command:
假设你的钱包没有锁定，并且有 ${account} 账户的key，你可以使用以下命令上传合约到区块链：
$ eosc set contract ${account} hello.wast hello.abi
Reading WAST...
Assembling WASM...
Publishing contract...
{
"transaction_id": "1abb46f1b69feb9a88dbff881ea421fd4f39914df769ae09f66bd684436443d5",
"processed": {
"refBlockNum": 144,
"refBlockPrefix":<PHONE_NUMBER>,
"expiration": "2017-09-14T05:39:15",
"scope": [
"eos",
"${account}"
],
"signatures": [
"2064610856c773423d239a388d22cd30b7ba98f6a9fbabfa621e42cec5dd03c3b87afdcbd68a3a82df020b78126366227674dfbdd33de7d488f2d010ada914b438"
],
"messages": [{
"code": "eos",
"type": "setcode",
"authorization": [{
"account": "${account}",
"permission": "active"
}
],
"data": "0000000080c758410000f1010061736d0100000001110460017f0060017e0060000060027e7e00021b0203656e76067072696e746e000103656e76067072696e7473000003030202030404017000000503010001071903066d656d6f7279020004696e69740002056170706c7900030a20020600411010010b17004120100120001000413010012001100041c00010010b0b3f050041040b04504000000041100b0d496e697420576f726c64210a000041200b0e48656c6c6f20576f726c643a20000041300b032d3e000041c0000b020a000029046e616d6504067072696e746e0100067072696e7473010004696e697400056170706c790201300131010b4163636f756e744e616d65044e616d6502087472616e7366657200030466726f6d0b4163636f756e744e616d6502746f0b4163636f756e744e616d6506616d6f756e740655496e743634076163636f756e740002076163636f756e74044e616d650762616c616e63650655496e74363401000000b298e982a4087472616e736665720100000080bafac6080369363401076163636f756e7400076163636f756e74"
}
],
"output": [{
"notify": [],
"deferred_transactions": []
}
]
}
}
If you are monitoring the output of your eosd process you should see:
如果你正在监控 eosd
的输出，你应该能看到：
...] initt generated block #188249 @ 2017-09-13T22:00:24 with 0 trxs 0 pending
Init World!
Init World!
Init World!
You will notice the lines “Init World!” are executed 3 times, this isn’t a mistake. When the blockchain is processing transactions the following happens:
你已经注意到了 “Init World!” 被执行了3次，这不是错误。区块链处理交易的流程是这样的：
- eosd receives a new transaction eosd收到一个新的交易
- creates a temporary session 创建一个临时会话
- attempts to apply the transaction 尝试去 apply 这个交易
- succeeds and prints “Init World!” 成功的话并且打印： “Init World!”
- or fails undoes the changes (potentially failing after printing “Init World!”) 失败的话，撤销改动
- eosd starts to produce a block eosd 开始生产一个区块
- undoes all pending state 撤销所有 pending 状态
- pushes all transactions as it builds the block 把所有的交易推送过来生产区块
- prints “Init World!” a second time 第二次打印 ”Init World!”
- finishes building the block 完成区块生产
- undoes all of the temporary changes while creating block 撤销生产区块时的所有临时改变
- eosd pushes the generated block as if it received it from the network eosd 推送生成的区块到区块链网络
- prints “Init World!” a third time 第三次打印 “Init World”
At this point your contract is ready to start receiving messages. Since the default message handler accepts all messages we can send it anything we want. Let’s try sending it an empty message:
现在，你的合约准备好开始接受消息了。因为默认的消息处理器接收任意的消息，所以，我们可以发送我们想发送的任何消息。我们来尝试发送一个空消息。
$ eosc push message ${account} hello '"abcd"' --scope ${account}
This command will send the message “hello” with binary data represented by the hex string “abcd”. Note, in a bit we will show how to define the ABI so that you can replace the hex string with a pretty, easy-to-read, JSON object. For now we merely want to demonstrate how the message type “hello” is dispatched to account.
这个命令将发送以十六进制字符串“abcd”表示的二进制数据为消息内容的消息“hello”。注意：现在我们将展示如何定义 ABI，以便你可以使用一个美观的，易读的JSON对象来替换十六进制字符串。现在，我们只不过想举例说明，“hello”类型的消息是如何被分发给某个账号的。
The result is:
结果是：
{
"transaction_id": "69d66204ebeeee68c91efef6f8a7f229c22f47bcccd70459e0be833a303956bb",
"processed": {
"refBlockNum": 57477,
"refBlockPrefix":<PHONE_NUMBER>,
"expiration": "2017-09-13T22:17:04",
"scope": [
"${account}"
],
"signatures": [],
"messages": [{
"code": "${account}",
"type": "hello",
"authorization": [],
"data": "abcd"
}
],
"output": [{
"notify": [],
"deferred_transactions": []
}
]
}
}
If you are following along in eosd then you should have seen the following scroll by the screen:
如果你正盯着 eosd
的输出，你应该已经看到下面的内容滚动在屏幕上。
Hello World: ${account}->hello
Hello World: ${account}->hello
Hello World: ${account}->hello
Once again your contract was executed and undone twice before being applied the 3rd time as part of a generated block.
再一次看到，合约被执行和撤销了两次，第三次作为一个生成的区块被应用。
Message Name Restrictions 消息名约束
Message types (eg. “hello”) are actually base32 encoded 64 bit integers. This means they are limited to the charcters a-z, 1-5, and ‘.’ for the first 12 charcters and if there is a 13th character then it is restricted to the first 16 characters (‘.’ and a-p).
消息类型（像：“hello”）实际上是经 base32 算法编码的64位整数。这意味着，消息名开头的12个字符被限制为:字符a-z,1-5和’.’。超过13个字符则消息名开头的16个字符限制为：’.’和 a-p。
ABI - Application Binary Interface 应用程序二进制接口
The ABI is a JSON-based description on how to convert user actions between their JSON and Binary representations. The ABI also describes how to convert the database state to/from JSON. Once you have described your contract via an ABI then developers and users will be able to interact with your contract seemlessly via JSON.
ABI是基于JSON格式来描述在JSON格式与二进制格式之间怎么转换用户动作。ABI也描述怎么让数据库状态和JSON格式互转。一旦你通过ABI来描述你的合约，其他开发者和用户将能够通过JSON跟你的合约进行交互。
We are working on tools that will automate the generation of the ABI from the C++ source code, but for the time being you may have to generate it manually.
我们的工具将从C++源码自动生成ABI。但是，某些时候你可能不得不手动生成它。
Here is an example of what the skeleton contract ABI looks like:
这是一个骨架合约ABI的例子，看起来像这样：
{
"types": [{
"newTypeName": "AccountName",
"type": "Name"
}
],
"structs": [{
"name": "transfer",
"base": "",
"fields": {
"from": "AccountName",
"to": "AccountName",
"amount": "UInt64"
}
},{
"name": "account",
"base": "",
"fields": {
"account": "Name",
"balance": "UInt64"
}
}
],
"actions": [{
"action": "transfer",
"type": "transfer"
}
],
"tables": [{
"table": "account",
"type": "account",
"indextype": "i64",
"keynames" : ["account"],
"keytypes" : ["Name"]
}
]
}
You will notice that this ABI defines an action transfer of type transfer. This tells EOS.IO that when ${account}->transfer message is seen that the payload is of type transfer. The type transfer is defined in the structs array in the object with name set to “transfer”.
你肯定注意到这个ABI定义了一个 transfer 类型的 transfer 行为。它告诉 EOS.IO ，当向账户发送 transfer 消息，消息体为 transfer 类型。transfer 类型定义在对象的结构体数组中，名字叫 transfer。
...
"structs": [{
"name": "transfer",
"base": "",
"fields": {
"from": "AccountName",
"to": "AccountName",
"amount": "UInt64"
}
},{
...
It has several fields, including from, to and amount. These fields have the coresponding types AccountName, AccountName, and UInt64. AccountName is defined as a typedef in the types array to Name, which is a built in type used to encode a uint64_t as base32 (eg account names).
它包括几个字段：from, to 和 amount。这些字段对应的类型为： AccountName, AccountName 和 UInt64。AccountName 类型是 类型数组中 Name 类型的别名。Name 类型是一个內建类型，用于使用 base32 算法编码一个 uint64_t 类型值。（如：账户名）
{
"types": [{
"newTypeName": "AccountName",
"type": "Name"
}
],
...
Now that we have reviewed the ABI defined by the skeleton, we can construct a message call for transfer:
既然我们已经看过了 skeleton 中 ABI 的定义，现在我们来构造一个 transfer 消息调用。
eosc push message ${account} transfer '{"from":"currency","to":"inita","amount":50}' --scope initc
2570494ms thread-0 main.cpp:797 operator() ] Converting argument to binary...
{
"transaction_id": "b191eb8bff3002757839f204ffc310f1bfe5ba1872a64dda3fc42bfc2c8ed688",
"processed": {
"refBlockNum": 253,
"refBlockPrefix":<PHONE_NUMBER>,
"expiration": "2017-09-14T00:44:28",
"scope": [
"initc"
],
"signatures": [],
"messages": [{
"code": "initc",
"type": "transfer",
"authorization": [],
"data": {
"from": "currency",
"to": "inita",
"amount": 50
},
"hex_data": "00000079b822651d000000008040934b3200000000000000"
}
],
"output": [{
"notify": [],
"deferred_transactions": []
}
]
}
}
If you observe the output of eosd you should see:
如果你观察 eosd 的输出，你应该看到了：
Hello World: ${account}->transfer
Hello World: ${account}->transfer
Hello World: ${account}->transfer
Processing Arguments of Transfer Message 处理 transfer 消息参数
According to the ABI the transfer message has the format:
根据 ABI 中，transfer 消息的格式：
"fields": {
"from": "AccountName",
"to": "AccountName",
"amount": "UInt64"
}
We also know that AccountName -> Name -> UInt64 which means that the binary representation of the message is the same as:
我们知道 AccountName->Name->UInt64
，这个转换意味着，消息的二进制格式跟下面的表示一样：
struct transfer {
uint64_t from;
uint64_t to;
uint64_t amount;
};
The EOS.IO C API provides access to the message payload via the Message API:
EOS.IO 接口提供消息API来访问消息体内容。
uint32_t messageSize();
uint32_t readMessage( void* msg, uint32_t msglen );
Let’s modify hello.cpp to print out the content of the message:
我们来修改 hello.cpp
，打印消息体的内容：
#include <hello.hpp>
extern "C" {
void init() {
eos::print( "Init World!\n" );
}
struct transfer {
uint64_t from;
uint64_t to;
uint64_t amount;
};
void apply( uint64_t code, uint64_t action ) {
eos::print( "Hello World: ", eos::Name(code), "->", eos::Name(action), "\n" );
if( action == N(transfer) ) {
transfer message;
static_assert( sizeof(message) == 3*sizeof(uint64_t), "unexpected padding" );
auto read = readMessage( &message, sizeof(message) );
assert( read == sizeof(message), "message too short" );
eos::print( "Transfer ", message.amount, " from ", eos::Name(message.from), " to ", eos::Name(message.to), "\n" );
}
}
} // extern "C"
Then we can recompile and deploy it with:
接着，我们使用以下命令重新编译和部署该合约：
eoscpp -o hello.wast hello.cpp
eosc set contract ${account} hello.wast hello.abi
eosd will call init() again because of the redeploy
因为重新部署，eosd 将再次调用 init()
Init World!
Init World!
Init World!
Then we can execute transfer:
然后，我们执行 transfer 行为:
$ eosc push message ${account} transfer '{"from":"currency","to":"inita","amount":50}' --scope ${account}
{
"transaction_id": "a777539b7d5f752fb40e6f2d019b65b5401be8bf91c8036440661506875ba1c0",
"processed": {
"refBlockNum": 20,
"refBlockPrefix": 463381070,
"expiration": "2017-09-14T01:05:49",
"scope": [
"${account}"
],
"signatures": [],
"messages": [{
"code": "${account}",
"type": "transfer",
"authorization": [],
"data": {
"from": "currency",
"to": "inita",
"amount": 50
},
"hex_data": "00000079b822651d000000008040934b3200000000000000"
}
],
"output": [{
"notify": [],
"deferred_transactions": []
}
]
}
}
And on eosd we should see the following output:
在 eosd 中，我们应该能看到以下输出：
Hello World: ${account}->transfer
Transfer 50 from currency to inita
Hello World: ${account}->transfer
Transfer 50 from currency to inita
Hello World: ${account}->transfer
Transfer 50 from currency to inita
Using C++ API to Read Messages 使用 C++ API来读消息
So far we used the C API because it is the lowest level API that is directly exposed by EOS.IO to the WASM virtual machine. Fortunately, eoslib provides a higher level API that removes much of the boiler plate.
到此为止，我们已经使用 C 语言接口实现了读消息。C语言接口是 EOS.IO 暴露给 WASM 虚拟机的最低级别接口。幸运的是， eoslib
提供更高级别的接口，来帮助我们屏蔽很多底层细节。
namespace eos {
template<typename T>
T currentMessage();
}
We can update hello.cpp to be more concise as follows:
我们可以像下面这样来更新 hello.cpp
，hello.cpp
文件变得更加简洁了。
#include <hello.hpp>
extern "C" {
void init() {
eos::print( "Init World!\n" );
}
struct transfer {
eos::Name from;
eos::Name to;
uint64_t amount;
};
void apply( uint64_t code, uint64_t action ) {
eos::print( "Hello World: ", eos::Name(code), "->", eos::Name(action), "\n" );
if( action == N(transfer) ) {
auto message = eos::currentMessage<transfer>();
eos::print( "Transfer ", message.amount, " from ", message.from, " to ", message.to, "\n" );
}
}
} // extern "C"
You will notice that we updated the transfer struct to use the eos::Name type directly, and then condenced the checks around readMessage to a single call to currentMessage.
你肯定注意到，我们修改 transfer 结构为直接使用 eos::Name
类型。readMessage
相关的代码替换为一次调用 currentMessage
。
After compiling and uploading it you should get the same results as the C version.
重新编译并且上传到区块链后，你应该看到跟 C 版本的代码相同的结果。
Requiring Sender Authority to Transfer
One of the most common requirements of any contract is to define who is allowed to perform the action. In the case of a curency transfer, we want require that the account defined by the from parameter signs off on the message.
一个通用的合约需求是定义谁被允许执行某个 action 。在金融交易的案例中，我们要求转出账户的消息带签名。
The EOS.IO software will take care of enforcing and validating the signatures, all you need to do is require the necessary authority.
EOS.IO 软件将强制验证签名。你只需要请求必要的授权。
...
void apply( uint64_t code, uint64_t action ) {
eos::print( "Hello World: ", eos::Name(code), "->", eos::Name(action), "\n" );
if( action == N(transfer) ) {
auto message = eos::currentMessage<transfer>();
eos::requireAuth( message.from );
eos::print( "Transfer ", message.amount, " from ", message.from, " to ", message.to, "\n" );
}
}
...
After building and deploying we can attempt to transfer again:
重新编译和部署后，我们再次尝试 transfer ：
eosc push message ${account} transfer '{"from":"initb","to":"inita","amount":50}' --scope ${account}
1881603ms thread-0 main.cpp:797 operator() ] Converting argument to binary...
1881630ms thread-0 main.cpp:851 main ] Failed with error: 10 assert_exception: Assert Exception
status_code == 200: Error
: 3030001 tx_missing_auth: missing required authority
Transaction is missing required authorization from initb
{"acct":"initb"}
thread-0 message_handling_contexts.cpp:19 require_authorization
...
If you look on eosd you will see this:
在 eosd 输出里，你会看到这些：
Hello World: initc->transfer
1881629ms thread-0 chain_api_plugin.cpp:60 operator() ] Exception encountered while processing chain.push_transaction:
...
This shows that it attempted to apply your transaction, printed the initial “Hello World” and then aborted when eos::requireAuth failed to find authorization of account initb.
这显示区块链尝试去执行你的交易，打印了初始化“Hello,World”文本，然后调用 eos::requireAuth
时，因找不到 initb 账户的授权信息而失败，从而，交易中断了。
We can fix that by telling eosc to add the required permission:
我们可以修复这个问题：通过添加 permission 参数来调用 eosc
。
eosc push message ${account} transfer '{"from":"initb","to":"inita","amount":50}' --scope ${account} --permission initb@active
The –permission command defines the account and permission level, in this case we use the active authority which is the default.
--permission
命令选项定义了账户和权限级别。针对授权失败的情况，我们使用默认的 active 权限。
This time the transfer should have worked like we saw before.
这一次，transfer 应该像之前那样正常执行。
Aborting a Message on Error
A large part of contract development is verifying preconditions, such that the amount transferred is greater than 0. If a user attempts to execute an invalid action, then the contract must abort and any changes made get automatically reverted.
合约开发的大部分工作是验证先决条件，如：转移的金额要大于0。如果用户尝试执行一个非法动作，合约必须中断并且自动回滚所有的更改。
...
void apply( uint64_t code, uint64_t action ) {
eos::print( "Hello World: ", eos::Name(code), "->", eos::Name(action), "\n" );
if( action == N(transfer) ) {
auto message = eos::currentMessage<transfer>();
assert( message.amount > 0, "Must transfer an amount greater than 0" );
eos::requireAuth( message.from );
eos::print( "Transfer ", message.amount, " from ", message.from, " to ", message.to, "\n" );
}
}
...
We can now compile, deploy, and attempt to execute a transfer of 0:
我们编译、部署，并且尝试执行一个转移金额为0的动作：
$ eoscpp -o hello.wast hello.cpp
$ eosc set contract ${account} hello.wast hello.abi
$ eosc push message ${account} transfer '{"from":"initb","to":"inita","amount":0}' --scope initc --permission initb@active
3071182ms thread-0 main.cpp:851 main ] Failed with error: 10 assert_exception: Assert Exception
status_code == 200: Error
: 10 assert_exception: Assert Exception
test: assertion failed: Must transfer an amount greater than 0


Module std
Lua Standard Libraries.
This module contains a selection of improved Lua core functions, among others.
Also, after requiring this module, simply referencing symbols in the submodule hierarchy will load the necessary modules on demand.
By default there are no changes to any global symbols, or monkey
patching of core module tables and metatables. However, sometimes it's
still convenient to do that: For example, when using stdlib from the
REPL, or in a prototype where you want to throw caution to the wind and
compatibility with other modules be damned. In that case, you can give
stdlib
permission to scribble all over your namespaces by using the
various monkey_patch
calls in the library.
Functions
| assert (expect[, f=""[, ...]]) | Enhance core assert to also allow formatted arguments. |
| barrel ([namespace=_G]) | A barrel of monkey_patches. |
| elems (t) | An iterator over all elements of a sequence. |
| eval (s) | Evaluate a string as Lua code. |
| getmetamethod (x, n) | Return named metamethod, if any, otherwise nil . |
| ielems (t) | An iterator over the integer keyed elements of a sequence. |
| ipairs (t) | An iterator over elements of a sequence, until the first nil value. |
| ireverse (t) | Return a new table with element order reversed. |
| monkey_patch ([namespace=_G]) | Overwrite core methods and metamethods with std enhanced versions. |
| npairs (t) | Ordered iterator for integer keyed values. |
| pairs (t) | Enhance core pairs to respect __pairs even in Lua 5.1. |
| require (module[, min[, too_big[, pattern]]]) | Enhance core require to assert version number compatibility. |
| ripairs (t) | An iterator like ipairs, but in reverse. |
| rnpairs (t) | An iterator like npairs, but in reverse. |
| tostring (x) | Enhance core tostring to render table contents as a string. |
Tables
| std | Module table. |
Metamethods
| __index (name) | Lazy loading of stdlib modules. |
Functions
Methods- assert (expect[, f=""[, ...]])
-
Enhance core
assert
to also allow formatted arguments.Parameters:
- expect expression, expected to be truthy
- f string format string (default "")
- ... arguments to format (optional)
Returns:
-
value of expect, if truthy
Usage:
std.assert (expected ~= nil, "100% unexpected!") std.assert (expected ~= nil, "%s unexpected!", expected)
- barrel ([namespace=_G])
-
A barrel of monkey_patches.
Apply all
monkey_patch
functions. Additionally, for backwards compatibility only, write a selection of sub-module functions into the given namespace.Parameters:
- namespace table where to install global functions (default _G)
Returns:
-
table
module table
Usage:
local std = require "std".barrel ()
- elems (t)
-
An iterator over all elements of a sequence.
If t has a
__pairs
metamethod, use that to iterate.Parameters:
- t table a table
Returns:
- function iterator function
- table t, the table being iterated over
- key, the previous iteration key
See also:
Usage:
for value in std.elems {a = 1, b = 2, c = 5} do process (value) end
- eval (s)
-
Evaluate a string as Lua code.
Parameters:
- s string string of Lua code
Returns:
-
result of evaluating
s
Usage:
std.eval "math.min (2, 10)"
- getmetamethod (x, n)
-
Return named metamethod, if any, otherwise
nil
.Parameters:
- x item to act on
- n string name of metamethod to lookup
Returns:
-
function or nil
metamethod function, or
nil
if no metamethodUsage:
lookup = std.getmetamethod (require "std.object", "__index")
- ielems (t)
-
An iterator over the integer keyed elements of a sequence.
If t has a
__len
metamethod, iterate up to the index it returns.Parameters:
- t table a table
Returns:
- function iterator function
- table t, the table being iterated over
- int index, the previous iteration index
See also:
Usage:
for v in std.ielems {"a", "b", "c"} do process (v) end
- ipairs (t)
-
An iterator over elements of a sequence, until the first
nil
value.Like Lua 5.1 and 5.3, but unlike Lua 5.2 (which looks for and uses the
__ipairs
metamethod), this iterator returns successive key-value pairs with integer keys starting at 1, up to the firstnil
valued pair.Parameters:
- t table a table
Returns:
- function iterator function
- table t, the table being iterated over
- int index, the previous iteration index
See also:
Usage:
-- length of sequence args = {"first", "second", nil, "last"} --> 1=first --> 2=second for i, v in std.ipairs (args) do print (string.format ("%d=%s", i, v)) end
- ireverse (t)
-
Return a new table with element order reversed.
Apart from the order of the elments returned, this function follows
the same rules as ipairs for determining first and last elements.
Parameters:
- t table a table
Returns:
-
table
a new table with integer keyed elements in reverse
order with respect to t
See also:
Usage:
local rielems = std.functional.compose (std.ireverse, std.ielems) for e in rielems (l) do process (e) end
- monkey_patch ([namespace=_G])
-
Overwrite core methods and metamethods with
std
enhanced versions.Write all functions from this module, except
std.barrel
andstd.monkey_patch
, into the given namespace.Parameters:
- namespace table where to install global functions (default _G)
Returns:
-
table
the module table
Usage:
local std = require "std".monkey_patch ()
- npairs (t)
-
Ordered iterator for integer keyed values.
Like ipairs, but does not stop until the largest integer key.
Parameters:
- t table a table
Returns:
- function iterator function
- table t
See also:
Usage:
for i,v in npairs {"one", nil, "three"} do ... end
- pairs (t)
-
Enhance core
pairs
to respect__pairs
even in Lua 5.1.Parameters:
- t table a table
Returns:
- function iterator function
- table t, the table being iterated over
- key, the previous iteration key
See also:
Usage:
for k, v in pairs {"a", b = "c", foo = 42} do process (k, v) end
- require (module[, min[, too_big[, pattern]]])
-
Enhance core
require
to assert version number compatibility. By default match against the last substring of (dot-delimited) digits in the module version string.Parameters:
- module string module to require
- min string lowest acceptable version (optional)
- too_big string lowest version that is too big (optional)
- pattern
string
to match version in
module.version
ormodule._VERSION
(default:"([%.%d]+)%D*$"
) (optional)
Usage:
-- posix.version == "posix library for Lua 5.2 / 32" posix = require ("posix", "29")
- ripairs (t)
-
An iterator like ipairs, but in reverse.
Apart from the order of the elments returned, this function follows
the same rules as ipairs for determining first and last elements.
Parameters:
- t table any table
Returns:
- function iterator function
- table t
-
number
#t + 1
See also:
Usage:
for i, v = ripairs (t) do ... end
- rnpairs (t)
-
An iterator like npairs, but in reverse.
Apart from the order of the elments returned, this function follows
the same rules as npairs for determining first and last elements.
Parameters:
- t table a table
Returns:
- function iterator function
- table t
See also:
Usage:
for i,v in rnpairs {"one", nil, "three"} do ... end
- tostring (x)
-
Enhance core
tostring
to render table contents as a string.Parameters:
- x object to convert to string
Returns:
-
string
compact string rendering of x
Usage:
-- {1=baz,foo=bar} print (std.tostring {foo="bar","baz"})
Tables
- std
-
Module table.
In addition to the functions documented on this page, and a
version
field, references to other submodule functions will be loaded on demand.Fields:
- version release version string
Metamethods
- __index (name)
-
Lazy loading of stdlib modules.
Don't load everything on initial startup, wait until first attempt
to access a submodule, and then load it on demand.
Parameters:
- name string submodule name
Returns:
-
table or nil
the submodule that was loaded to satisfy the missing
name
, otherwisenil
if nothing was foundUsage:
local std = require "std" local prototype = std.object.prototype


Quick-Credit
Your quick money when you need it
Welcome to Quick Credit
Get a loan of up to 100, 000 Naira to settle your financial demands
Register
Log In
© 2019. All Right Reserved.
Designed by Femi Abimbola for Andela


--- layout: page title: "TriG" description: "The Resource Description Framework (RDF) is a general-purpose language for representing information in the Web. This document defines a textual syntax for RDF called TriG that allows an RDF dataset to be completely written in a compact and natural text form, with abbreviations for common usage patterns and datatypes. TriG is an extension of the Turtle [turtle] format." ---
| Document Name: | W3C TR http://www.w3.org/TR/trig |
|---|---|
| Document URI: |
http://www.w3.org/TR/trig
|
| Online Version: |
http://www.w3.org/TR/trig
|
| Organization: | World Wide Web Consortium (W3C) |
| Series: | Technical Report (TR) |
| Abstract: | The Resource Description Framework (RDF) is a general-purpose language for representing information in the Web. This document defines a textual syntax for RDF called TriG that allows an RDF dataset to be completely written in a compact and natural text form, with abbreviations for common usage patterns and datatypes. TriG is an extension of the Turtle [turtle] format. |
application/trig
Return to ( Series | Organization | all Specifications )


Before Change
J0 = jac_wrapped(x0, f0)
if len(J0.shape) != 2:
raise RuntimeError("`jac` must return at most 2-d array_like, "
"sparse matrix or LinearOperator.")
if J0.shape != (m, n):
raise RuntimeError("The return value of `jac` has wrong shape.")
After Change
jac_wrapped = None
else:
if jac_sparsity is not None and tr_solver == "exact":
raise ValueError("Usage of tr_solver="exact" with "
"`jac_sparsity` provided is forbidden.")
jac_sparsity = check_jac_sparsity(jac_sparsity, m, n)
def jac_wrapped(x, f):
J = approx_derivative(fun, x, rel_step=diff_step, method=jac,


{% extends '__base.html' %} {% block content %}
Enter your new password below
The password reset link was invalid, possibly because it has already been used. Please request a new link to reset your password.


tvrh2t(tvexpr,rhexpr)
Given virtual temperature and relative humidity, tvrh2t returns the temperature in degrees Kelvin. The operation of this function is the same as tvrh2q; refer to the above description for more information.
tvrh2t
tvrh2q


© 2017 Amanda Gault, Sam Mendez, Bex Way, Jordan Peart, Gowri Rajasekaran, Max Rashes
Sorry, those trees said the room is full, so you can't join right now!
???
Go to Join Game and enter the code above!
Players connected:
Waiting for all players to join
This game will last 2 rounds.
ROUND ?
SCORES:
????
(╯°□°）╯︵ ┻━┻
??? will judge this round.
??? is the judge. Please pick your favorite card.


English
Nederlands
Carousel without loop or auto
Carousel with auto set to 2000 (2s), this also implies loop
Carousel with loop set
Carousel with custom controls
<
>


HTML to ReScript JSX component
https://github.com/protoship/html-to-rescript-jsx
Please raise a GitHub issue if your input HTML is not converted well.
https://github.com/protoship/html-to-rescript-jsx
Please raise a GitHub issue if your input HTML is not converted well.


open class ApplicationCallPipeline : Pipeline<Unit, ApplicationCall>
Pipeline configuration for executing ApplicationCall instances
ApplicationCallPipeline()
Pipeline configuration for executing ApplicationCall instances |
val receivePipeline: ApplicationReceivePipeline
Pipeline for receiving content |
|
val sendPipeline: ApplicationSendPipeline
Pipeline for sending content |
val Call: PipelinePhase
Phase for processing a call and sending a response |
|
val Fallback: PipelinePhase
Phase for handling unprocessed calls |
|
val Infrastructure: PipelinePhase
Phase for setting up infrastructure for processing a call |
val ApplicationCallPipeline.conversionService: ConversionService |
class Application : ApplicationCallPipeline
Represents configured and running web application, capable of handling requests |
|
open class Route : ApplicationCallPipeline
Describes a node in a routing tree |


SETCIFSACL(1) CIFS Access Control List Tools SETCIFSACL(1) NAME setcifsacl - Userspace helper to alter an ACL in a security descriptor for Common Internet File System (CIFS) SYNOPSIS setcifsacl [-v|-a|-D|-M|-S] "{one or more ACEs}" {file system object} DESCRIPTION This tool is part of the cifs-utils suite. setcifsacl is a userspace helper program for the Linux CIFS client file system. It is intended to alter an ACL of a security descriptor for a file system object. It is best utilized when an option of cifsacl is specified when mounting a cifs share in conjunction with winbind facility of Samba suite. Whether a security descriptor to be set is applied or not is determined by the CIFS/SMB server. OPTIONS -v Print version number and exit. -a Add one or more ACEs to an ACL of a security descriptor. An ACE is added even if the same ACE exists in the ACL. -D Delete one or more ACEs from an ACL of a security descriptor. Entire ACE has to match in an existing ACL for the listed ACEs to be deleted. -M Modify one or more ACEs from an ACL of a security descriptor. SID and type are used to match for existing ACEs to be modified with the list of ACEs specified. -S Set an ACL of security descriptor with the list of ACEs Existing ACL is replaced entirely with the specified ACEs. Every ACE entry starts with "ACL:" One or more ACEs are specified within double quotes. Multiple ACEs are separated by a comma. Following fields of an ACE can be modified with possible values: SID: Either a name or a raw SID value. type: ALLOWED (0x0), DENIED (0x1), OBJECT_ALLOWED (0x5), OBJECT_DENIED (0x6) flags: OBJECT_INHERIT_FLAG (OI or 0x1), CONTAINER_INHERIT_FLAG (CI or 0x2), NO_PROPAGATE_INHERIT_FLAG (NI or 0x4), INHERIT_ONLY_FLAG (IO or 0x8), INHERITED_ACE_FLAG (IA or 0x10) or a combination/OR of these values. mask: Either one of FULL, CHANGE, READ, a combination of R W X D P O, or a hex value EXAMPLES Add an ACE setcifsacl -a "ACL:CIFSTESTDOM\user2:DENIED/0x1/D" <file_name> setcifsacl -a "ACL:CIFSTESTDOM\user1:ALLOWED/OI|CI|NI/D" <file_name> Delete an ACE setcifsacl -D "ACL:S-1-1-0:0x1/OI/0x1201ff" <file_name> Modify an ACE setcifsacl -M "ACL:CIFSTESTDOM\user1:ALLOWED/0x1f/CHANGE" <file_name> Set an ACL setcifsacl -S "ACL:CIFSTESTDOM\Administrator:0x0/0x0/FULL, ACL:CIFSTESTDOM\user2:0x0/0x0/FULL," <file_name> NOTES Kernel support for getcifsacl/setcifsacl utilities was initially introduced in the 2.6.37 kernel. SEE ALSO mount.cifs(8), winbindd(8), getcifsacl(1) AUTHOR Shirish Pargaonkar wrote the setcifsacl program. The Linux CIFS Mailing list is the preferred place to ask questions regarding these programs. cifs-utils 08/19/2011 SETCIFSACL(1)


- config,
- feature flipping
- and
- A/B testing
- made
- simple
Izanami is a shared configuration, feature flipping and A/B testing service perfectly well suited for micro services environments written in scala and developed by the MAIF OSS team.
Izanami provides a friendly UI for non-tech users as well as an HTTP REST API which you can call using your favorite language.
Izanami also provides first class integration : Java, Scala, Node and React and CLI clients are available to integrate Izanami easily with your applications.
"I would love to have such a tool" Obiwan Kenobi
Features
- Shared configuration
- Feature flipping
- Easy to implement toggling rules
- Activation strategy : by date, by script
- A/B testing
- Real time conversion rate statistics to evaluate A/B testing
- Simple UI and/or API driven
- Scalable
- Real time event publication
- Webhooks
- Server sent events
- Dedicated clients
- Java, Scala, Node and React and CLI
- Multi-datastores support
- Redis
- LevelDB
- In-memory
- Elastic search
- more to come
- Multi event-stores support
- redis
- kafka
- akka distributed pub sub
- Advandced Clever-Cloud integration
- Advandced Otoroshi integration
- Made with love
shared configuration
Enable live config modification across your micro services
feature flipping
Feature flipping as simple as it needs to be with toggling UI
A/B testing
A/B testing, to compare effectively UX/UI/Feature efficiency


Before I tell my story, let me indicate a few key things about me BEFORE I started taking aderall:
-5'7 in height
-135lbs in weight
-16 Years Old
-Typical teenage male, physically active and sexually thriving
-Outgoing and enthusiastic in nature
-Never done drugs except for pot once or twice
Not but a few days after the first day of school, a friend of mine (quite an active drug user) offered me a 25mg capsule of Aderall XR. Uninterested at the time, I simply took the pill with me, not caring to dose. It ended up in the hand of a pill-popper in exchange for her pizza.
Realizing I was a bit afraid of what would happen if I took it, I procrastinated taking the pill she gave me the next day just as I had the day before. After pondering the idea all morning, I decided to go for it at lunch. *Swallows pill with a gulp of milk* After lunch, I went back to class and back to having my head on the desk. I'm a very sleepy person in school...Well...Was. Completely forgetting about the pill, I perked up and decided to do some work. This event placed the first thought in my head, 'Hmm, that's odd. I never do work.'
After 3rd block (English), I headed to 4th block (Algebra 2). I HATE(D) math. As linguistically advanced as I am, I've never been a numbers person. Upon arrival to math class, I felt awake and ready to work, yet I had not given credit to the pill for this. I proceeded to do my math work, LIKE A LUNATIC. I was doing so much work I could have been doing two separate equations with each hand at incredible speeds. And, to my surprise, I UNDERSTOOD IT!! One glance at the example, and I had the whole assignment done in minutes.
That's when the thought hit me: 'Oh my God. I LOVE math! Wait, that's not normal.  Wow I can't wait to tell Michael how great I feel after school!' Michael is my best friend, he goes to and from school with me. I knew it had hit me, I felt incredible, and was working more efficiently than I had ever in my entire life. Later I found out the feeling of 'incredibleness', if you will, is called euphoria. And it was STRONNNGGG! I couldn't stop talking to my peers. I wanted to give everyone a hug, I wanted to smile endlessly, everything felt so great. I was in the best mood in my life, that fact stands today. Unfortunately it was a completely synthetic feeling.
I left school, excited with this incredible feeling of over-whelming joy, which could be rooted to no other event but the dosing on 25mg of Aderall XR at lunch. Once I got in my car with Michael, I couldn't stop telling him how great I felt. Following the initial description of the effects, I would just say 'Oh my god. It keeps going and going.' The euphoria rolled inside me non-stop to the point where I had no vocabulary to describe it.
Michael and I then went to go get a snack at a near-by Store, where I picked up a Monster Energy drink. Let me just say, WOW!! Aderall + Energy drink definitely triggers something. It brought on an intense reverb of euphoria. Michael and I actually recorded that day when he was with me, and I have the tape lying around somewhere. All I could do was smile at the camera, disoriented and in shock at my own status. I then dropped Michael off at his house, giving him some useful advice about his situation with a girl. Hah...here's what I said:
'Man. Man just don't sweat it. Roll with it man, just do what feels right! Just ridddeeee, let it happen, it'll be okay! Yeahhh. Just laugh the whole time, rise or fall.'
On the way home, by myself, I found myself talking to myself non-stop about incredible insights and self-revelations. That day I told myself the deepest secrets about myself and how I should live. I learned so much that day. It was as if idle thoughts had been unlocked, awakened. When I got home, I had an hour long conversation with my mom, about how I was going to turn my life around. I was going to be successful! That was one of the best talks I've had with my mom. I told her this was brought on by religion, in reality it was Aderall.
I spent the rest of the day talking to my friend Ashley (gave me the Aderall) about my condition. We agreed on so many things, she knew exactly how I felt, even though Aderall never really had affected her that way. After that, I spent hours just walking around the house staring blankly into the walls, amazed at what I felt. Not once did I stop talking, even while alone. My mental limits were shattered and I reached new heights of self-awareness, universal awareness even.
The come down brought on sadness and a feeling of loss, I could not wait to redose the next day. Off to bed.
Here's a timeline of Aderall's influence on that day:
12:30AM- Took a 25mg dose
1:30PM- It kicked in
2:00PM- The effects became apparent to me
3:00PM- I reached my peak and was level for hours
6:00PM- I felt I was coming down
7:00PM- I noticed I was gradually coming down. Euphoria had dissipated, had a body buzz of sorts
1:00AM- I was down...
I felt I was addicted psychologically from the first time, so I continued to take 25mg doses every school day. I usually dosed around 7:30 AM and felt the comedown...Never. For the sheer reason that I was asleep when that happened because of the Benedryl I took before bed, which I am now dependant on thanks to Aderall.
Short-term tolerance was apparent. Mondays were the best, Fridays held little Euphoric effects. Sober weekends were a piece of cake, I had no problem being off the drug (yet). Slowly the feelings of Euphoria dissapeared, at this point I upped my dosage to 50mg (Two 25mg capsules). After this habit continued for months, I upped my dosage again to 60mg, certain days I took 75mg to 90mg depending on what was available to me. The euphoric side-effect no longer seemed to work after a while. I only felt it briefly after the onset and after that the drug just functioned for what it was meant for (increased focus/productivity).  I can't stop sleeping, eating, being horny (I forgot to mention, Aderall abolishes all and any interest in sex). The fatigue is awful, I sleep days at a time.
So here's my situation today. It's been about 3 months since my first dose, and I have not quit. I usually have a steady flow of it, but Ashley's prescription is dry right now. I haven't gone to school sober since the first couple days of school, and I cannot stand it. I check out or don't even go I feel so bad. My grades will plummet from their honor roll status if I can't get aderall soon. God I can't wait, I need it just so I can be awake. I don't even get euphoric any more, even after a week of not using it. I've also noticed that I am depressed a lot now for no reason during what should be my peak during aderall influence. I feel awful on it and off it, but I need it. I'm addicted, and I don't care to stop. The pros balanace the cons, AS OF NOW. I plan to quit this Summer, the only reason I use it now is for school.
Here are some basic things about me now after all this aderall use:
-5'8 in height
-120lbs in weight (I lost 15 pounds from the anorexia side-effect, and to think I was skinny before.)
-Nearly 17 Years Old
-Little to no exercise, no sexual interest
-I've become shy and slightly depressed
-All I can think about is how I'll get some more pills
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Luxor is a city on the east bank of the Nile River in southern Egypt. It's on the site of ancient Thebes, the pharaohs’ capital at the height of their power, during the 16th–11th centuries B.C. Today's city surrounds 2 huge, surviving ancient monuments: graceful Luxor Temple and Karnak Temple, a mile north. The royal tombs of the Valley of the Kings and the Valley of the Queens are on the river’s west bank.
Cairo, Egypt’s sprawling capital, is set on the Nile River. At its heart is Tahrir Square and the vast Egyptian Museum, a trove of antiquities including royal mummies and gilded King Tutankhamun artifacts. Nearby, Giza is the site of the iconic pyramids and Great Sphinx, dating to the 26th century BC. In Gezira Island’s leafy Zamalek district, 187m Cairo Tower affords panoramic city views.
Alexandria is a Mediterranean port city in Egypt. During the Hellenistic period, it was home to a lighthouse ranking among the Seven Wonders of the Ancient World as well as a storied library. Today the library is reincarnated in the disc-shaped, ultramodern Bibliotheca Alexandrina. The city also has Greco-Roman landmarks, old-world cafes and sandy beaches. Its 15th-century seafront Qaitbay Citadel is now a museum.
Giza is an Egyptian city on the west bank of the Nile, near Cairo. The Giza Plateau is home to iconic Egyptian monuments, including 3 tall pyramids built as royal mausoleums around the 26th century B.C. The largest, the Great Pyramid, is King Khufu’s tomb. The Great Sphinx is a vast sculpture of a man’s head on a lion’s body. The Solar Boat Museum displays a restored cedar barge found buried near the Great Pyramid.


Object description: In 1492 Christopher Columbus discovered America, this fact was linked to augmented diffusion that geographical books and maps saw thank to the new invention from Gutenberg. This Map from the Geographer Martin Waldseemüller represent the first printed world map that has inside it also some parts of the new continent called America, by Waldseemüller, in honor of Amerigo Vespucci. The huge enhancement of production due to the printing press revolution helped to the diffusion of a great quantity of new maps in Western Europe, giving an important tool to all adventurers, companies and governments involved in explorations and global trades.
Why we considered it: As Indulgence and 95 Theses items, this map represent one aspect of printing press revolution in one domain of Renaissance world: geography and specifically cartography.
Standard used: The LOC uses different metadata standard for the map description and encoding. They use a brief Dublin Core encoding made only by a small part of the 15 categories from DCMI. They also use MODS, a metadata XML based standard created by LOC. It is made by a transformation and an enlargement of the machine-readable MARC21 standard to a natural language XML description of a record. It is mainly developed to describe bibliographical entries. It is very powerful thank to a rich metadata element set with specific attributes that help to refine the record and integrate elements from other metadata standards in specific areas.
The item has also the MARC XML that is an XML Schema of the MARC numerical metadata element used to encode bibliographical elements.


You may have mistyped the address or the page may have moved.
Back to Home
If you are the application owner check the logs for more information.


Installing SwiftDiscord for iOS
Please note that you should follow the instructions in this document rather than in the main README if you intend to build for iOS.
Prerequisites
- SwiftDiscord 6
- Xcode 9.0
- iOS SDK 11.0
- Homebrew
I have absolutely no idea if this will continue to work with future or previous versions of SwiftDiscord/Xcode/iOS. Your mileage may vary.
Instructions
You may be tempted to skip some steps or to not follow them in order. If you’d like to get this working at any point within the next few hours, it is highly recommended you do not do that. If you do somehow get this to work without completing a certain step, please let me know so I can update the instructions.
- Install dependencies:
brew tap vapor/tap && brew install ctls && brew install opus && brew install libsodium
- Make your project folder:
mkdir SwiftDiscord-iOS && cd SwiftDiscord
- Initialize a new Swift package:
swift package init --type executable
Modify your
Package.swift
so you have SwiftDiscord as a dependency:// swift-tools-version:3.1 import PackageDescription let package = Package( // you can replace name (below) with a string of your choosing, the xcode project that is generated will have this name name: "SwiftDiscord-iOS", dependencies: [ .Package(url: "https://github.com/nuclearace/SwiftDiscord", majorVersion: 6) ] )
Download SwiftDiscord:
swift package update
Build SwiftDiscord:
swift build -Xlinker -L/usr/local/lib -Xlinker -lopus -Xcc -I/usr/local/include
Now comes the hardest part:
mkdir libs
Manually compile & build the following projects:
I hope you like reading READMEs.
Move the resulting compiled libraries (.a files) into your new
libs
directory. You should have the following files in there:libcrypto.a
libopus.a
libsodium.a
libssl.a
To be honest, I’m not expecting anyone to make it past the last step, so if by some miracle you actually managed to fill
libs
with the required libs, give yourself a pat on the back. Go make coffee or something.Generate an Xcode project and open it:
swift package generate-xcodeproj && open SwiftDiscord-iOS
In the Build Settings for the
SwiftDiscord
target:- Add the following to
Valid Architectures
:arm64
armv7
armv7s
- Add your
libs
folder to theLibrary Search Paths
:$(SRCROOT)/libs
- You may need to switch from
Basic
toAll
Build Settings in order to see this key.
- You may need to switch from
- Also add
/usr/local/lib
to yourLibrary Search Paths
, after your ownlibs
folder. - Add
/usr/local/include
to yourHeader Search Paths
.
- Add the following to
In the Build Settings for the
DiscordOpus
target:- Repeat steps 2, 3, and 4 from the previous target, but for this target’s settings of course.
In the Build Settings for the
URI
target:- Add your
libs
folder to theLibrary Search Paths
:$(SRCROOT)/libs
- Make sure
$(PROJECT_TEMP_DIR)/SymlinkLibs/
is still included in the search path and that it is above thelibs
path you just added. - Copy the
Library Search Paths
(just select the row and Cmd+C).
- Add your
In the Build Settings for the
Crypto
,CHTTP
,HTTP
,TLS
, andWebSockets
targets:- Overwrite the
Library Search Paths
with the paths stored on your clipboard (Cmd+V).
- Overwrite the
Create a new Single View Application target (I’ll call it
TestiOS
but you do you)In the
Build Settings
for theTestiOS
target, copy and paste theHeader Search Paths
from theSwiftDiscord
target
* Not just the one we added - grab the ones that were there before too
In the Build Phases for the
TestiOS
target:- Add
SwiftDiscord
to Target Dependencies - Add
libcrypto.a
,libopus.a
,libsodium.a
, andlibssl.a
under Link Binary with Libraries. - Create a new Copy Files Build Phase (there’s a + button at the upper left side [under the General tab] that lets you do this).
- Set its destination to
Frameworks
- Add everything in the Products folder (should all be .frameworks) except for
TestiOS.app
- Set its destination to
- Add
Replace your
ViewController.swift
contents with the following code to make sure everything works correctly:import UIKit import SwiftDiscord class ViewController: UIViewController, DiscordClientDelegate { var client: DiscordClient! override func viewDidLoad() { super.viewDidLoad() self.client = DiscordClient(token: "some valid token here", delegate: self, configuration: [.log(.info)]) client.connect() } func client(_ client: DiscordClient, didConnect connected: Bool) { print("Bot connected!") } func client(_ client: DiscordClient, didCreateMessage message: DiscordMessage) { if message.content == "$mycommand" { message.channel?.send("I got your command") } } func client(_ client: DiscordClient, needsDataSourceForEngine engine: DiscordVoiceEngine) throws -> DiscordVoiceDataSource { return try DiscordBufferedVoiceDataSource( opusEncoder: DiscordOpusEncoder(bitrate: 128_000, sampleRate: 48_000, channels: 2) ) } }
Build!
- If you have hundreds of warnings, you may want to run a Product > Clean and restart Xcode.
Run!
You did it. Somehow. Congratulations!
Thanks
I’d like to thank the lead developer (nuclearace) for providing guidance throughout the whole journey; without whom I would have undoubtedly never been able to get this working.
Cheers,
Troubleshooting
If you experience issues and you are positive you followed the instructions exactly (no, really, if you miss one step you’ll probably get 400+ warnings and several build errors), I recommend you file an issue first. You can also talk to me on Twitter.
Happy Swifting! (is that a thing? I don’t know. It is now).