name
<plugin name>
<name>
You can easily embed your etherpad-lite into any webpage by using iframes. You can configure the embedded pad using embed paramters.
Example:
Cut and paste the following code into any webpage to embed a pad. The parameters below will hide the chat and the line numbers.

Default: true
Default: true
Default: true
Default: false
Default: "unnamed"
Example: userName=Etherpad%20User
Default: randomly chosen by pad server
Example: userColor=%23ff9900
Default: false
Default: false
Default: en
Example: lang=ar
(translates the interface into Arabic)
Default: true Displays pad text from right to left.
The API gives another web application control of the pads. The basic functions are
The API is designed in a way, so you can reuse your existing user system with their permissions, and map it to Etherpad. Means: Your web application still has to do authentication, but you can tell Etherpad via the api, which visitors should get which permissions. This allows Etherpad to fit into any web application and extend it with real-time functionality. You can embed the pads via an iframe into your website.
Take a look at HTTP API client libraries to check if a library in your favorite programming language is available.
A portal (such as WordPress) wants to give a user access to a new pad. Let's assume the user have the internal id 7 and his name is michael.
Portal maps the internal userid to an etherpad author.
Request:
http://pad.domain/api/1/createAuthorIfNotExistsFor?apikey=secret&name=Michael&authorMapper=7
Response:
{code: 0, message:"ok", data: {authorID: "a.s8oes9dhwrvt0zif"}}
Portal maps the internal userid to an etherpad group:
Request:
http://pad.domain/api/1/createGroupIfNotExistsFor?apikey=secret&groupMapper=7
Response:
{code: 0, message:"ok", data: {groupID: "g.s8oes9dhwrvt0zif"}}
Portal creates a pad in the userGroup
Request:
http://pad.domain/api/1/createGroupPad?apikey=secret&groupID=g.s8oes9dhwrvt0zif&padName=samplePad&text=This is the first sentence in the pad
Response:
{code: 0, message:"ok", data: null}
Portal starts the session for the user on the group:
Request:
http://pad.domain/api/1/createSession?apikey=secret&groupID=g.s8oes9dhwrvt0zif&authorID=a.s8oes9dhwrvt0zif&validUntil=1312201246
Response:
{"data":{"sessionID": "s.s8oes9dhwrvt0zif"}}
Portal places the cookie "sessionID" with the given value on the client and creates an iframe including the pad.
A portal (such as WordPress) wants to transform the contents of a pad that multiple admins edited into a blog post.
Portal retrieves the contents of the pad for entry into the db as a blog post:
Request:
http://pad.domain/api/1/getText?apikey=secret&padID=g.s8oes9dhwrvt0zif$123
Response:
{code: 0, message:"ok", data: {text:"Welcome Text"}}
Portal submits content into new blog post
Portal.AddNewBlog(content)
The latest version is 1.2.13
The current version can be queried via /api.
The API is accessible via HTTP. HTTP Requests are in the format /api/$APIVERSION/$FUNCTIONNAME. Parameters are transmitted via HTTP GET. $APIVERSION depends on the endpoints you want to use.
Responses are valid JSON in the following format:
{
"code": number,
"message": string,
"data": obj
}
Authentication works via a token that is sent with each request as a post parameter. There is a single token per Etherpad deployment. This token will be random string, generated by Etherpad at the first start. It will be saved in APIKEY.txt in the root folder of Etherpad. Only Etherpad and the requesting application knows this key. Token management will not be exposed through this API.
All functions will also be available through a node module accessable from other node.js applications.
The API provides JSONP support to allow requests from a server in a different domain.
Simply add &jsonp=?
to the API call.
Example usage: http://api.jquery.com/jQuery.getJSON/
Pads can belong to a group. The padID of grouppads is starting with a groupID like g.asdfasdfasdfasdf$test
creates a new group
Example returns:
* {code: 0, message:"ok", data: {groupID: g.s8oes9dhwrvt0zif}}
this functions helps you to map your application group ids to Etherpad group ids
Example returns:
* {code: 0, message:"ok", data: {groupID: g.s8oes9dhwrvt0zif}}
deletes a group
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"groupID does not exist", data: null}
returns all pads of this group
Example returns:
{code: 0, message:"ok", data: {padIDs : ["g.s8oes9dhwrvt0zif$test", "g.s8oes9dhwrvt0zif$test2"]}
{code: 1, message:"groupID does not exist", data: null}
creates a new pad in this group
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"pad does already exist", data: null}
* {code: 1, message:"groupID does not exist", data: null}
lists all existing groups
Example returns:
{code: 0, message:"ok", data: {groupIDs: ["g.mKjkmnAbSMtCt8eL", "g.3ADWx6sbGuAiUmCy"]}}
{code: 0, message:"ok", data: {groupIDs: []}}
These authors are bound to the attributes the users choose (color and name).
creates a new author
Example returns:
* {code: 0, message:"ok", data: {authorID: "a.s8oes9dhwrvt0zif"}}
this functions helps you to map your application author ids to Etherpad author ids
Example returns:
* {code: 0, message:"ok", data: {authorID: "a.s8oes9dhwrvt0zif"}}
returns an array of all pads this author contributed to
Example returns:
{code: 0, message:"ok", data: {padIDs: ["g.s8oes9dhwrvt0zif$test", "g.s8oejklhwrvt0zif$foo"]}}
{code: 1, message:"authorID does not exist", data: null}
Returns the Author Name of the author
Example returns:
* {code: 0, message:"ok", data: {authorName: "John McLear"}}
-> can't be deleted cause this would involve scanning all the pads where this author was
Sessions can be created between a group and an author. This allows an author to access more than one group. The sessionID will be set as a cookie to the client and is valid until a certain date. The session cookie can also contain multiple comma-seperated sessionIDs, allowing a user to edit pads in different groups at the same time. Only users with a valid session for this group, can access group pads. You can create a session after you authenticated the user at your web application, to give them access to the pads. You should save the sessionID of this session and delete it after the user logged out.
creates a new session. validUntil is an unix timestamp in seconds
Example returns:
{code: 0, message:"ok", data: {sessionID: "s.s8oes9dhwrvt0zif"}}
{code: 1, message:"groupID doesn't exist", data: null}
{code: 1, message:"authorID doesn't exist", data: null}
{code: 1, message:"validUntil is in the past", data: null}
deletes a session
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"sessionID does not exist", data: null}
returns informations about a session
Example returns:
{code: 0, message:"ok", data: {authorID: "a.s8oes9dhwrvt0zif", groupID: g.s8oes9dhwrvt0zif, validUntil:<PHONE_NUMBER>}}
{code: 1, message:"sessionID does not exist", data: null}
returns all sessions of a group
Example returns:
{"code":0,"message":"ok","data":{"s.oxf2ras6lvhv2132":{"groupID":"g.s8oes9dhwrvt0zif","authorID":"a.akf8finncvomlqva","validUntil":2312905480}}}
{code: 1, message:"groupID does not exist", data: null}
returns all sessions of an author
Example returns:
{"code":0,"message":"ok","data":{"s.oxf2ras6lvhv2132":{"groupID":"g.s8oes9dhwrvt0zif","authorID":"a.akf8finncvomlqva","validUntil":2312905480}}}
{code: 1, message:"authorID does not exist", data: null}
Pad content can be updated and retrieved through the API
returns the text of a pad
Example returns:
{code: 0, message:"ok", data: {text:"Welcome Text"}}
{code: 1, message:"padID does not exist", data: null}
sets the text of a pad
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
* {code: 1, message:"text too long", data: null}
appends text to a pad
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
* {code: 1, message:"text too long", data: null}
returns the text of a pad formatted as HTML
Example returns:
{code: 0, message:"ok", data: {html:"Welcome Text
More Text"}}
{code: 1, message:"padID does not exist", data: null}
sets the text of a pad based on HTML, HTML must be well formed. Malformed HTML will send a warning to the API log.
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
returns the attribute pool of a pad
Example returns:
{ "code":0,
"message":"ok",
"data": {
"pool":{
"numToAttrib":{
"0":["author","a.X4m8bBWJBZJnWGSh"],
"1":["author","a.TotfBPzov54ihMdH"],
"2":["author","a.StiblqrzgeNTbK05"],
"3":["bold","true"]
},
"attribToNum":{
"author,a.X4m8bBWJBZJnWGSh":0,
"author,a.TotfBPzov54ihMdH":1,
"author,a.StiblqrzgeNTbK05":2,
"bold,true":3
},
"nextNum":4
}
}
}
{"code":1,"message":"padID does not exist","data":null}
get the changeset at a given revision, or last revision if 'rev' is not defined.
Example returns:
{ "code" : 0,
"message" : "ok",
"data" : "Z:1>6b|5+6b$Welcome to Etherpad!\n\nThis pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!\n\nGet involved with Etherpad at http://etherpad.org\n"
}
{"code":1,"message":"padID does not exist","data":null}
* {"code":1,"message":"rev is higher than the head revision of the pad","data":null}
returns an object of diffs from 2 points in a pad
Example returns:
{"code":0,"message":"ok","data":{"html":"Welcome to Etherpad!

This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!

Get involved with Etherpad at http://etherpad.org
aw

","authors":["a.HKIv23mEbachFYfH",""]}}
{"code":4,"message":"no or wrong API Key","data":null}
Restores revision from past as new changeset
Example returns: {code:0, message:"ok", data:null} {code: 1, message:"padID does not exist", data: null}
returns
start
and end
are givenExample returns:
{"code":0,"message":"ok","data":{"messages":[{"text":"foo","userId":"a.foo","time":1359199533759,"userName":"test"},{"text":"bar","userId":"a.foo","time":1359199534622,"userName":"test"}]}}
{code: 1, message:"start is higher or equal to the current chatHead", data: null}
{code: 1, message:"padID does not exist", data: null}
returns the chatHead (last number of the last chat-message) of the pad
Example returns:
{code: 0, message:"ok", data: {chatHead: 42}}
{code: 1, message:"padID does not exist", data: null}
creates a chat message, saves it to the database and sends it to all connected clients of this pad
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"text is no string", data: null}
Group pads are normal pads, but with the name schema GROUPID$PADNAME. A security manager controls access of them and its forbidden for normal pads to include a $ in the name.
creates a new (non-group) pad. Note that if you need to create a group Pad, you should call createGroupPad. You get an error message if you use one of the following characters in the padID: "/", "?", "&" or "#".
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does already exist", data: null}
* {code: 1, message:"malformed padID: Remove special characters", data: null}
returns the number of revisions of this pad
Example returns:
{code: 0, message:"ok", data: {revisions: 56}}
{code: 1, message:"padID does not exist", data: null}
returns the number of saved revisions of this pad
Example returns:
{code: 0, message:"ok", data: {savedRevisions: 42}}
{code: 1, message:"padID does not exist", data: null}
returns the list of saved revisions of this pad
Example returns:
{code: 0, message:"ok", data: {savedRevisions: [2, 42, 1337]}}
{code: 1, message:"padID does not exist", data: null}
saves a revision
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
returns the number of user that are currently editing this pad
Example returns:
* {code: 0, message:"ok", data: {padUsersCount: 5}}
returns the list of users that are currently editing this pad
Example returns:
{code: 0, message:"ok", data: {padUsers: [{colorId:"#c1a9d9","name":"username1","timestamp":1345228793126,"id":"a.n4gEeMLsvg12452n"},{"colorId":"#d9a9cd","name":"Hmmm","timestamp":1345228796042,"id":"a.n4gEeMLsvg12452n"}]}}
{code: 0, message:"ok", data: {padUsers: []}}
deletes a pad
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
copies a pad with full history and chat. If force is true and the destination pad exists, it will be overwritten.
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
moves a pad. If force is true and the destination pad exists, it will be overwritten.
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
returns the read only link of a pad
Example returns:
{code: 0, message:"ok", data: {readOnlyID: "r.s8oes9dhwrvt0zif"}}
{code: 1, message:"padID does not exist", data: null}
returns the id of a pad which is assigned to the readOnlyID
Example returns:
{code: 0, message:"ok", data: {padID: "p.s8oes9dhwrvt0zif"}}
{code: 1, message:"padID does not exist", data: null}
sets a boolean for the public status of a pad
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
return true of false
Example returns:
{code: 0, message:"ok", data: {publicStatus: true}}
{code: 1, message:"padID does not exist", data: null}
returns ok or a error message
Example returns:
{code: 0, message:"ok", data: null}
{code: 1, message:"padID does not exist", data: null}
returns true or false
Example returns:
{code: 0, message:"ok", data: {passwordProtection: true}}
{code: 1, message:"padID does not exist", data: null}
returns an array of authors who contributed to this pad
Example returns:
{code: 0, message:"ok", data: {authorIDs : ["a.s8oes9dhwrvt0zif", "a.akf8finncvomlqva"]}
{code: 1, message:"padID does not exist", data: null}
returns the timestamp of the last revision of the pad
Example returns:
{code: 0, message:"ok", data: {lastEdited:<PHONE_NUMBER>602}}
{code: 1, message:"padID does not exist", data: null}
sends a custom message of type msg
to the pad
Example returns:
{code: 0, message:"ok", data: {}}
{code: 1, message:"padID does not exist", data: null}
returns ok when the current api token is valid
Example returns:
{"code":0,"message":"ok","data":null}
{"code":4,"message":"no or wrong API Key","data":null}
lists all pads on this epl instance
Example returns:
* {code: 0, message:"ok", data: {padIDs: ["testPad", "thePadsOfTheOthers"]}}
All hooks are called with two arguments:
A hook should always return a list or undefined. Returning undefined is equivalent to returning an empty list.
All the returned lists are appended to each other, so if the return values where [1, 2]
, undefined
, [3, 4,]
, undefined
and [5]
, the value returned by callHook would be [1, 2, 3, 4, 5]
.
This is, because it should never matter if you have one plugin or several plugins doing some work - a single plugin should be able to make callHook return the same value a set of plugins are able to return collectively. So, any plugin can return a list of values, of any length, not just one value.
Most of these hooks are called during or in order to set up the formatting process.
Called from: src/templates/pad.html
Things in context:
nothing
This hook proxies the functionality of jQuery's $(document).ready
event.
Called from: src/static/js/domline.js
Things in context:
This hook is called for elements in the DOM that have the "lineMarkerAttribute" set. You can add elements into this category with the aceRegisterBlockElements hook above. This hook is run BEFORE the numbered and ordered lists logic is applied.
The return value of this hook should have the following structure:
{ preHtml: String, postHtml: String, processedMarker: Boolean }
The preHtml and postHtml values will be added to the HTML display of the element, and if processedMarker is true, the engine won't try to process it any more.
Called from: src/static/js/domline.js
Things in context:
This hook is called for elements in the DOM that have the "lineMarkerAttribute" set. You can add elements into this category with the aceRegisterBlockElements hook above. This hook is run AFTER the ordered and numbered lists logic is applied.
The return value of this hook should have the following structure:
{ preHtml: String, postHtml: String, processedMarker: Boolean }
The preHtml and postHtml values will be added to the HTML display of the element, and if processedMarker is true, the engine won't try to process it any more.
Called from: src/static/js/domline.js
Things in context:
This hook is called for any line being processed by the formatting engine, unless the aceDomLineProcessLineAttributes hook from above returned true, in which case this hook is skipped.
The return value of this hook should have the following structure:
{ extraOpenTags: String, extraCloseTags: String, cls: String }
extraOpenTags and extraCloseTags will be added before and after the element in question, and cls will be the new class of the element going forward.
Called from: src/static/js/domline.js
Things in context:
This hook is for right after a node has been fully formatted and written to the page.
Called from: src/static/js/linestylefilter.js
Things in context:
This hook is called during the attribute processing procedure, and should be used to translate key, value pairs into valid HTML classes that can be inserted into the DOM.
The return value for this function should be a list of classes, which will then be parsed into a valid class string.
Called from: src/static/js/linestylefilter.js
Things in context: 1. Attributes - Object of Attributes
This hook is called when attributes are investigated on a line. It is useful if you want to add another attribute type or property type to a pad.
Example:
exports.aceAttribClasses = function(hook_name, attr, cb){
attr.sub = 'tag:sub';
cb(attr);
}
Called from: src/static/js/linestylefilter.js
Things in context:
This hook is called to apply custom regular expression filters to a set of styles. The one example available is the ep_linkify plugin, which adds internal links. They use it to find the telltale [[ ]]
syntax that signifies internal links, and finding that syntax, they add in the internalHref attribute to be later used by the aceCreateDomLine hook (documented above).
Called from: src/static/js/ace.js
Things in context: None
This hook is provided to allow custom CSS files to be loaded. The return value should be an array of resource urls or paths relative to the plugins directory.
Called from: src/static/js/ace.js
Things in context:
This hook is called during the creation of the editor HTML. The array should have lines of HTML added to it, giving the plugin author a chance to add in meta, script, link, and other tags that go into the
element of the editor HTML document.
Called from: src/static/js/ace2_inner.js
Things in context:
This hook is made available to edit the edit events that might occur when changes are made. Currently you can change the editor information, some of the meanings of the edit, and so on. You can also make internal changes (internal to your plugin) that use the information provided by the edit event.
Called from: src/static/js/ace2_inner.js
Things in context: None
When aceEditEvent (documented above) finishes processing the event, it scrolls the viewport to make caret visible to the user, but if you don't want that behavior to happen you can use this hook to register which edit events should not scroll viewport. The return value of this hook should be a list of event names.
Example:
exports.aceRegisterNonScrollableEditEvents = function(){
return [ 'repaginate', 'updatePageCount' ];
}
Called from: src/static/js/ace2_inner.js
Things in context: None
The return value of this hook will add elements into the "lineMarkerAttribute" category, making the aceDomLineProcessLineAttributes hook (documented below) call for those elements.
Called from: src/static/js/ace2_inner.js
Things in context:
This hook is for inserting further information into the ace engine, for later use in formatting hooks.
Called from: src/static/js/pad.js
Things in context:
Called from: src/static/js/pad_editbar.js
Things in context:
Can be used to register custom actions to the toolbar.
Usage examples:
Called from: src/static/js/timeslider.js
There doesn't appear to be any example available of this particular hook being used, but it gets fired after the timeslider is all set up.
Called from: src/static/js/pad_userlist.js
Things in context:
This hook is called on the client side whenever a user joins or changes. This can be used to create notifications or an alternate user list.
Called from: src/static/js/chat.js
Things in context:
This hook is called on the client side whenever a chat message is received from the server. It can be used to create different notifications for chat messages.
Called from: src/static/js/contentcollector.js
Things in context:
This hook is called before the content of a node is collected by the usual methods. The cc object can be used to do a bunch of things that modify the content of the pad. See, for example, the heading1 plugin for etherpad original.
E.g. if you need to apply an attribute to newly inserted characters, call cc.doAttrib(state, "attributeName") which results in an attribute attributeName=true.
If you want to specify also a value, call cc.doAttrib(state, "attributeName::value") which results in an attribute attributeName=value.
Called from: src/static/js/contentcollector.js
Things in context:
This hook is called before the content of an image node is collected by the usual methods. The cc object can be used to do a bunch of things that modify the content of the pad.
Example:
exports.collectContentImage = function(name, context){
context.state.lineAttributes.img = context.node.outerHTML;
}
Called from: src/static/js/contentcollector.js
Things in context:
This hook is called after the content of a node is collected by the usual methods. The cc object can be used to do a bunch of things that modify the content of the pad. See, for example, the heading1 plugin for etherpad original.
name
#Called from: src/static/js/collab_client.js
Things in context:
This hook gets called every time the client receives a message of type name
. This can most notably be used with the new HTTP API call, "sendClientsMessage", which sends a custom message type to all clients connected to a pad. You can also use this to handle existing types.
collab_client.js
has a pretty extensive list of message types, if you want to take a look.
Called from: src/static/js/ace2_inner.js
Things in context:
This hook is provided to allow a plugin to turn DOM node selection into [line,char] selection. The return value should be an array of [line,char]
Called from: src/static/js/ace2_inner.js
Things in context:
This hook is provided to allow a plugin to handle key events. The return value should be true if you have handled the event.
Called from: src/static/js/contentcollector.js
Things in context:
This hook allows you to validate/manipulate the text before it's sent to the server side. The return value should be the validated/manipulated text.
Called from: src/static/js/contentcollector.js
Things in context:
This hook is provided to allow whether the br tag should induce a new magic domline or not. The return value should be either true(break the line) or false.
Called from: src/static/js/linestylefilter.js
Things in context:
This hook is provided to allow whether a given line should be deliniated with multiple authors. Multiple authors in one line cause the creation of magic span lines. This might not suit you and now you can disable it and handle your own deliniation. The return value should be either true(disable) or false.
Called from: src/static/js/ace2_inner.js
Things in context:
This hook is provided to allow author highlight style to be modified. Registered hooks should return 1 if the plugin handles highlighting. If no plugin returns 1, the core will use the default background-based highlighting.
Called from: src/static/js/ace2_inner.js
Things in context:
This hook allows a plugin to react to a cursor or selection change, perhaps to update a UI element based on the style at the cursor location.
These hooks are called on server-side.
Called from: src/node/server.js
Things in context:
Use this hook to receive the global settings in your plugin.
Called from: src/static/js/pluginfw/installer.js
Things in context:
If this hook returns an error, the callback to the uninstall function gets an error as well. This mostly seems useful for handling additional features added in based on the installation of other plugins, which is pretty cool!
Called from: src/static/js/pluginfw/installer.js
Things in context:
If this hook returns an error, the callback to the install function gets an error, too. This seems useful for adding in features when a particular plugin is installed.
<plugin name>
#Called from: src/static/js/pluginfw/plugins.js
Things in context: None
This function is called after a specific plugin is initialized. This would probably be more useful than the previous two functions if you only wanted to add in features to one specific plugin.
Called from: src/node/hooks/express.js
Things in context:
This is a helpful hook for changing the behavior and configuration of the application. It's called right after the application gets configured.
Called from: src/node/hooks/express.js
Things in context:
This hook gets called after the application object has been created, but before it starts listening. This is similar to the expressConfigure hook, but it's not guaranteed that the application object will have all relevant configuration variables.
<name>
#Called from: src/node/eejs/index.js
Things in context:
This hook gets called upon the rendering of an ejs template block. For any specific kind of block, you can change how that block gets rendered by modifying the content object passed in.
Available blocks in pad.html
are:
htmlHead
- after
and immediately before the title tagstyles
- the style <link>
sbody
- the contents of the body tageditbarMenuLeft
- the left tool bar (consider using the toolbar controller instead of manually adding html here)editbarMenuRight
- right tool barafterEditbar
- allows you to add stuff immediately after the toolbaruserlist
- the contents of the userlist dropdownloading
- the initial loading messagemySettings
- the left column of the settings dropdown ("My view"); intended for adding checkboxes onlymySettings.dropdowns
- add your dropdown settings hereglobalSettings
- the right column of the settings dropdown ("Global view")importColumn
- import formexportColumn
- export formmodals
- Contains all connectivity messagesembedPopup
- the embed dropdownscripts
- Add your script tags here, if you really have to (consider use client-side hooks instead)timeslider.html
blocks:
timesliderStyles
timesliderScripts
timesliderBody
timesliderTop
timesliderEditbarRight
modals
index.html
blocks:
indexWrapper
- contains the form for creating new pads
Called from: src/node/hooks/express/specialpages.js
Things in context:
Here you can add custom toolbar items that will be available in the toolbar config in settings.json
. For more about the toolbar controller see the API section.
Usage examples:
Called from: src/node/db/Pad.js
Things in context:
This hook gets called when a new pad was created.
Called from: src/node/db/Pad.js
Things in context:
This hook gets called when an pad was loaded. If a new pad was created and loaded this event will be emitted too.
Called from: src/node/db/Pad.js
Things in context:
This hook gets called when an existing pad was updated.
Called from: src/node/db/Pad.js
Things in context:
This hook gets called when an existing pad was copied.
Usage examples:
Called from: src/node/db/Pad.js
Things in context:
This hook gets called when an existing pad was removed/deleted.
Usage examples:
Called from: src/node/hooks/express/socketio.js
Things in context:
I have no idea what this is useful for, someone else will have to add this description.
Called from: src/node/hooks/express/webaccess.js
Things in context:
This is useful for modifying the way authentication is done, especially for specific paths.
Called from: src/node/hooks/express/webaccess.js
Things in context:
This is useful for modifying the way authentication is done.
Called from: src/node/hooks/express/webaccess.js
Things in context:
This is useful for modifying the way authentication is done.
Called from: src/node/handler/PadMessageHandler.js
Things in context:
This hook will be called once a message arrive. If a plugin calls callback(null)
the message will be dropped. However it is not possible to modify the message.
Plugins may also decide to implement custom behavior once a message arrives.
WARNING: handleMessage will be called, even if the client is not authorized to send this message. It's up to the plugin to check permissions.
Example:
function handleMessage ( hook, context, callback ) {
if ( context.message.type == 'USERINFO_UPDATE' ) {
// If the message type is USERINFO_UPDATE, drop the message
callback(null);
}else{
callback();
}
};
Called from: src/node/handler/PadMessageHandler.js
Things in context:
This hook will be called once a message arrives. If a plugin calls callback(true)
the message will be allowed to be processed. This is especially useful if you want read only pad visitors to update pad contents for whatever reason.
WARNING: handleMessageSecurity will be called, even if the client is not authorized to send this message. It's up to the plugin to check permissions.
Example:
function handleMessageSecurity ( hook, context, callback ) {
if ( context.message.boomerang == 'hipster' ) {
// If the message boomer is hipster, allow the request
callback(true);
}else{
callback();
}
};
Called from: src/node/handler/PadMessageHandler.js
Things in context:
clientVars
built by the coreThis hook will be called once a client connects and the clientVars
are being sent. Plugins can use this hook to give the client a initial configuriation, like the tracking-id of an external analytics-tool that is used on the client-side. You can also overwrite values from the original clientVars
.
Example:
exports.clientVars = function(hook, context, callback)
{
// tell the client which year we are in
return callback({ "currentYear": new Date().getFullYear() });
};
This can be accessed on the client-side using clientVars.currentYear
.
Called from: src/node/utils/ExportHtml.js
Things in context:
This hook will allow a plug-in developer to re-write each line when exporting to HTML.
Example:
var Changeset = require("ep_etherpad-lite/static/js/Changeset");
exports.getLineHTMLForExport = function (hook, context) {
var header = _analyzeLine(context.attribLine, context.apool);
if (header) {
return "<" + header + ">" + context.lineContent + "</" + header + ">";
}
}
function _analyzeLine(alineAttrs, apool) {
var header = null;
if (alineAttrs) {
var opIter = Changeset.opIterator(alineAttrs);
if (opIter.hasNext()) {
var op = opIter.next();
header = Changeset.opAttributeValue(op, 'heading', apool);
}
}
return header;
}
Called from: src/node/utils/ExportHtml.js
Things in context:
This hook will allow a plug-in developer to append Styles to the Exported HTML.
Example:
exports.stylesForExport = function(hook, padId, cb){
cb("body{font-size:13.37em !important}");
}
Called from: src/static/js/linestylefilter.js
Things in context: 1. Attributes - Object of Attributes
This hook is called when attributes are investigated on a line. It is useful if you want to add another attribute type or property type to a pad.
Example:
exports.aceAttribClasses = function(hook_name, attr, cb){
attr.sub = 'tag:sub';
cb(attr);
}
Called from src/node/handler/ExportHandler.js
Things in context:
This hook will allow a plug-in developer to modify the file name of an exported pad. This is useful if you want to export a pad under another name and/or hide the padId under export. Note that the doctype or file extension cannot be modified for security reasons.
Example:
exports.exportFileName = function(hook, padId, callback){
callback("newFileName"+padId);
}
Called from src/node/utils/ExportHtml.js
Things in context:
This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. If tags are stored as ['color', 'red']
on the attribute pool, use exportHtmlAdditionalTagsWithData
instead. An Array should be returned.
Example:
// Add the props to be supported in export
exports.exportHtmlAdditionalTags = function(hook, pad, cb){
var padId = pad.id;
cb(["massive","jugs"]);
};
Called from src/node/utils/ExportHtml.js
Things in context:
Identical to exportHtmlAdditionalTags
, but for tags that are stored with an specific value (not simply true
) on the attribute pool. For example ['color', 'red']
, instead of ['bold', true]
. This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array of arrays should be returned. The exported HTML will contain tags like
for the content where attributes are ['color', 'red']
.
Example:
// Add the props to be supported in export
exports.exportHtmlAdditionalTagsWithData = function(hook, pad, cb){
var padId = pad.id;
cb([["color", "red"], ["color", "blue"]]);
};
Called from src/node/handler/PadMessageHandler.js
This in context:
This hook gets called when an author leaves a pad. This is useful if you want to perform certain actions after a pad has been edited
Example:
exports.userLeave = function(hook, session, callback) {
console.log('%s left pad %s', session.author, session.padId);
};
Called from src/node/handler/PadMessageHandler.js
This in context:
This hook gets called when handling a CLIENT_READY which is the first message from the client to the server.
Example:
exports.clientReady = function(hook, message) {
console.log('Client has entered the pad' + message.padId);
};
This function replaces a range (from start
to end
) with text
.
Returns the rep
object.
Sets an attribute on current range. Example: `call.editorInfo.ace_setAttributeOnSelection("turkey::balls", true); // turkey is the attribute here, balls is the value Notes: to remove the attribute pass enabled as false
Returns a boolean if an attribute exists on a selected range.
prevChar value should be true if you want to get the previous Character attribute instead of the current selection for example
if the caret is at position 0,1 (after first character) it's probable you want the attributes on the character at 0,0
The attribute should be the string name of the attribute applied to the selection IE subscript
Example usage: Apply the activeButton Class to a button if an attribute is on a highlighted/selected caret position or range.
Example var isItThere = documentAttributeManager.getAttributeOnSelection("turkey::balls", true);
See the ep_subscript plugin for an example of this function in action. Notes: Does not work on first or last character of a line. Suffers from a race condition if called with aceEditEvent.
Returns an info object about the author. Object key = author_id and info includes author's bg color value. Use to define your own authorship.
This function replaces a range (from [x1,y1] to [x2,y2]) with newText
.
This function replaces a range (from y1 to y2) with newText
.
If you delete a line, calling this method will fix the line numbering.
Forces a return key at the current caret position.
Returns true if your passed element is registered as a block element
Returns the line's html list type.
Returns X position of the caret.
Returns Y position of the caret.
Returns the Y offset starting from [x=0,y=0]
"Z:z>1|2=m=b*0|1+1$\n"
This is a Changeset. Its just a string and its very difficult to read in this form. But the Changeset Library gives us some tools to read it.
A changeset describes the diff between two revisions of the document. The Browser sends changesets to the server and the server sends them to the clients to update them. This Changesets gets also saved into the history of a pad. Which allows us to go back to every revision from the past.
changeset
StringThis functions returns an object representaion of the changeset, similar to this:
{ oldLen: 35, newLen: 36, ops: '|2=m=b*0|1+1', charBank: '\n' }
oldLen
{Number} the original length of the document.newLen
{Number} the length of the document after the changeset is applied.ops
{String} the actual changes, introduced by this changeset.charBank
{String} All characters that are added by this changeset.ops
String The operators, returned by Changeset.unpack()
Returns an operator iterator. This iterator allows us to iterate over all operators that are in the changeset.
You can iterate with an opIterator using its next()
and hasNext()
methods. Next returns the next()
operator object and hasNext()
indicates, whether there are any operators left.
There are 3 types of operators: +
,-
and =
. These operators describe different changes to the document, beginning with the first character of the document. A =
operator doesn't change the text, but it may add or remove text attributes. A -
operator removes text. And a +
Operator adds text and optionally adds some attributes to it.
opcode
{String} the operator typechars
{Number} the length of the text changed by this operator.lines
{Number} the number of lines changed by this operator.attribs
{attribs} attributes set on this text.{ opcode: '+',
chars: 1,
lines: 1,
attribs: '*0' }
> var AttributePoolFactory = require("./utils/AttributePoolFactory");
> var apool = AttributePoolFactory.createAttributePool();
> console.log(apool)
{ numToAttrib: {},
attribToNum: {},
nextNum: 0,
putAttrib: [Function],
getAttrib: [Function],
getAttribKey: [Function],
getAttribValue: [Function],
eachAttrib: [Function],
toJsonable: [Function],
fromJsonable: [Function] }
This creates an empty apool. A apool saves which attributes were used during the history of a pad. There is one apool for each pad. It only saves the attributes that were really used, it doesn't save unused attributes. Lets fill this apool with some values
> apool.fromJsonable({"numToAttrib":{"0":["author","a.kVnWeomPADAT2pn9"],"1":["bold","true"],"2":["italic","true"]},"nextNum":3});
> console.log(apool)
{ numToAttrib:
{ '0': [ 'author', 'a.kVnWeomPADAT2pn9' ],
'1': [ 'bold', 'true' ],
'2': [ 'italic', 'true' ] },
attribToNum:
{ 'author,a.kVnWeomPADAT2pn9': 0,
'bold,true': 1,
'italic,true': 2 },
nextNum: 3,
putAttrib: [Function],
getAttrib: [Function],
getAttribKey: [Function],
getAttribValue: [Function],
eachAttrib: [Function],
toJsonable: [Function],
fromJsonable: [Function] }
We used the fromJsonable function to fill the empty apool with values. the fromJsonable and toJsonable functions are used to serialize and deserialize an apool. You can see that it stores the relation between numbers and attributes. So for example the attribute 1 is the attribute bold and vise versa. A attribute is always a key value pair. For stuff like bold and italic its just 'italic':'true'. For authors its author:$AUTHORID. So a character can be bold and italic. But it can't belong to multiple authors
> apool.getAttrib(1)
[ 'bold', 'true' ]
Simple example of how to get the key value pair for the attribute 1
> var atext = {"text":"bold text\nitalic text\nnormal text\n\n","attribs":"*0*1+9*0|1+1*0*1*2+b|1+1*0+b|2+2"};
> console.log(atext)
{ text: 'bold text\nitalic text\nnormal text\n\n',
attribs: '*0*1+9*0|1+1*0*1*2+b|1+1*0+b|2+2' }
This is an atext. An atext has two parts: text and attribs. The text is just the text of the pad as a string. We will look closer at the attribs at the next steps
> var opiterator = Changeset.opIterator(atext.attribs)
> console.log(opiterator)
{ next: [Function: next],
hasNext: [Function: hasNext],
lastIndex: [Function: lastIndex] }
> opiterator.next()
{ opcode: '+',
chars: 9,
lines: 0,
attribs: '*0*1' }
> opiterator.next()
{ opcode: '+',
chars: 1,
lines: 1,
attribs: '*0' }
> opiterator.next()
{ opcode: '+',
chars: 11,
lines: 0,
attribs: '*0*1*2' }
> opiterator.next()
{ opcode: '+',
chars: 1,
lines: 1,
attribs: '' }
> opiterator.next()
{ opcode: '+',
chars: 11,
lines: 0,
attribs: '*0' }
> opiterator.next()
{ opcode: '+',
chars: 2,
lines: 2,
attribs: '' }
The attribs are again a bunch of operators like .ops in the changeset was. But these operators are only + operators. They describe which part of the text has which attributes
For more information see /doc/easysync/easysync-notes.txt in the source.
require("ep_etherpad-lite/static/js/plugingfw/plugins")
require("ep_etherpad-lite/static/js/plugingfw/plugins").update()
will use npm to list all installed modules and read their ep.json files, registering the contained hooks.
A hook registration is a pairs of a hook name and a function reference (filename for require() plus function name)
require("ep_etherpad-lite/static/js/plugingfw/hooks").callAll("hook_name", {argname:value})
will call all hook functions registered for hook_name
with {argname:value}
.
?
src/node/utils/toolbar.js
opts
command
- this command fill be fired on the editbar on clicklocalizationId
- will be set as data-l10-id
class
- here you can add additional classes to the buttonReturns: {Button}
Example:
var orderedlist = toolbar.button({
command: "insertorderedlist",
localizationId: "pad.toolbar.ol.title",
class: "buttonicon buttonicon-insertorderedlist"
})
You can also create buttons with text:
var myButton = toolbar.button({
command: "myButton",
localizationId: "myPlugin.toolbar.myButton",
class: "buttontext"
})
opts
id
- id of the menu itemselectId
- id of the select elementcommand
- this command fill be fired on the editbar on changeReturns: {SelectButton}
data-l10n-id
)Shows the dropdown div.popup
whose id
equals dropdown
.
Register a handler for a specific command. Commands are fired if the corresponding button is clicked or the corresponding select is changed.
Creates an ace callstack and calls the callback with an ace instance (and a toolbar item, if applicable): callback(cmd, ace, item)
.
Example:
toolbar.registerAceCommand("insertorderedlist", function (cmd, ace) {
ace.ace_doInsertOrderedList();
});
Ties a div.popup
where id
equals dropdown
to a command
fired by clicking a button.
Triggers a command (optionally with some internal representation of the toolbar item that triggered it).


Cringe detecting BoT v2.2 (new dream example) by ararouge#6722. Please wait for the cringe detector to load.


Edinburgh's SnapDragon Monitoring sees business heat up after hiring spree
by Scott ReidSnapDragon Monitoring, the Edinburgh-based online brand protection business, has hailed a year of expansion and unveiled a further senior appointment.
Paul Chung has been named as the firm’s new head of brand protection and joins the company along with 21 other new hires in the last 12 months. The new roles span the technology, brand protection and sales teams.
To accommodate its growth, the business has moved into new, larger premises in the capital. It expects to recruit further in the next 12 months, predominately within its technology team.
Rachel Jones, founder and chief executive, said: “Paul brings real expertise to the brand protection team. His experience in combatting IP infringements of major brands will be invaluable as he works with our client base to protect their online sales. And he joins us at an exciting time of growth for SnapDragon.”
Chung brings with him five years of experience as a brand protection specialist, having worked with well-known providers and household brands. His new position will see him investigating “prolific, infringing sellers” and driving clients’ business growth.
Thrilled
Chung said: “I’m thrilled to be joining SnapDragon’s dynamic team of multilingual brand protection specialists at this time of expansion, and I look forward collectively to putting a huge dent in the number of counterfeit goods for sale on online marketplaces.”
The company’s technology provides online brand protection to find and eliminate fake products and unauthorised sellers from the world’s busiest online selling platforms, such as Amazon and Alibaba. It has worked with well-known brands, including the likes of Harris Tweed, Morphsuits and Glencairn Crystal.


Notes and Bibliography
This book displays endnotes for each chapter in the HTML book, and footnotes at the bottom of pages for the PDF and MS Word books, followed by an alphabetized bibliography of all references cited on the last page. The notes and bibliography also appear in the full-book Markdown file.
To create notes, insert citation keys in the text, such as @huffHowLieStatistics1954
, which are generated by Zotero bibliographic database with the Better BibTex extension, and export these in the Better BibLaTeX format into the dataviz.bib
in the book repo. The repo also contains .csl
file to generate the notes and bibliography in a specific Chicago-style format, downloaded from the Zotero Styles Repository. These instructions are referenced in the index.Rmd
file for both the HTML and PDF formats, as shown in these excerpts:
bibliography: dataviz.bib
citation-style: chicago-fullnote-bibliography.csl
...
output:
bookdown::gitbook:
...
pandoc_args: [ "--csl", "chicago-fullnote-bibliography.csl" ]
bookdown::pdf_book:
...
citation_package: none
pandoc_args: [ "--csl", "chicago-fullnote-bibliography.csl" ]
Here’s a text-only note, with no Zotero citation.2
To create a note with citations only, separate Zotero/BibTeX citation keys with semi-colons:3
Since notes also may include text and punctuation in Markdown syntax, always insert a caret symbol prior to the brackets to demarcate a note:4
Note that the chicago-fullnote-bibliography.csl
format automatically shortens the note after it its first reference.
Custom Blocks
Note: I moved code to TODO
folder because it’s not working as expected for LaTeX PDF output.
Pandoc Conversion
- Download Pandoc
- TODO: Ask Ilya about my Pandoc PATH and/or overwriting older version
- Set Bookdown to build the book as one large Markdown file (docs folder, suffix .md)
- Use command line to navigate to subfolder with
pwd
andcd
. - Convert with:
pandoc bookdown-template.md --from markdown --to asciidoc --standalone --output bookdown-template-modified.asciidoc
- Confirm if AsciiDoc file matches O’Reilly Atlas import style.
This is a note, with no bibliographic reference.↩
Darrell Huff, How to Lie with Statistics (W. W. Norton & Company, 1954–2010), http://books.google.com/books?isbn=0393070875; Mark S. Monmonier, How to Lie with Maps, 2nd ed. (University of Chicago Press, 1996), http://books.google.com/books?isbn=0226534219↩
Compare how “lying” is justified by Huff, How to Lie with Statistics, pp. 10-11 and Monmonier, How to Lie with Maps, pp. 11-12.↩


My name is Limor Agam.
My mission is to promote silliness and happiness all over the world.
We mean business.
(If wars looked like this, World Peace would come much, much sooner.)
Websites
Books
Plates
Napkins
Pyjamas
Greeting cards
Even unsuspecting walls.
If you see someone or something that needs cheering up, we are at your service.
Be on our side.


Hi there, I'm Hryhir Teteria!
I'm processing, C, C# freelance programmer.
My projects
- Sealove breakout — is a breakout clone video game about seal and diver falling in love. It written on processing.js language (but fully compability with pure java processing language too). Graphical resources for game made by Anhelina Suschevska<EMAIL_ADDRESS>(e-mail), behance (portfolio), patreon (donate)).
REPOSITORY ☼ PLAY ONLINE
- RSS generator for DeviantArt group comment wall — this program scrapes DeviantArt comments from groups and create RSS feed. So, it's very comfortable to see new comments in RSS reader. Project written in C# language.
REPOSITORY
Contacts


---
layout: default
---
A freelance web designer specialising in web design and front end development. I thrive on perfection and the little details on a website. I have 5 years commercial experience in the industry and have designed and developed websites for many different companies, big and small. I offer a broad range of web design services from exceptional designs to CMS integration. I start each new project from scratch, from the design process to the build of the web site so each website is tailored to you. Need a website? Please get in touch. Email<EMAIL_ADDRESS>I'm Claudia
Phone: 07450 995429{{ item.title }}
View Project
Due to contracts, I can not show all my work on my portfolio website. Please contact me for more information on projects I have worked on.
I design easy to use user interfaces which are clean and engaging using latest web design trends and techniques. I make sure the most important information stands out on the website. Each design is bespoke and tailored to your needs. I make sure the design looks great on any sized device, from mobile to desktop, creating a multi device experience.
The development phase is when the design comes to life. I build sites that not only good, but are coded and perform at the highest standard. I thrive for the fine details, responsively coded so sites look great on all devices and subtle transition’s and animations to make the website come to life. Websites are coded to web standards and throughly tested on multiple devices.
Having a website in a content management system is essential. The benefits in having a website in a CMS is it allows the user to easily add and edit pages on their site, without the need of a developer. I specialise in creating websites in the popular content management system Umbraco and I am a Umbraco Certified Developer (Level 1).


Experiences:
For a much more detailed list, see my
resume.
Research:
In spring 2016, I studied under Professor Gertner at City College in the field of machine learning. Specifically, my project concerned image classification of satellite pictures of ships in the ocean. I used Python's Scikit-learn library in order to find an efficient way to do this. After a few months, we were able to present and publish at the SPIE-DES conference in April 2016. Our paper can be found
here.
Leadership:
At City College I have taken various leadership roles:
Currently I am Treasurer on the CCNY Hillel board. Hillel is a Jewish campus organization. At CCNY we're a very active club, hosting events at least once a week bringing the Jewish community of City together.
Last year I was Google Student Ambassador for CCNY. That meant I was the official liaison between Google and my campus, so whenever they wanted to get the word out about internships, scholarships, or services that might be relevant to students, I was their contact point. In this capacity, I organized several events on campus.
Classes:
I've taken a lot of classes in my years of college. However, the ones that I liked the most and found the most valuable include Data Structures, Algorithms, Theoretical Computer Science, Computer Architecture, and Linear Algebra, among others. I am also taking Computer Security, Web Development, and Number Theory this semester, which should be invaluable.
Languages:
I am familiar with Java, Python, and C++.
I have some knowledge of Scheme, JavaScript, C, PHP, all of which I hope to learn better about.


| Package | com.pblabs.engine.debug |
| Class | public class Console |
| Property | Defined by | ||
|---|---|---|---|
| verbosity : int = 0 [static]
| Console |
| Property | Defined by | ||
|---|---|---|---|
| commandList : Array [static]
Alphabetically ordered list of commands.
| Console | ||
| commandListOrdered : Boolean = false [static]
| Console | ||
| commands : Object [static]
The commands, indexed by name.
| Console | ||
| _stats : Stats
[static]
| Console |
| Method | Defined by | ||
|---|---|---|---|
|
getCommandList():Array
[static]
| Console | ||
|
init():void
[static]
Internal initialization, this will get called on its own.
| Console | ||
|
processLine(line:String):void
[static]
Take a line of console input and process it, executing any command.
| Console | ||
|
registerCommand(name:String, callback:Function, docs:String = null):void
[static]
Register a command which the user can execute via the console.
| Console |
| Method | Defined by | ||
|---|---|---|---|
|
_listDisplayObjects(current:DisplayObject, indent:int):int
[static]
| Console | ||
|
_listPBObjects(current:IPBObject, indent:int):int
[static]
| Console | ||
|
ensureCommandsOrdered():void
[static]
| Console | ||
|
generateIndent(indent:int):String
[static]
| Console |
| commandList | property |
protected static var commandList:Array
Alphabetically ordered list of commands.
| commandListOrdered | property |
protected static var commandListOrdered:Boolean = false
| commands | property |
protected static var commands:Object
The commands, indexed by name.
| _stats | property |
protected static var _stats:Stats
| verbosity | property |
public static var verbosity:int = 0
| _listDisplayObjects | () | method |
protected static function _listDisplayObjects(current:DisplayObject, indent:int):int
Parameters
current:DisplayObject |
|
indent:int |
int |
| _listPBObjects | () | method |
protected static function _listPBObjects(current:IPBObject, indent:int):int
Parameters
current:IPBObject |
|
indent:int |
int |
| ensureCommandsOrdered | () | method |
protected static function ensureCommandsOrdered():void
| generateIndent | () | method |
protected static function generateIndent(indent:int):String
Parameters
indent:int |
String |
| getCommandList | () | method |
public static function getCommandList():Array
Returns
Array — An alphabetically sorted list of all the console commands.
|
| init | () | method |
public static function init():void
Internal initialization, this will get called on its own.
| processLine | () | method |
public static function processLine(line:String):void
Take a line of console input and process it, executing any command.
Parametersline:String — String to parse for command.
|
| registerCommand | () | method |
public static function registerCommand(name:String, callback:Function, docs:String = null):void
Register a command which the user can execute via the console.
Arguments are parsed and cast to match the arguments in the user's function. Command names must be alphanumeric plus underscore with no spaces.
Parametersname:String — The name of the command as it will be typed by the user. No spaces.
|
|
callback:Function — The function that will be called. Can be anonymous.
|
|
docs:String (default = null ) — A description of what the command does, its arguments, etc.
|


We accept the following secure payment methods:
...
When you submit your payment information your data is protected by Secure Socket Layer (SSL) technology certified by a digital certificate.
| {{product.name}}: | {{product.price | sp }} x{{product.quantity}} |
| Subtotal: | {{data.price.subTotal | sp}} |
| Shipping: | {{data.price.shipping ? (data.price.shipping | sp) : 'Free'}} |
| Total: | {{data.price.total | sp}} |
| Checkout: | {{val.billing.firstName}} {{val.billing.lastName}} |
| Payment method: | {{(data.stripe.cardChanges$ | async)?.brand}} |
| Billing email: | {{val.billing.email}} |
| Shipping email: | {{val.shippingInfo ? val.billing.email : val.shipping.email}} |
Confirmation will be emailed to your address at {{val.billing.email}}
When you submit your payment information your data is protected by Secure Socket Layer (SSL) technology certified by a digital certificate.
Once you've completed this transaction, you'll receive an email message confirming receipt of your purchase.


Login
Email address
Password
Login
or
Don't have an account? Input your info and create your account today!
Sign Up
Forgot Password
What you feeling?
Submit
Save Selected Pin
List
Logout
Favourites
Go Back


Tubular
Grid with Paginations
Grid with common features
Free-text search
Print and Export to CSV
Tubular Samples
Grid with Paginations
{{label}}
{{label}}
{{label}}
{{label}}
{{row.OrderID}}
{{row.CustomerName}}
{{row.ShippedDate | date: 'short'}}
{{row.ShipperCity}}
Grid with common features
{{label}}
{{label}}
{{label}}
{{label}}
{{label}}
{{row.OrderID}}
{{row.CustomerName}}
{{row.ShippedDate | date: 'short'}}
{{row.ShipperCity}}
{{row.Amount | number: 2}}
Free-text search
{{label}}
{{label}}
{{label}}
{{label}}
{{label}}
{{row.OrderID}}
{{row.CustomerName}}
{{row.ShippedDate | date: 'short'}}
{{row.ShipperCity}}
{{row.Amount | number: 2}}
Print and Export to CSV
{{label}}
{{label}}
{{label}}
{{label}}
{{label}}
{{row.OrderID}}
{{row.CustomerName}}
{{row.ShippedDate | date: 'short'}}
{{row.ShipperCity}}
{{row.Amount | number: 2}}


--- layout: default color: no-logo program-page color: dark-nav ---
Disclaimer: This is an archived version of the once interactive session pad with content from conference attendees. Please note that some information was lost during the transformation (i.e. the edit history, user colours, the chat and some formatting).


30
1 Yahweh gave me another message. He said,
2 "Son of man, prophesy about what will happen to Egypt. Say that this is what I, the Lord Yahweh, say:
'Weep and wail,
because terrible things will happen one day that is coming.
3 That day is near,
the day when I, Yahweh, will punish people;
it will be like a day of full of storm clouds and disaster for many nations.
4 An enemy army will come to attack Egypt with their swords,
and there will be great distress for the people in Cush.
The enemy army will kill many people in Egypt;
they will take away everything of value,
and they will even tear the buildings down to their foundations.
5 Soldiers of Cush, Libya, Lydia, and all the foreigners in the land of Egypt, together with the Jews living in Egypt—they will all die because of war.'
6 This is what I, Yahweh say:
'This army will defeat Egypt's allies,
and the power that the people of Egypt are so proud of will end.
From the city of Migdol in the north to the city of Syene in the south, they will kill the soldiers of Egypt's allies.
 They will be horrified when they hear that Egypt has been destroyed.
They will pull out their swords
and fill Egypt with the corpses of those whom they have killed.
12 I will cause the streams of the Nile River to become dry,
and I will sell the nation of Egypt to evil men.
By the power of foreigners
I will ruin the land and everything that is in it.
That will surely happen because I, Yahweh, have said it will happen.
13 This is also what I, Yahweh the Lord, say:
I will cause the enemy to destroy the idols
in the city of Memphis.
No longer will there be a king in Egypt,
and I will terrify everyone in the land of Egypt.
14 I will cause all people to leave the region of Pathros in southern Egypt.
I will start fires in the city of Zoan in northeast Egypt
and punish the people in the city of Thebes in southern Egypt.
15 I will punish the soldiers in the fortress of Pelusium in northern Egypt,
and I will get destroy the people in Thebes.
16 I will burn Egypt with fire;
the people in Pelusium will suffer severe pain.
Enemies will conquer Thebes,
and the people in Memphis will constantly be terrified.
17 The enemy will kill many young men in the cities of Heliopolis and Bubastis in northern Egypt,
and the people who are left will have to go to Babylon.
18 It will be a dark day of destruction at the city of Tahpanhes in northeast Egypt
when I cause the power of Egypt to end;
that country will no longer be strong.
It will be as though a dark cloud will cover Egypt,
because the people of its villages will go to Babylon as prisoners.
19 That is how I will punish Egypt,
and people will know that I, Yahweh, have the power to do what I say that I will do.'"
20 Almost eleven years after the Babylonians took us Israelites to their country, Yahweh gave me another message on the seventh day of the first month of that year. He said,
21 "Son of man, I have enabled the army of Nebuchadnezzar to defeat the army of the king of Egypt. It is as though I have broken one of the arms of the king of Egypt, and it has not been bandaged in order that it could be healed, and it has not been put in splints in order that after it heals the arm will be strong enough to hold a sword.
22 Therefore, this is what I, Yahweh the Lord, say: I am the enemy of the king of Egypt. I will completely destroy Egypt's power; it is as though now I will break both of the king's arms, the good one and the broken one, and cause the sword to fall from his hand.
23 I will scatter the people of Egypt among the nations.
24 It is as though I will strengthen the arms of the king of Babylon and put a sword in his hand, and as though I will break the arms of the king of Egypt, and he will groan in front of the king of Babylon like a soldier who is wounded and about to die.
25 I will cause the king of Babylon to become stronger and stronger, and the king of Egypt to become completely weak. When that happens, when I make the Babylonian army strong, they will use that power to attack Egypt.
26 I will scatter the people of Egypt among the nations. And when that happens, people will know that I, Yahweh, have the power to do what I say that I will do.


All-new BMW i4 electric sedan to develop 530hp
by Staff WriterNew i4 to feature BMW’s latest eDrive system; will get an 80kWh battery pack and a claimed range of up to 600km.
BMW has been slowly revealing more details about its upcoming all-new i4 electric sedan. Now the carmaker has confirmed that its forthcoming Tesla Model 3 rival will produce 530hp and have a top speed of around 200kph.
The new model, due to go into production in 2021 following the upcoming iX3, will be the German firm’s first electric sedan. Along with the regular 4 Series, the new electric vehicle (EV) was previewed by the bold 4 Series Gran Coupe concept at the Frankfurt motor show, earlier in the year. BMW claims that the i4 “heralds a new era of driving pleasure” and will feature the firm’s “hallmark brand driving pleasure in a particularly concentrated form.”
BMW has released new images of the i4 undergoing testing and has confirmed that it will make use of its fifth-generation eDrive system. The new powertrain will also be used on the iX3 – due in 2020 – and the advanced iNext, which is set for launch in 2021.
The latest eDrive powertrain comprises a modular system featuring the electric motor, transmission and power electronics in a single housing, which BMW says means it can be used for a range of different models and power outputs. The i4 will feature an 80kWh high-voltage battery pack that weighs around 550kg and gives a claimed range of around 600km. The battery can be charged at rates of up to 150kW.
BMW claims the 530hp motors will allow for a 0-100kph time of around 4sec. The firm says that output has been chosen to mirror the power of a V8 engine in current BMW models, and claims that it will offer “outstanding performance characteristics and exceptionally high efficiency.”
The i4 will share much of its design with the upcoming second-generation 4 Series. However, a side-on view reveals that the new car appears higher off the ground (both in terms of roof height and ground clearance) than the current 4 Series; likely due to a raised floor to accommodate the sizeable battery.
Earlier this year, BMW revealed that the i4 had been tested at its cold weather facility in Arjeplog, Sweden, with the goal of determining the durability of the models' batteries, electric motors and suspension systems.
The i4 is scheduled to be built on the same line as standard 3 Series models at BMW's factory in Munich, Germany. To ensure a smooth production process with existing petrol, diesel and hybrid models, the car manufacturer is already running assembly tests with pre-production versions.
The expansion of BMW's i sub-brand follows a ruling by the EU to enforce a fleet average CO2 emission reduction of 35 percent by 2030. The ruling effectively spells an end to the combustion engine as a sole source of propulsion for high-volume cars sold in Europe by the end of the next decade.
This was expected by BMW’s top management, who initiated the acceleration of development of both long-range plug-in hybrids and electric models in a board meeting held earlier this year. Speaking to our sister publication Autocar UK at the 2018 Paris motor show, chairman Harald Krüger confirmed the altered BMW i division plan, which aims to allow the automaker to offer more electric cars than any rival brand in the short term. It calls for the introduction of up to five dedicated i models by the end of 2021, with tentative steps to expand to 12 electric models within the whole BMW Group by 2025.
Talking about the i4, Krüger said, “The leading factors that will set it apart are fantastic design, which is very different to anything else on the road, and the fact that it is lighter and therefore more dynamic than anything we see on the market today, thanks to the materials we will use. Couple that with the connectivity technology we are constantly developing and we are confident it will lead the market.”
For the Indian market, BMW currently offers a single electrified model in the form of its flagship 745Le plug-in hybrid. BMW did sell its i brand flagship, the i8, in India for a few years though the model has seemingly been dropped from its India portfolio for now.
Also see:
BMW NEXTgen 2019: Oliver Zipse on the future of BMW EVs
BMW X7 flagship SUV sold out for 2019
India-bound BMW 2 Series Gran Coupé revealed


-
生动有趣的历史 - 读显微镜下的大明
最近读了一本颇为有趣的书，叫做显微镜下的大明。 本书主要讲述了四个明朝期间的诉讼案件：徽州丝绢案，婺源龙脉案，杨干禅院纠纷，和彭县小吏舞弊案。除了四个案件外，也花了很大的篇幅介绍了大明档案馆。通过几个案子，见微知著，一窥明朝的兴衰更替。历史不再囿于庙堂之上，不再只是帝王将相，而是更加生动活泼地浮现在眼前。 作者通过调研相关文档和史籍资料，梳理脉络，整理事件的来龙去脉，并以一种诙谐和有趣的方式给读者娓娓道来，乃为“知识的搬运工”的典范。 读此书时，除了觉得有趣，也有些零星的思考，记录在此： …
-
2021读书计划和书单
2021 目标: 读完25本书
- 黄金时代: 1/9-1/14, 6.5/10
-
An Overview of Interpretable Machine Learning
Definition of interpretability ([1], [2]) Though there is little consensus on a formal definition of interpretability in machine learning, one good definition is that interpretability is the ability to explain or to present in understandable terms to a human. …
-
Interesting Research Topics
1.Explainability of Deep Learning 2. Ranking problems …
-
Singular-value Decomposition
Singular-value Decomposition is widely used in collaborative filtering.
Imagine you are building a recommendation system for recommending books to users. You have m users and n potential books to recommend. You also have some historical ratings of some users on some books.
Based on this, you can formulate a utility matrix where each row represents a user and each column represents a book. You can, of course, calculate the correlation between users or books and recommend based on a correlation weighted ratings average, but the problem with that is the matrix is very sparse (you have lots of empty entries), and the process is very computationally expensive (hard to scale).
An idea to resolve this is to factorize the utility matrix using singular-value decomposition. By using, you can decompose the mn matrix into three matrices: A = USV^T - mn = (mk) * (kk) * (k*n). The idea is to do dimension reduction by extracting latent factors from the utility matrix (and hopefully still preserves most variance). Intuitively, this is similar to finding a low dimensional manifold out of a high dimensional space. By doing so, you are able to represent information in a condenser way, and thus mitigate the data sparsity and computationally issue.
Following up on the above book recommendation example. Intuitively what we are doing here is finding k most ‘important’ features and project users and books onto the k-dimensional space these k features define. For example, one feature could be the genre of the book, another could be the language of the book. Both U and V are singular matrices. Each row of U represents an eigenvector for a user. Each column of V^T represents an eigenvector for a book. S is a diagonal matrix and each diagonal entry represents an eigenvalue (strength of the latent factor). The predicted rating from user i to book j will simply be a summation of the projection of i on dimension k, projection of j on dimension k, and the strength of dimension k over all k dimensions.
(Get the picture right, and SVD is easy to understand) …
-
Label Propagation
Label propagation …
-
2018读书计划和书单
2018： …
-
30%与100%
对我来说，30%是很容易放弃的时候。
6mile的trail，往往一迈多的时候就不想爬了。工作也是：
前20%是蜜月期，借着新鲜感和鸡血往往每天早上还能很high地满血复活；进入四五个月以后，就疲态略显。 然而我也是度过了30%就越爬越high的人，70%－100%阶段的快感是最大的。
再想想自己的初心，再坚持一下，再努力一点。 …
-
追本溯源与单纯明快
做好一件事情就好了，所以要想的，是怎么突破自己的极限。
热情，动力，和掌控，都来源于对终极目标的明确；从此出发，去探索和延伸，从内而外，并以此目标判断日常是否值得去做，赋予日常以意义，才能做好，做的开心。
反之，则是被动和无穷的应付。
对于现在的工作，我该思考的唯一目标，就是：
怎么把model做到最好，并发挥最大的影响力？
从此出发，应该主动去探索model本身的可能性，学习，实验，测量，提高准确度；同时，怎样去推广，让别的组尽可能多的去用。
以此为尺，赋予日常以意义，才能真正的单纯明快。 …
-
2017我的旅行计划
英国&法国
加拿大
南美：阿根廷/玻利维亚/秘鲁 …


Program to add numbers to list
Add numbers or range of numbers seperated with comma
Error! Incorrect input.
The following numbers are already present:
Final List:
Add numbers or range of numbers seperated with comma
Error! Incorrect input.
The following numbers are already present:
Final List:


|
lubyk
0.5
|
#include <b2EdgeShape.h>
Inherits b2Shape.
Public Member Functions | |
| b2EdgeShape () | |
| void | Set (const b2Vec2 &v1, const b2Vec2 &v2) |
| Set this as an isolated edge. | |
| b2Shape * | Clone (b2BlockAllocator *allocator) const |
| Implement b2Shape. | |
| int32 | GetChildCount () const |
| bool | TestPoint (const b2Transform &transform, const b2Vec2 &p) const |
| bool | RayCast (b2RayCastOutput *output, const b2RayCastInput &input, const b2Transform &transform, int32 childIndex) const |
| Implement b2Shape. | |
| void | ComputeAABB (b2AABB *aabb, const b2Transform &transform, int32 childIndex) const |
| void | ComputeMass (b2MassData *massData, float32 density) const |
Public Attributes | |
| b2Vec2 | m_vertex1 |
| These are the edge vertices. | |
| b2Vec2 | m_vertex2 |
| b2Vec2 | m_vertex0 |
| Optional adjacent vertices. These are used for smooth collision. | |
| b2Vec2 | m_vertex3 |
| bool | m_hasVertex0 |
| bool | m_hasVertex3 |
A line segment (edge) shape. These can be connected in chains or loops to other edge shapes. The connectivity information is used to ensure correct contact normals.
Definition at line 27 of file b2EdgeShape.h.
| b2EdgeShape::b2EdgeShape | ( | ) | [inline] |
Definition at line 62 of file b2EdgeShape.h.
References b2_polygonRadius, b2Shape::e_edge, m_hasVertex0, m_hasVertex3, b2Shape::m_radius, b2Shape::m_type, m_vertex0, m_vertex3, b2Vec2::x, and b2Vec2::y.
| b2Shape* b2EdgeShape::Clone | ( | b2BlockAllocator * | allocator | ) | const [virtual] |
| void b2EdgeShape::ComputeAABB | ( | b2AABB * | aabb, |
| const b2Transform & | transform, | ||
| int32 | childIndex | ||
| ) | const [virtual] |
Implements b2Shape.
| void b2EdgeShape::ComputeMass | ( | b2MassData * | massData, |
| float32 | density | ||
| ) | const [virtual] |
Implements b2Shape.
| int32 b2EdgeShape::GetChildCount | ( | ) | const [virtual] |
Implements b2Shape.
| bool b2EdgeShape::RayCast | ( | b2RayCastOutput * | output, |
| const b2RayCastInput & | input, | ||
| const b2Transform & | transform, | ||
| int32 | childIndex | ||
| ) | const [virtual] |
| bool b2EdgeShape::TestPoint | ( | const b2Transform & | transform, |
| const b2Vec2 & | p | ||
| ) | const [virtual] |
Implements b2Shape.
Definition at line 59 of file b2EdgeShape.h.
Referenced by b2EdgeShape().
Definition at line 59 of file b2EdgeShape.h.
Referenced by b2EdgeShape().
Optional adjacent vertices. These are used for smooth collision.
Definition at line 58 of file b2EdgeShape.h.
Referenced by b2EdgeShape().
These are the edge vertices.
Definition at line 55 of file b2EdgeShape.h.
Definition at line 55 of file b2EdgeShape.h.
Definition at line 58 of file b2EdgeShape.h.
Referenced by b2EdgeShape().


Hi Peter, Thanks for the e-mail. Lorem ipsum dolor sit amet,
Dear Mr. Clarks I am interested in Lorem ipsum dolor sit amet,
Dear Mr. Clarks In response Lorem ipsum dolor sit amet,
Dear Mr. Clarks, As we discussed Lorem ipsum dolor sit amet,
Dear Peter, Good Day! Lorem ipsum dolor sit amet,
Dear friend Peter Lorem ipsum dolor sit amet,
Dear Mr. Clarks,I was shocked Lorem ipsum dolor sit amet,
Hi Peter, Thanks for the e-mail. Lorem ipsum dolor sit amet,
Dear Mr. Clarks I am interested in Lorem ipsum dolor sit amet,
Dear Mr. Clarks In response Lorem ipsum dolor sit amet,
Dear Mr. Clarks, As we discussed Lorem ipsum dolor sit amet,
Dear Peter, Good Day! Lorem ipsum dolor sit amet,
Dear friend Peter Lorem ipsum dolor sit amet,
Dear Mr. Clarks,I was shocked Lorem ipsum dolor sit amet,
Hi Peter,
Thanks for the e-mail. It is always nice to hear from people, especially from you, Scott.
I have not got any reply, a positive or negative one, from Seibido yet.
Let's wait and hope that it will make a BOOK.
Have you finished your paperwork for Kaken and writing academic articles?
If you have some free time in the near future, I want to meet you and explain to you our next project.
Why not drink out in Hiroshima if we are accepted?
We need to celebrate ourselves, don't we?
Let's have a small end-of-the-year party!
Sincerely, K. Nakagawa


Customer Input
Customer Id:
CUSTOMER ID REQUIRED
Amount:
AMOUNT REQUIRED
Fund Usage
Match Current
Match Target
Cash
Submit
Your customer id : {{custId.value}}
Amount entered :{{amount.value}}
Customer
Account
{{custId.value}}
xyz


Package org.lwjgl.system.windows
Contains bindings to native APIs specific to the Windows operating system.
See: Description
-
Interface Summary Interface Description WindowProcI An application-defined function that processes messages sent to a window. -
Class Summary Class Description DEVMODE Contains information about the initialization and environment of a printer or a display device.DEVMODE.Buffer An array ofDEVMODE
structs.DISPLAY_DEVICE Receives information about the display device specified by theiDevNum
parameter of theUser32.EnumDisplayDevices(java.nio.ByteBuffer, int, org.lwjgl.system.windows.DISPLAY_DEVICE, int)
function.DISPLAY_DEVICE.Buffer An array ofDISPLAY_DEVICE
structs.GDI32 Native bindings to wingdi.h and gdi32.dll.GDI32.Functions Contains the function pointers loaded from the gdi32SharedLibrary
.GLYPHMETRICSFLOAT Contains information about the placement and orientation of a glyph in a character cell.GLYPHMETRICSFLOAT.Buffer An array ofGLYPHMETRICSFLOAT
structs.MONITORINFOEX Contains information about a display monitor.MONITORINFOEX.Buffer An array ofMONITORINFOEX
structs.MSG Contains message information from a thread's message queue.MSG.Buffer An array ofMSG
structs.PIXELFORMATDESCRIPTOR Describes the pixel format of a drawing surface.PIXELFORMATDESCRIPTOR.Buffer An array ofPIXELFORMATDESCRIPTOR
structs.POINT Defines the x- and y- coordinates of a point.POINT.Buffer An array ofPOINT
structs.POINTFLOAT Contains the x and y coordinates of a point.POINTFLOAT.Buffer An array ofPOINTFLOAT
structs.POINTL Contains the coordinates of a point.POINTL.Buffer An array ofPOINTL
structs.RECT Defines the coordinates of the upper-left and lower-right corners of a rectangle.RECT.Buffer An array ofRECT
structs.TOUCHINPUT Encapsulates data for touch input.TOUCHINPUT.Buffer An array ofTOUCHINPUT
structs.User32 Native bindings to WinUser.h and user32.dll.User32.Functions Contains the function pointers loaded from the user32SharedLibrary
.WinBase Native bindings to WinBase.h.WINDOWPLACEMENT Contains information about the placement of a window on the screen.WINDOWPLACEMENT.Buffer An array ofWINDOWPLACEMENT
structs.WindowProc An application-defined function that processes messages sent to a window.WindowsLibrary Implements aSharedLibrary
on the Windows OS.WindowsUtil WNDCLASSEX Contains the window class attributes that are registered by theUser32.RegisterClassEx(org.lwjgl.system.windows.WNDCLASSEX)
function.WNDCLASSEX.Buffer An array ofWNDCLASSEX
structs.
Package org.lwjgl.system.windows Description
Contains bindings to native APIs specific to the Windows operating system.


Made in July 2018 for teatrx.org. TEATRX is a professional theatre company established to advance Latinx performance arts to be a vital and prominent part of the artistic identity of Houston by representing and supporting the Latinx community, its artists, and its stories.
View ProjectMade in August 2018 for teatrx.org. Life is Shorts is a unique festival that presents short plays and short films to celebrate and showcase the Latinx community, its artists, and its stories. Short films and short plays are seldom seen by the general public but even more rare is seeing Latinx artists in Houston's prominent theatre and film scene.
View ProjectMade in March 2018 for Pathways to STEM Careers (PSC). PSC is a Learning Community that provides mentoring and career pathways for STEM students. This community facilitates the opportunity to build a STEM network of peers, faculty, university staff and business professionals who can encourage you as you complete your coursework at University of Houston-Clear Lake.
View ProjectMade in March 2018 for Pathways to STEM Careers (PSC). PSC is a Learning Community that provides mentoring and career pathways for STEM students. This community facilitates the opportunity to build a STEM network of peers, faculty, university staff and business professionals who can encourage you as you complete your coursework at University of Houston-Clear Lake.
View Project


--- layout: default title: "Projects" ---
The GeoBlacklight software stack consists of several open source software projects which work together to enable a better discovery experience. The main discovery application, GeoBlacklight, is developed as a Ruby on Rails engine using Blacklight.
{{ project.snippet }}
{% endif %} {% endfor %}


We created gchromVAR
is an R
package for performing enrichment analyses of genome-wide chromatin accessibility data with summary statistics (posterior-probability values) from common-variant associaitons.
This vignette covers basic usage of chromVAR
with standard inputs. For more detailed documentation covering different options for various inputs and additional applications, view the additional vignettes on the documentation website. For more description of the method and applications, please see the publication


This sample is designed to work with Google Chrome version 87 or newer, but it should work with any browser supporting the WebBluetooth standard. Currently this should work on Windows 10, Mac OS, and Android with limited support for Linux. This page must be hosted on a webserver using TLS or SSL as evidenced by an HTTPS prefix, but the security certificate can be self-signed (untrusted)
First, ensure your PetTutor feeder is turned on (best to power cycle it as I have had issues with its Bluetooth freezing). Next, click the "Pair Feeder(s)" button. A dialog should appear and eventually show all feeders (if you changed the feeder name in the official PetTutor app you will need to change it back to PTFeeder). Click "Pair". Feel free to add additional feeders following the same steps. When you are ready to feed, press "Start" and make a noise until the threshold is exceeded. Please note that hardware limitations in the PetTutor require a 2 second delay between dispenses. The slider initializes itself to be higher than the background noise at the instant the "Start" button is clicked.


Columns and bars can have a 3D look. To achieve this, you should set depth3D and angle properties to some bigger than 0 values.
depth3D
angle


Stats are only available to administrators. Please try logging in if you are an admin and the stats do not display.
Filter: illiad | clio | embedoa | all
We have been recording usage statistics since we switched to our new system, on 24th October 2016. We don't track individual users usage, and we allow most features of our service to be used anonymously. So we have more data about overall usage, and a bit about certain types of usage.
We have goals. Let's keep them in mind before getting wrapped up in the figures. I'm looking at you... JOE.
|
Activity |
Year 1 Outputs / Objectives |
Year 2 Outputs / Objectives |
|
1. Accelerate the development and adoption of tools, resources, and cultures that make campuses less reliant on subscriptions to access content |
1a. Usage of our ILL tools at 30 institutions. 1b. Rapid prototypes, alpha’s and feedback from institutions for key elements of GetPDF and InstantILL. 1c. The citation of our tools to help campuses access content, and reduce reliance on subscriptions. |
1d. Beta releases for ILL tools. Adoption by 60 institutions. 1e. Beta releases for GetPDF and InstantILL on 10 campuses. |
|
2. Accelerate the development and adoption of tools, resources, and cultures that enable dramatic growth of self-archiving |
2a. Sharing 6 experiments, creation of internal and external resources for better self-archiving and technical improvements to the request system. 2b. Rapid prototypes, alpha’s and feedback from institutions for how to integrate self-archiving requests into ILL. 2c. It is 5 times more scalable than our current system, 1.5 times more effective, and 2d. We see emerging practice in ILL of making requests. |
2e. Sharing 6 experiments, creation of internal and external resources for better self-archiving and technical improvements to the request system. 2f. Integration of requests for Open Access into production ILL tools. Usage at 20 institutions. 2g. Establish the Open Access Button request system as a modern (i.e citable, automated, effective and timely), state of the art, mechanism for making research outputs (primarily articles) available. 2h. It is 10 times more scalable than our current system, two times more effective, and we see strong emerging practice in ILL of making requests. |
|
3. Accelerating open, community-owned structures to sustain these efforts. |
3a. Pilot, with ~15 institutions, the Open Access Button’s membership model with institutions. 3b. Advisory board created. Successful contact with key collaborators. |
3c. Open the Open Access Button membership program to more institutions. 3d. We can can grow slowly on service fees, 3e. Announcement of structures ensuring community ownership 3f. Build a healthy community aligned around our purpose |


Sidharth Shukla and Paras Chhabra's enmity inside the Bigg Boss 13 house is nothing new. Interestingly, the two happen to share a common factor named Akanksha Puri, who is Paras Chhabra's current girlfriend and Sidharth Shukla's alleged ex. And the stunner often shares her two cents on both Paras and Sidharth. Here's a rundown of some of the sexiest pictures of Akanksha Puri.


{% include head.html %}
{{ page.downtitle }}
{{ page.subTitle }}
Android
Download
Google Play
iOS
Download
Desktop
Windows64
Windows32
MacOSX64
Linux64
{% include js.html %} {% include tongji.html %}


Sarasota middle school teacher arrested for inappropriately touching students, police say
by WFTX Digital TeamSARASOTA, Fla. -- A Sarasota middle school teacher was arrested after deputies say he inappropriately touched students.
On Sept. 6, 2019, Sarasota PD responded to Brookside Middle School for a follow-up on a case of a teacher, 34-year-old Maxwell Guss, allegedly inappropriately touching two students.
During an interview with Guss, police were notified of another student who made a complaint against him for inappropriate touching back when he was a teacher at Sarasota High School in 2017.
Guss said that year he was brought into a meeting that included the assistant principal.
In October of this year, the assistant principal was interviewed, and said she vaguely remembered a written complaint and meeting with the mother of a student, but could not find the file. The principal also could not produce the file.
The student who initially filed the complaint was brought in for an interview and described Guss as being very "creepy" and that he made all the girls in the class uncomfortable. The student was 14 years old at the time of the alleged incidents.
Police say the 2017 incident had not been reported to law enforcement previously.
He is charged with at least with at least two counts of lewd and lascivious conduct, but police think there may be more victims.
Guss was a teacher in Manatee County at Harllee Middle School and Bayshore High School and in Sarasota County at Sarasota High School and Brookside Middle School.
Anyone with information on this case is asked to call Detective Angela Cox at<PHONE_NUMBER> or leave an anonymous tip with Crime Stoppers by calling 941-366-TIPS


|
avengers avengers_wide
|
Power ratings for The Avengers. |
|
baugeOutput() renderBauge()
|
Shiny bindings for bauge |
|
bauge()
|
Simple Gauge |
|
bb_add_style()
|
Add custom style for regions and grid lines |
|
bb_area()
|
Area property for a Billboard.js chart |
|
bb_axis() bb_x_axis() bb_y_axis()
|
Add axis parameters |
|
bb_bar()
|
Bar property for a Billboard.js chart |
|
bb_barchart()
|
Helper for creating a bar chart |
|
bb_bar_color_manual()
|
Manual color for barchart |
|
bb_bubble()
|
Bubble property for a Billboard.js chart |
|
bb_callbacks()
|
Callbacks for billboard charts |
|
bb_categories()
|
Set categories on X axis |
|
bb_color()
|
Color property for a Billboard.js chart |
|
bb_colors_manual()
|
Set colors for each datas |
|
bb_data()
|
Add data to Billboard chart |
|
bb_densityplot()
|
Helper for creating a density plot |
|
bb_donut()
|
Donut property for a Billboard.js chart |
|
bb_donutchart()
|
Helper for creating a donut chart |
|
bb_export()
|
Export a Billboard to PNG |
|
bb_gauge()
|
Gauge property for a Billboard.js chart |
|
bb_gaugechart()
|
Helper for creating a gauge |
|
bb_grid() bb_x_grid() bb_y_grid()
|
Grid property for a Billboard.js chart |
|
bb_histogram()
|
Helper for creating an histogram |
|
bb_interaction()
|
Interaction property for a Billboard.js chart |
|
bb_labs()
|
Quickly set title, axis labels and caption |
|
bb_legend()
|
Add legend parameters |
|
bb_line()
|
Line property for a Billboard.js chart |
|
bb_linechart()
|
Helper for creating a line chart |
|
bb_load()
|
Load data to the chart with proxy |
|
bb_lollipop()
|
Helper for creating a lollipop chart |
|
bb_pie()
|
Pie property for a Billboard.js chart |
|
bb_piechart()
|
Helper for creating a pie chart |
|
bb_point()
|
Point property for a Billboard.js chart |
|
bb_proxy_axis_labels()
|
Update axis labels with proxy |
|
bb_proxy_data_colors()
|
Change colors with proxy |
|
bb_proxy_data_names()
|
Change names of the data with proxy |
|
bb_proxy_flow()
|
Update chart flow with proxy |
|
bb_proxy_focus() bb_proxy_defocus()
|
Highlights specified targets and fade out the others. |
|
bb_proxy_groups()
|
Update chart groups with proxy |
|
bb_proxy_hide()
|
Hide method with proxy |
|
bb_proxy_legend()
|
Show or hide legend with proxy |
|
bb_proxy_show()
|
Show method with proxy |
|
bb_proxy_tooltip()
|
Show or hide tooltip with proxy |
|
bb_proxy_transform()
|
Update chart type with proxy |
|
bb_proxy_xs()
|
Update x values with proxy |
|
bb_radar()
|
Radar property for a Billboard.js chart |
|
bb_radarchart()
|
Helper for creating a radar chart |
|
bb_regions()
|
Regions property for a Billboard.js chart |
|
bb_scatterplot()
|
Helper for creating a scatter chart |
|
bb_spline()
|
Spline property for a Billboard.js chart |
|
bb_subchart()
|
Subchart property for a Billboard.js chart |
|
bb_svg()
|
SVG property for a Billboard.js chart |
|
bb_title()
|
Add title to Billboard.js chart |
|
bb_tooltip()
|
Tooltip property for a Billboard.js chart |
|
bb_transition()
|
Transition property for a Billboard.js chart |
|
bb_unload()
|
Unload data to the chart with proxy |
|
bb_zoom()
|
Zoom property for a Billboard.js chart |
|
bb_aes() bb_aes_string() bbaes() bbaes_string()
|
Map variables on the chart |
|
set_theme() set_color_palette()
|
Set theme and default colors for Billboard charts |
|
billboarder-exports
|
billboarder exported operators and S3 methods |
|
billboarder-package
|
An htmlwidget interface to the
billboard.js javascript chart library |
|
billboarderOutput() renderBillboarder() billboarderProxy()
|
Shiny bindings for billboarder |
|
billboarder()
|
Create a Billboard.js widget |
|
cdc_prod_filiere
|
French electricity generation by power source for the day of 2017-06-12. |
|
equilibre_mensuel
|
Monthly supply / demand balance (january 2007 to june 2017) |
|
prefix()
|
Shortcut to add a prefix value to axis labels |
|
prod_filiere_long
|
French electricity generation by year and branch. |
|
prod_par_filiere
|
French electricity generation by year and branch. |
|
proxy_example()
|
Proxy use example |
|
suffix()
|
Shortcut to add a suffix value to axis labels |


freshclam- Scan a file for viruses:
clamscan path/to/file- Scan directories recursively and print out infected files:
clamscan --recursive --infected path/to/directory- Scan directories recursively and move them into quarantine:
clamscan --recursive --move=directory


There are three ways to deploy the MockServer helm chart:
 You can add the MockServer chart repository as follows:
helm repo add mockserver https://www.mock-server.com
helm repo update
Then the helm chart can be installed as follows:
helm upgrade --install --kube-context <your kube context> --namespace mockserver --create-namespace --version {{ site.mockserver_version }} mockserver mockserver/mockserver
If using get the following error:
Error: failed to download "mockserver/mockserver" at version "{{ site.mockserver_version }}"
Then update local cache of helm charts:
helm repo update

To run MockServer in Kubernetes the easiest way is to use the existing MockServer helm chart.
This is available by using www.mock-server.com as a chart repo, with the following command:
helm upgrade --install --namespace mockserver mockserver http://www.mock-server.com/mockserver-{{ site.mockserver_version }}.tgz

If you have helm chart source folder (i.e. you have the repository cloned):
helm upgrade --install --namespace mockserver mockserver helm/mockserver
The commands above will install MockServer into a namespace called mockserver with default configuration (as per the embedded values.yaml).
MockServer will then be available on domain name mockserver.mockserver.svc.cluster.local, as long as the namespace you are calling from isn't prevented (by network policy) to call the mockserver namespace.
 To view the logs:
kubectl -n mockserver logs --tail=100 -l app=mockserver,release=mockserver
or open the UI
To wait until the deployment is complete run:
kubectl -n mockserver rollout status deployments mockserver
To check the status of the deployment without waiting, run the following command and confirm the mockserver has the Running status:
kubectl -n mockserver get po -l release=mockserver
To undeploy the helm chart:
helm delete -n mockserver mockserver

Modify the arguments used to start the docker container by setting values explicitly using --set, as follows:
helm upgrade --install --namespace mockserver --set app.serverPort=1080 --set app.logLevel=INFO mockserver http://www.mock-server.com/mockserver-{{ site.mockserver_version }}.tgz
The following values are supported:
For example configure a proxyRemoteHost and proxyRemotePort, as follows:
helm upgrade --install --namespace mockserver --set app.serverPort=1080 --set app.proxyRemoteHost=www.mock-server.com --set app.proxyRemotePort=443 mockserver http://www.mock-server.com/mockserver-{{ site.mockserver_version }}.tgz
Double check the correct arguments have been passed to the pod, as follows:
kubectl -n mockserver logs -l app=mockserver,release=mockserver

If a configmap called mockserver-config exists in the same namespace this will be mapped into the MockServer container under the mountPath /config.
This configmap can be used to configure MockServer by containing a mockserver.properties file and other related configuration files such as a:
The mockserver.properties file should load these additional files from the directory /config which is the mountPath for the configmap.
See MockServer Configuration for details of all configuration options.
The mapping of the configuration configmap can be configured as follows:
helm upgrade --install --namespace mockserver --set app.mountedConfigMapName=other-mockserver-config --set app.propertiesFileNamem=other-mockserver.properties mockserver helm/mockserver
An example of a helm chart to configure MockServer is helm/mockserver-config

To use class callbacks or an expectation initializer class the classpath for MockServer must include the specified classes.
To support adding classes to the classpath if a configmap called mockserver-config exists in the same namespace any jar files contained in this configmap will be added into MockServer classpath.
The mapping of the libs configmap can be configured as follows:
helm upgrade --install --namespace mockserver --set app.mountedLibsConfigMapName=mockserver-libs mockserver helm/mockserver

If the service type hasn't been modified the following will provide the MockServer URL from outside the cluster.
export NODE_PORT=$(kubectl get -n mockserver -o jsonpath="{.spec.ports[0].nodePort}" services mockserver)
export NODE_IP=$(kubectl get nodes -n mockserver -o jsonpath="{.items[0].status.addresses[0].address}")
export MOCKSERVER_HOST=$NODE_IP:$NODE_PORT
echo http://$MOCKSERVER_HOST
To test the installation the following curl command should return the ports MockServer is bound to:
curl -v -X PUT http://$MOCKSERVER_HOST/status
Docker for Desktop automatically exposes LoadBalancer services.
On MacOS Docker for Desktop runs inside Hyperkit so the node IP address is not reachable, therefore the only way to call services is via the exposed LoadBalancer service added by Docker for Desktop.
To ensure that Docker for Desktop exposes MockServer update the service type to LoadBalancer using --set service.type=LoadBalancer and set the exposed port using --set service.port=1080, as follows:
helm upgrade --install --namespace mockserver --set service.type=LoadBalancer --set service.port=1080 mockserver http://www.mock-server.com/mockserver-{{ site.mockserver_version }}.tgz
MockServer will then be reachable on http://localhost:1080
For LoadBalancer services it is possible to query kubernetes to programmatically determine the MockServer base URL as follows:
export SERVICE_IP=$(kubectl get svc --namespace mockserver mockserver -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
export MOCKSERVER_HOST=$SERVICE_IP:1081
echo http://$MOCKSERVER_HOST
kubectl -n mockserver port-forward svc/mockserver 1080:1080 &
export MOCKSERVER_HOST=<IP_ADDRESS>:1080
echo http://$MOCKSERVER_HOST
If a DNS server has been installed in the Kubernetes cluster the following DNS name should be available mockserver.<namespace>.svc.cluster.local, i.e. mockserver.mockserver.svc.cluster.local
 To completely remove the chart:
helm delete mockserver --purge


Image will be available on December 1st.
Image will be available on December 2nd.
Image will be available on December 3rd.
Image will be available on December 4th.
Image will be available on December 5th.
Image will be available on December 6th.
Image will be available on December 7th.
Image will be available on December 8th.
Image will be available on December 9th.
Image will be available on December 10th.
Image will be available on December 11th.
Image will be available on December 12th.
Image will be available on December 13th.
Image will be available on December 14th.
Image will be available on December 15th.
Image will be available on December 16th.
Image will be available on December 17th.
Image will be available on December 18th.
Image will be available on December 19th.
Image will be available on December 20th.
Image will be available on December 21th.
Image will be available on December 22th.
Image will be available on December 23th.
Image will be available on December 24th.
The QEMU Advent Calendar 2018 features a QEMU disk image each day of December until the 24th. Each day a new package becomes available for download.
Every download contains a little 'run' shell script that starts the QEMU emulator with the recommended parameters for the disk image. Disk images are either contained directly in the download or are downloaded by the 'run' script (you need to have installed 'curl' or 'wget' in that case).
The disk images contain interesting operating systems and software that run under the QEMU emulator. Some of them are well-known or not-so-well-known operating systems, old and new, others are custom demos and neat algorithms.
The 'run' scripts (and disk images if included in the download) were created by volunteers from the QEMU community to showcase cool software that QEMU can run.
To get in touch please send an e-mail to Eldon Stegall<EMAIL_ADDRESS>(and and CC<EMAIL_ADDRESS>if you also want to discuss your topic publicly on the QEMU mailing list).