A year or so ago I started experimenting with digital self publishing. Having become increasingly politicised with regard to both state and commercial online surveillance I also started questioning the role centralised platforms such as soundcloud and bandcamp play in independent music distribution. I’ll write more on this later — on motivations and failures in my critique/experience — but for now I wanted to talk about how I set up a Raspberry Pi webserver at home for publishing a Tor hidden service.
My own project, The House Organ, is available on the ‘clearweb’ at https://thehouseorgan.xyz. I’ve recently moved it from github to gitlab pages and setup a custom domain for it. I’ve also maintained a Tor Hidden Service mirror of this site at tho2f4fceyghjl6s.onion/. The idea behind this is that the site would be censorship resistant and allow for visitors to connect with a degree of anonymity (I doubt that these are very high risks for me personally but there is a political spectrum here that I want to be engaged with). If you want to know more about what Tor is and how it works https://www.torproject.org/about/overview.html.en is a good place to start. I’ll save discussion of why one would want to enagge with any of this for a later date
To set up the Tor mirror I have setup a small webserver at home with the site proxied through Tor - all running on a Raspberry Pi.
What follows are notes, self reminders and tips for trying this yourself. I made numerous mistakes on the way so feel free to ask if you encounter any problems, but at the same time this is a rather rough guide and not a step by step tutorial so treat it like a recipe that may need alterations to suit your tastes.
Setting up a Raspberry Pi
A few notes on this:
- We’re setting up in a basic headless server configuration so we’re not attaching a monitor and keyboard to interact with the Raspberry Pi. Instead we’ll login via the command line and execute commands. I found that this all took a bit of getting used to but has been useful training for working with servers in general.
- For the above reasons I’d install Raspbian over NOOBS. Technically, seeing as NOOBS contains Raspbian, you should be able to do all of this with either, but you don’t need the extra bloat so I wouldn’t bother.
- I’ve only done this with Raspberry Pi 2s and 3s. I don’t know if it’d work with a Pi zero and an older original Pi model might struggle a little bit if you run other services on it.
- Whenever I’ve done this I’ve generally stuck to Ethernet so haven’t had to faff around much with WiFi. The transfer speeds on your local network are going to impact site load speeds over the Internet also so if you can use Ethernet do, but if not don’t worry about it.
- Technically, we’re setting up a web server which probably violates your home ISP terms of service. If you started attracting much traffic your ISP might look at this more closely. Theoretically you could bump up to a business plan if needed but please just be aware of any risks you are placing upon yourself.
- As you’re setting up a mini-web-server at home and exposing services to the outside world you should take precautions to ensure these don’t get hacked etc. Setting up passwordless login is a very good idea. It sounds like a bad idea but it relies on a cryptographic key for login so it’s a lot harder to hack than a password is. Setting up a firewall is essential and only expose the ports/services needed. Software such as fail2ban is worth implementing too, so as to block any suspicious activity.
So, caveats and notes out of the way I’d recommend this guide - RRaspberry Pi 2: Basic setup without any cables (headless) (Wayback Machine Link as site doesn’t support HTTPS) - is easy to follow and covers basic security such as setting up a firewall and passwordless login.
It’s likely getting a bit old now so do check the official Raspberry Pi guides etc. too.
Installing Tor
First some more caveats. We’re using Tor to serve a webpage as a hidden service. To access these hidden services visitors need to use Tor browser. Tor browser helps with anonymity and privacy but if your use case/threat model is higher then you’ll need to look into this more deeply and make habitual changes. Also, we’re running the server from home so whilst we’re hosting a ‘hidden service’ we’re not doing it in an anonymous manner. Tor has an undeserved reputation for unsavoury and illegal activities but if you were wanting to host anything remotely illegal I don’t think hosting a hidden service at home would be a very sensible way to do it. Also, on a final note, I’m based in the UK where there aren’t currently any legal restrictions on using Tor, your local situation might differ.
Right, let’s get Tor installed. We need to add Tor’s package repositories.
This will open a new file for us to paste in the links.
nano /etc/apt/sources.list.d/torproject.list
When I set up Raspbian it was on version Jessie so I added:
deb http://deb.torproject.org/torproject.org jessie main
deb-src http://deb.torproject.org/torproject.org jessie main
If you’re on stretch etc. you can get the package details here - https://www.torproject.org/docs/debian.html.en#ubuntu
ctrl+x
to exit and save nano.
Now run these 2 commands to set-up gpg keys to validate these sources.
gpg --keyserver keys.gnupg.net --recv A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89
gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add -
Next we need to update the package manager:
sudo apt-get update
And install Tor:
sudo apt-get install tor
Setting up a Hidden Service
Now we need to configure some settings in Tor. The config file is called ‘torrc’ and is located at /etc/tor/torrc
sudo nano /etc/tor/torrc
Underneath where it says:
############### This section is just for location-hidden services ###
You need to add (or uncomment/edit) the lines:
HiddenServiceDir /var/lib/tor/hidden_service/
HiddenServicePort 80 <IP_ADDRESS>:7658
The first line can be any folder writable by Tor.
The second line can be unpicked a bit more:
HiddenServicePort 80
means that Tor will proxy to this virtual port. You could change it but I can’t think of many use cases where you’d need to so I’d stick with the standard configuration.
<IP_ADDRESS>
specifies proxying internal connections. When we set up the web server this means it will proxy the sites we set up through Tor.
:7658
This is the internal port we’re proxying. My web server is set to use this port. You can change this but your web server will need setting up to be the same as whatever you choose here.
ctrl+x
to exit and save.
Now restart Tor
sudo service tor restart
Providing everything worked and Tor restarted it will have created some files in the /var/lib/tor/hidden_service/ folder.
private_key
is the private key pair and you should back this up and shouldn’t share it with anyone. You shouldn’t need to interact with this file though.
hostname
is your onion address, e.g. duskgytldkxiuqc6.onion. This is the address you’ll put into Tor browser to visit your site.
The hidden_service folder is pretty locked down security wise (which is sensible) so:
sudo cat /var/lib/tor/hidden_service/hostname
To display the onion address.
Setting up a Webserver
There’s more than one way of doing this. Tor doesn’t recommend Apache as it’s a very large, complex software with a lot of potential for misconfiguration and security leaks. In our use case - a home based DIY Raspberry Pi server - I’m not sure how significant this is. Still, I opted for lighttpd as it’s fairly simple and lightweight.
sudo apt-get install lighttpd
I made some additional folders to structure multiple sites as follows. Replace foobar with whatever makes sense for your site name etc.
sudo mkdir /var/www/html
sudo mkdir /var/www/html/foobar
Now we change the owner and permissions of the folder and add pi to the www-data group.
sudo chown -R www-data:www-data /var/www/html/foobar
sudo chmod 775 /var/www/html/foobar
sudo usermod -a -G www-data pi
Now put your website files into the folder /var/www/html/foobar
If you don’t have any files for this yet you could make a basic index.html page:
echo '
Hello, World!
' > /var/www/html/foobar/index.php
Now we need to edit the lighttpd config file:
sudo nano /etc/lighttpd/lighttpd.conf
change server.document-root
to (or whatever folder structure you chose):
server.document-root = "/var/www/html"
and change server.port
to the following (or whatever port you chose in the torrc config above):
server.port = 7658
Now we’re going to add our website as a virtual host. The main reason is so that we can add other sites later if we want to. Add the following lines:
$HTTP["host"] == "duskgytldkxiuqc6.onion" {
server.document-root = "/var/www/html/foobar"
}
duskgytldkxiuqc6.onion
is whatever onion address you got earlier.
server.document-root
should point to whichever folder you created earlier and put your web files in.
now restart lighttpd:
sudo service lighttpd restart
Opening Ports and Testing it All
Everything should now be setup but our firewall should be blocking access so we need to open up a hole in ufw.
sudo ufw allow 7658
This should be it, the site doesn’t need to be accessible any way other than via Tor so no other ports should need opening (though you probably opened up port 22 in the Raspberry Pi setup so as you can SSH. Make sure you keep this port open or you won’t be able to login to your Pi).
Lighttpd is serving your site locally but it isn’t accessible externally.
Tor however is proxying this site and serving it as a hidden onion service.
Visiting duskgytldkxiuqc6.onion (or whatever your equivalent is) in Tor browser from another computer should display your website.
And that’s it really. I hope it works for you as it did for me.


A common scenario is when a person observes some conversation in an underground forum and does not know the meaning of certain dark terms. For this scenario, the system provides a dictionary of dark terms and their definitions, which were evaluated by a cybersecurity expert. The system also lists the URL of where the definition was found, which can be inspected by the user in case more info than the definition is required. In order to explore more details about the meaning and usage of a certain dark term, the user can click on the dark term itself, which guides her to the exploration interface.
Exploration Interface
The exploration interface has two major components: (1) The user can retrieve detailed information about the usage of the selected dark term over time and (2) browse different clean term mapping methods, in order to explore the meaning of a dark term.
Collaboration Interface
DarkJargon.net allows for the collective exploration and collection of dark terms. The system provides a collaboration interface, where users can browse dark terms identified by the community, give feedback and contribute novel dark terms.
Download
All datasets leveraged by DarkJargon.net are available for download.
FAQ
What is DarkJargon.net?
To cater to the understanding of underground conversation, DarkJargon.net caters to the needs of researchers, law enforcement agents and ``white-hat'' hackers to enable them to make sense of underground conversation.
What is dark jargon?
When participants in underground forums (e.g., Dark0de) converse, they often obfuscate their true intentions by using dark jargon. These are terms that may look innocent to an outsider that is not a regular participant in underground activity, but the true meaning of these terms is hidden and sometimes sinister. For example, the dark term rat is often used as an abbreviation of "Remote Access Trojan" or popcorn is used to refer to a type of marijuana (i.e., popcorn nugs). For researchers and law enforcement alike, it is essential to have a good understanding of these latent meanings in order to gain valuable insights into underground activity.
Where can I read more about some of the algorithms employed in DarkJargon.net?
Copyright 2021 Dominic Seyler (https://dominicseyler.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


{% from "components/table.html" import mapping_table, row, text_field, edit_field, field, row_heading%} {% extends "withoutnav_template.html" %} {% block per_page_title %} Callbacks {% endblock %} {% block maincolumn_content %}
Text messages you receive can be forwarded to a URL that you specify, using our callback feature.
Messages are forwarded as they are received.
To protect your service, we require you to provide a bearer token. We put this token in the authorisation header of the callback requests.
Once you have ‘receive text messages’ enabled, you can set up your callback on the settings page of your service.
If you don’t have ‘receive text messages’ enabled for your service, get in touch and we can turn it on for you.
The format of the callback message you receive is JSON.


Master de II. ULL. 1er cuatrimestre. 2020/2021
Destroy a stream.
This module is meant to ensure a stream gets destroyed, handling different APIs and Node.js bugs.
1
var destroy = require('destroy')
Destroy the given stream. In most cases, this is identical to a simple
stream.destroy()
call. The rules are as follows for a given stream:
stream
is an instance of ReadStream
, then call stream.destroy()
and add a listener to the open
event to call stream.close()
if it is
fired. This is for a Node.js bug that will leak a file descriptor if
.destroy()
is called before open
.stream
is not an instance of Stream
, then nothing happens.stream
has a .destroy()
method, then call it.The function returns the stream
passed in as the argument.
1
2
3
4
5
6
7
var destroy = require('destroy')
var fs = require('fs')
var stream = fs.createReadStream('package.json')
// ... and later
destroy(stream)


fscLVM documentation¶
f-scLVM is a scalable modelling framework for single-cell RNA-seq data that can be used to dissect and model single-cell transcriptome heterogeneity, thereby allowing to identify biological drivers of cell-to-cell variability and model confounding factors.
Software by Florian Buettner and Oliver Stegle. f-scLVM is explained in detail in the accompanying publication [1].
[1] Buettner, F.,Pratanwanich, N., Marioni, J., Stegle, O. Scalable latent-factor models applied to single-cell RNA-seq data separate biological drivers from confounding effects. Submitted
Tutorial¶
All steps required to run f-scLVM are illustrated in a jupyter notebook that can be viewed interactively. A brief tutorial on how to load data, fit the model and plot the results is summarised in the following secitons.
Input¶
f-scLVM expects a hdf file containing the normalised, log transformed gene expression data as well as a set of annotations. We provide an R script (LINK) that can be used to generate this input from a gene expression matrix, using annotation from REACTOME or MSigDB.
Usage is also illustrated in the an ipython notebook.
We provide a load_hdf5
function for loading the input data form such hdf file.
Model initialisation and fitting¶
An f-scLVM model can be initialised using the intiFA
convenience function. Arguments can be used to specify options, incuding number of unannotated factors (nHidden), minimum number of genes in a pathway (minGenes), whether to use the fast option by pruning genes (pruneGenes), noise model (noise) and the data directory (data_dir). Once a model is initialised, it can be fit using the iterate
method.
Diagnostics, plotting and saving.¶
The printDiagnostics
function can be used to print diagnositcs based ont eh number of genes included/excluded by the model. If more than 100% of gene annotations are changed for at least one factor, the model should be re-fitted with sparse unannotated facotrs.
Loading data and model initialisation¶
-
fscLVM.
load_txt
(dataFile, annoFile, data_dir='../../../data/', niceTerms=True)[source]¶ Load input file for f-scLVM from txt files.
Loads an txt files and extracts all the inputs required by f-scLVM
Parameters: - dataFile (str) – String contaning the file name of the csv file with the normalised gene expression data
- annoFile (str) – String contaning the file name of the txt file containing the gene set annotations. Each line corresponds t one gene set; a line starts with the name of the gene set and is followed by the annotated genes.
- data_dir (str) – Name of the directory containing the input hdf5 file.
- niceTerms (bool) – Indicates whether to nice terms (omit pre-fix, capitalise, shorten). Defaults to true.
Returns: An dictionary containing all the inputs required by f-scLVM.
-
fscLVM.
load_hdf5
(dFile, data_dir='../../../data/')[source]¶ Load input file for f-scLVM
Loads an hdf file and extracts all the inputs required by f-scLVM
Parameters: Returns: An dictionary containing all the inputs required by f-scLVM.
-
fscLVM.
initFA
(Y, terms, I, nHidden=3, nHiddenSparse=0, pruneGenes=False, FPR=0.99, FNR=0.001, noise='gauss', minGenes=20, do_preTrain=True)[source]¶ Initialise the f-scLVM factor analysis model.
Required 3 inputs are first, a gene expression matrix Y containing normalised count values of N cells and G variable genes in log-space, second a vector terms contaning the names of all annotated gene set (correspondig to annotated factors) and third, a binary inidcator matrix I linking G genes to K terms by indicating which genes are annotated to each factor. A variety of options can be specified as described below.
Parameters: - Y (array_like) – Matrix of normalised count values of N cells and G variable genes in log-space. Dimension (\(N\times G\)).
- terms (vector_like) – Names of K annotated gene sets. Dimension (\(K\times 0\)).
- P_I (array_like) – Inidicator matirx specifying whether a gene is annotated to a specific factor. Dimension (\(G\times K\)).
- FNR (float) – False negative rate of annotations. Defaults to 0.001
- FPR (float) – False positive rate of annotations. Defaults to 0.99
- nHidden (int) – Number of unannotated dense factors. Defaults to 3.
- nHiddenSparse (int) – Number of unannotated sparse factors. Defaults to 0. This value should be changed to e.g. 5 if the diagnositcs fail.
- pruneGenes (bool) – prune genes that are not annotated to a least one factor. This option allows fast inference and should be set to True either if the key objective is to rank factors or if the annotations cover all genes of interest. Defaults to False.
- noise (str) – Specifies the observation noise model. Should be either ‘gauss’,`’hurdle’` or ‘poisson’. Defaults to gauss.
- minGenes (int) – minimum number of genes required per term to retain it Defaults to 20.
- do_preTrain (bool) – Boolean switch indicating whether pre-training should be used to establish the initial update order. Can be set to False for very large datasets. Defaults to True
Returns: A
fscLVM.CSparseFA
instance.
-
fscLVM.
preTrain
(Y, terms, P_I, noise='gauss', nFix=None)[source]¶ Pre-train the f-scLVM factor analysis model.
Helper function to pre-train the f-scLVM factor analysis model to achieve faster convergence and obtain an initial update order. Called by initFA.
Parameters: - Y (array_like) – Matrix of normalised count values of N cells and G variable genes in log-space. Dimension (\(N\times G\)).
- terms (vector_like) – Names of K annotated gene sets. Dimension (\(K\times 0\)).
- P_I (array_like) – Matrix specifying the likelihood of whether a gene is annotated to a specific factor. Dimension (\(G\times K\)).
- noise (str) – Specifies the observation noise model. Should be either ‘gauss’,`’hurdle’` or ‘poisson’. Defaults to gauss.
- nFix (int) – Number of terms which should be fixed and updated first. Defaults to None, resulting in the number of unannotated factors being updated first.
Returns: A vector containing the initial update order of the terms
Model fitting¶
-
class
fscLVM.core.
CSparseFA
(init_data=None, E1=None, E2=None, **parameters)[source]¶ Variational Bayesian Factor analysis module. AExpressionModule is definded in bayesnet.expressionnet
-
getAnnotations
(unannotated=True)[source]¶ Get annotations.
Parameters: unannotated (bool) – Booelan variable indicating whether unannotated annotations should be generated by thresholding the prior at 0.5. Defaults to True
-
getChanged
(theshold=0.5)[source]¶ Return number of annotations changed by the model (sum of included and exluded genes )
-
getFactors
(ids=None, unannotated=True)[source]¶ Get factors
Parameters: unannotated – Boolean variable indicating whether to return also unannotated factors. DEfaults to true
-
getNchanged
()[source]¶ Return number of annotations changed by the model (sum of included and exluded genes )
-
printDiagnostics
()[source]¶ Print diagnostics of the model. If more than 100% of gene annotations are for at least one factor, the model should be re-fitted with sparse unannotated facotrs.
-
regressOut
(idx, use_latent=False)[source]¶ Regress out unwanted variation
Parameters: - idx (vector_like) – Indices of factors to be regressed out
- use_latent (bool) – Boolean varoable indicating whether to regress out the unwanted variation on the low-dimensional latent space or the high-dimensional gene expression space.
Returns: A matrix containing the corrected expression values.
-
Plotting and saving results¶
-
fscLVM.
plotTerms
(FA=None, S=None, alpha=None, terms=None, madFilter=0.4)[source]¶ Plot terms and their respective relevance
Parameters: - FA (
fscLVM.CSparseFA
) – Factor analysis object, ususally generated using initFA function - madFilter (float) – Filter factors by this mean absolute deviation to exclude outliers. For large datsets this can be set to 0.
- FA (
-
fscLVM.
plotFactors
(FA=None, idx1=0, idx2=1, X=None, lab=None, terms=None, cols=None, isCont=True, madFilter=0.4)[source]¶ Scatter plot of 2 factors
Parameters: - FA (
fscLVM.CSparseFA
) – Factor analysis object, ususally generated using initFA function - idx1 (int) – Index of first factor to be plotted
- idx2 (int) – Index of second factor to be plotted
- lab (vector_like) – Vector of labels for each data point
- isCont (bool) – Boolean variable indicating whether labels should be interpreted as discrete or continuous
- cols (vector_like) – Vector of colors. Should be the same length as unique labels. Default is None, then the brewer2mpl
- madFilter (float) – Filter factors by this mean absolute deviation to exclude outliers. For large datsets this can be set to 0.
- FA (
-
fscLVM.
plotFA
(FA, Nactive=20, stacked=True, db='MSigDB', madFilter=0.4, unannotated=False)[source]¶ Plot results of f-scLVM
Identified factors and corresponding gene set size ordered by relevance (white = low relevance; black = high relevance). Top panel: Gene set augmentation, showing the number of genes added (red) and removed (blue) by the model for each factor.
Parameters: - FA (
fscLVM.CSparseFA
) – Factor analysis object, ususally generated using initFA function - Nactive (int) – Numer of terms to be plotted
- stacked (bool) – Boolean variable indicating whether bars should be stacked
- db (str) – Name of database used, eihter ‘MSigDB’ or ‘REACTOME’
- madFilter (float) – Filter factors by this mean absolute deviation to exclude outliers. For large datsets this can be set to 0.
- unannotated (bool) – Indicates whether also unannotated factors should be plotted. Defaults to False.
- FA (
-
fscLVM.
saveFA
(FA, out_name=None, saveF=False, out_dir='./')[source]¶ Saves output of fscLVM.CSparseFA object
Parameters: - FA (
fscLVM.CSparseFA
) – Factor analysis object, ususally generated using initFA function - out_name (str) – Name of hdf file to save the model to. Default is `None’ for which a filename is created automatically.
- saveF (bool) – Boolean variable indicating whether to save the imputed expression space.
- out_dir (str) – data directory where to save the outpout
- FA (
-
fscLVM.
dumpFA
(FA)[source]¶ Dumps output of fscLVM.CSparseFA object in a dictionary
Parameters: FA ( fscLVM.CSparseFA
) – Factor analysis object, ususally generated using initFA functionReturns: dictionary with results
Contents:


Tcl objects usually remain one type over their life, but occasionally a
Tcl object must be converted from one type to another. For example, a
Java object handle may be passed as the argument to the llength
command. The internal rep of the Tcl object is converted from a Java
object handle to a Tcl List. When this happens the ref count of the Java
object handle is decremented. If the ref count becomes zero, the Java
object handle is invalidated and the Tcl variable no longer accesses a
Java object. For example:
The solution is to guarantee that the Java object handle's ref count
does not become zero. Use the java::lock and java::unlock
commands to maintain a permanent reference to the Java object handle.
For example:
# Create a new Java Object. The ref count equals one.
set o [java::new java.lang.Object]
# Call a method of the Java Object.
puts [$o toString]
# Convert the Java object handle to a Tcl List. This
# decrements the ref count by one. The ref count equals
# zero and the Java object is invalidated.
llength $o
# This command will generate an error, because the
# Tcl object no longer references a valid Java object.
puts [$o toString]
# Create a new Java object. The ref count equals one.
set o [java::new java.lang.Object]
# Lock the Java Object handle so it is not invalidated.
# The ref count now equals two.
java::lock $o
# Convert the Java object to a Tcl List. This decrements
# the ref count by one. The ref count equals one and the
# Java object remains valid.
llength $o
# Now this command works. It also increments the ref count
# of the java object, because a Tcl List is being converted
# to the original Java object handle.
puts [$o toString]
# Remove the lock and decrement the ref count.
java::unlock $o
# Now this will fail as in the previous example.
llength $o
puts [$o toString]
If you want to interactively enter commands without worrying about the details of Java object reference counting, you can use the java::autolock command.
Copyright © 1997-1998 Sun Microsystems, Inc.


I was once a PhD candidate in philosophy at Harvard, and I was fairly pleased with some of the work I did there. Hopefully I’ll get around to properly publishing a bit of it, but here are some of the highlights in the meantime. More to come.
Forgive formatting errors. I converted these papers from LaTeX to Markdown automatically, and I’m still cleaning them up.
Abstract. I articulate the Socratic understanding of techne—expertise—and argue that, for Socrates, techne is knowledge. This sheds light on various other aspects of Socrates’ philosophy.
Abstract. Kumārila Bhaṭṭa, an influential Indian philosopher of the 8th century, argues that beliefs are svataḥ prāmāṇya (generally glossed as ‘intrinsically valid’). This has often been understood to mean, both clasically and by contemporary writers, to amount to the unpromising view that all beliefs are true, or alternatively that all beliefs are justified. I defend a more sympathetic interpretation according to which Kum=arila claims that beliefs are presumptively justified, the grounds for this claim being that other understandings of epistemic justification entail vicious justificatory regress.
Abstract. In this paper I offer a novel defence against the problem of evil based on an understanding of goodness derived from Peter Geach. On this understanding, all goodness (and badness) depends on a ‘functional context.’ We can interpret evil in terms of human dysfunction. One form of dysfunction derives from incompletion. If evil is a matter of our incomplete state, then we canot infer any fault in our Creator, because we do not know what we may yet become.


The word Work is very important
The word Stress is emphasized
The number 0908734 is highlighted
This is a Combination of these
This is a bold text
This is italicized


Projects
BookMaps
BookMaps is a peer-to-peer library application that enables people to loan their collection of books, or rent books from nearby users. BookMaps was built using technologies such as React/Redux, NodeJS, Express, PostgresSQL, OAuth and more. Our team utilized third party APIs such as Goodreads, Google Maps, Stripe, Twilio, and Sendgrid to construct a robust user experience. Created for my Lambda School Capstone Project, along with Henry Neal, Jacob Layton, Blake Fletcher, and David Flack. Click here to visit and use the website. View the code here.
NiftyMarkets - NodeJS/SQL Backend
NiftyMarkets is a peer-to-peer marketplace where users can buy and sell virtual/digital assets. This project was built from scratch in a week for Lambda School’s Build Week. As the sole backend architect, I built out our entire NodeJS backend, deployed a RESTful API utilizing all four “CRUD” operations, and created an SQL database with normalized data. I used technologies such as Knex, SQLite, Express, Json Web Tokens, BcryptJS, and Supertest among others. The front-end React/Redux application was created by Pavol Karas and Delba de Oliveira, and the UI was designed by Austin Powell. View the code here.
TipsEase - React/Redux Front-End Application
TipsEase is a mock company that allows patrons to tip staff members directly without an intemediary. This project was built in four days for Lambda School's Build Week. As the front end architect, I built the React/Redux application from scratch, while collaborating with the back-end team to successfully render the project. View the code here.
Instagram Clone
This is a clone of Instagram made from scratch using React, made for a Lambda School project. View the code here.


| Utility | ||||
|
||||
| Coverage | |||||||||
| Lines | Functions / Methods | Classes | |||||||
| Total |
|
13.92% | 265 / 1904 |
|
12.50% | 15 / 120 |
|
0.00% | 0 / 7 |
| ClassRegistry.php |
|
4.52% | 7 / 155 |
|
7.69% | 1 / 13 |
|
0.00% | 0 / 1 |
| Debugger.php |
|
25.21% | 92 / 365 |
|
5.26% | 1 / 19 |
|
0.00% | 0 / 1 |
| Folder.php |
|
19.46% | 65 / 334 |
|
19.23% | 5 / 26 |
|
0.00% | 0 / 1 |
| Hash.php |
|
11.19% | 50 / 447 |
|
0.00% | 0 / 28 |
|
0.00% | 0 / 1 |
| Inflector.php |
|
16.20% | 23 / 142 |
|
33.33% | 4 / 12 |
|
0.00% | 0 / 1 |
| ObjectCollection.php |
|
24.78% | 28 / 113 |
|
33.33% | 4 / 12 |
|
0.00% | 0 / 1 |
| String.php |
|
0.00% | 0 / 348 |
|
0.00% | 0 / 10 |
|
0.00% | 0 / 1 |
| Generated by PHP_CodeCoverage 1.1.2 using PHP 5.3.5 and PHPUnit 3.6.10 at Sun Jul 15 15:20:11 JST 2012. |


User stories
- I can pass a URL as a parameter via POST method and I will receive a shortened URL in the JSON response. For example {"short_url":3,"original_url":"https://nanourl.glitch.me/"}
- If I pass an invalid URL that doesn't follow the valid http://www.example.com format, the JSON response will contain an error instead.For example {"error":"invalid URL: goldsfsdfpi/shorturl/1"}
- When I visit that shortened URL, for example https://nanourl.glitch.me/api/shorturl/1 it will redirect me to my original link.
Simple url creation


rGrid.css
Breakpoints
xs
sm
ms
lg
xl
Examples
Gender hidden on
`sm`
an
`xs
`, Age hidden only
`xs`
.
Name
Gender
Age
Tom
Male
20
Mary
Female
30


|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
@InterfaceAudience.Public @InterfaceStability.Stable public interface ContainerManagementProtocol
The protocol between an ApplicationMaster
and a
NodeManager
to start/stop containers and to get status
of running containers.
If security is enabled the NodeManager
verifies that the
ApplicationMaster
has truly been allocated the container
by the ResourceManager
and also verifies all interactions such
as stopping the container or obtaining status information for the container.
| Method Summary | |
|---|---|
GetContainerStatusesResponse |
getContainerStatuses(GetContainerStatusesRequest request)
The API used by the ApplicationMaster to request for current
statuses of Container s from the NodeManager . |
StartContainersResponse |
startContainers(StartContainersRequest request)
The ApplicationMaster provides a list of
StartContainerRequest s to a NodeManager to
start Container s allocated to it using this interface. |
StopContainersResponse |
stopContainers(StopContainersRequest request)
The ApplicationMaster requests a NodeManager to
stop a list of Container s allocated to it using this
interface. |
| Method Detail |
|---|
@InterfaceAudience.Public @InterfaceStability.Stable StartContainersResponse startContainers(StartContainersRequest request) throws YarnException, IOException
The ApplicationMaster
provides a list of
StartContainerRequest
s to a NodeManager
to
start Container
s allocated to it using this interface.
The ApplicationMaster
has to provide details such as allocated
resource capability, security tokens (if enabled), command to be executed
to start the container, environment for the process, necessary
binaries/jar/shared-objects etc. via the ContainerLaunchContext
in
the StartContainerRequest
.
The NodeManager
sends a response via
StartContainersResponse
which includes a list of
Container
s of successfully launched Container
s, a
containerId-to-exception map for each failed StartContainerRequest
in
which the exception indicates errors from per container and a
allServicesMetaData map between the names of auxiliary services and their
corresponding meta-data. Note: None-container-specific exceptions will
still be thrown by the API method itself.
The ApplicationMaster
can use
getContainerStatuses(GetContainerStatusesRequest)
to get updated
statuses of the to-be-launched or launched containers.
request
- request to start a list of containers
YarnException
IOException
org.apache.hadoop.yarn.exceptions.NMNotYetReadyException
- This exception is thrown when NM starts from scratch but has not
yet connected with<EMAIL_ADDRESS>@InterfaceStability.Stable StopContainersResponse stopContainers(StopContainersRequest request) throws YarnException, IOException
The ApplicationMaster
requests a NodeManager
to
stop a list of Container
s allocated to it using this
interface.
The ApplicationMaster
sends a StopContainersRequest
which includes the ContainerId
s of the containers to be stopped.
The NodeManager
sends a response via
StopContainersResponse
which includes a list of ContainerId
s of successfully stopped containers, a containerId-to-exception map for
each failed request in which the exception indicates errors from per
container. Note: None-container-specific exceptions will still be thrown by
the API method itself. ApplicationMaster
can use
getContainerStatuses(GetContainerStatusesRequest)
to get updated
statuses of the containers.
request
- request to stop a list of containers
YarnException
IOException
@InterfaceAudience.Public @InterfaceStability.Stable GetContainerStatusesResponse getContainerStatuses(GetContainerStatusesRequest request) throws YarnException, IOException
The API used by the ApplicationMaster
to request for current
statuses of Container
s from the NodeManager
.
The ApplicationMaster
sends a
GetContainerStatusesRequest
which includes the ContainerId
s
of all containers whose statuses are needed.
The NodeManager
responds with
GetContainerStatusesResponse
which includes a list of
ContainerStatus
of the successfully queried containers and a
containerId-to-exception map for each failed request in which the exception
indicates errors from per container. Note: None-container-specific
exceptions will still be thrown by the API method itself.
request
- request to get ContainerStatus
es of containers with
the specified ContainerId
s
ContainerStatus
of the
successfully queried containers and a containerId-to-exception map
for failed requests.
YarnException
IOException
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |


[gecode-users] propagation consistency of count (single value) constraint
Christian Schulte
cschulte at kth.se
Thu Aug 27 17:11:42 CEST 2015
Hi,
It is better than value consistency and bounds consistency but for some
special cases not domain consistent.
Thanks for the error report, I fixed them.
Cheers
Christian
--
Christian Schulte, www.gecode.org/~schulte
Professor of Computer Science, KTH, cschulte at kth.se
Expert Researcher, SICS, cschulte at sics.se
-----Original Message-----
From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
Of Kish Shen
Sent: Wednesday, August 26, 2015 10:21 PM
To: users at gecode.org
Subject: [gecode-users] propagation consistency of count (single value)
constraint
I noticed an inconsistency in my (ECLiPSe) documentation for the count (for
single values) constraint in the Gecode interface, and the current Gecode
reference documentation for these constraints:
count(home, x, y, INT_EQ, z)
this is for IntVarArg x, while y and z can be int or IntVar
My documentation states that the constraint can be posted with ICL_DOM.
but this seems to be inconstent with the current reference documentation.
Looking at Gecode's reference documentation, it seems that depending on if y
and z are int or IntVar, either the constraint is propagated at ICL_DEF only
(not achieving domain consistency), or at two different consistency levels:
ICL_DOM, which does stronger propagation (but not domain consistent), and
less propagation with all other IntConLev.
So if I understand the reference documentation correctly, ICL_DOM is used
only to distinguish it from an alternative that perform less propagation
(where the alternative exist, otherwise there is only one level of
propagation). How does the propagation achived compared to bound and value
consistencies?
I also noticed a minor typo in the reference documentation: in at least two
places, domain is spelt as comain, as in 'propagation is not comain
consistent'.
Cheers,
Kish
_______________________________________________
Gecode users mailing list
users at gecode.org
https://www.gecode.org/mailman/listinfo/gecode-users
More information about the users
mailing list


ARTISS- fibrinogen human thrombin human
Baxter Healthcare Corporation
HIGHLIGHTS OF PRESCRIBING INFORMATIONThese highlights do not include all the information needed to use ARTISS safely and
effectively. See full prescribing information for ARTISS
ARTISS [Fibrin Sealant (Human)] For Topical Use Only Frozen solution and lyophilized powder for solution for topical application includes DUPLOJECT Initial U.S. Approval: 2008 RECENT MAJOR CHANGESINDICATIONS AND USAGE
DOSAGE AND ADMINISTRATIONFor Topical Use Only. Do Not Inject (2). Apply on surface of prepared wound beds only (2.3) ARTISS Kit (Freeze-Dried) requires reconstitution prior to use (2.1) ARTISS Pre-filled Syringe (Frozen) requires thawing prior to use (2.2) Apply as a thin layer using the Easyspray and Spray Set (2.3, 5.2) Dosage: 2 mL will cover approximately 100 cm2 surface area (2) Vials and pre-filled syringes are for single use only. Discard unused contents (2.3) DOSAGE FORMS AND STRENGTHSARTISS is available as a two-component fibrin sealant, including Sealer Protein (Human) and Thrombin (Human), in two dosage forms, 2 mL, 4 mL and 10 mL Freeze-Dried Kit and 2 mL, 4 mL and 10 mL Frozen Solution in Pre-filled Syringe (3) CONTRAINDICATIONSWARNINGS AND PRECAUTIONS
ADVERSE REACTIONSAdverse reactions reported during clinical trials in greater than 1% for subjects were: Burns: skin graft failure, hematoma and pruritus (6.1) Facial Rhytidectomy: hematoma/seroma (6.1) To report SUSPECTED ADVERSE REACTIONS, contact Baxter Healthcare Corporation at 1-866-888-2472 or FDA at 1-800-FDA-1088 or www.fda.gov/medwatch. USE IN SPECIFIC POPULATIONSPregnancy: No human or animal data. Use ARTISS only if clearly needed (8.1) See 17 for PATIENT COUNSELING INFORMATION. Revised: 8/2011 |
FOR TOPICAL USE ONLY – DO NOT INJECT.
The amount of ARTISS to be applied must be individualized by the treating physician based on the size of the surface to be covered. The approximate surface areas covered by each package size of ARTISS are:
| Approximate area requiring skin graft fixation | Required package size of ARTISS |
| 100 cm2 | 2 mL |
| 200 cm2 | 4 mL |
| 500 cm2 | 10 mL |
It is recommended that every time a patient receives a dose of ARTISS the name and lot number (batch number) of the product are documented in order to maintain link between the patient and product batch.
During preparation of ARTISS Kit:
DO NOT EXPOSE TO TEMPERATURES ABOVE 37°C
DO NOT REFRIGERATE OR FREEZE AFTER RECONSTITUTION
Do not use iodine or heavy metal containing preparations such as betadine for disinfection of vial stoppers. Allow alcohol-based disinfectants to evaporate before puncturing stopper.
After reconstitution, the product must be used within 4 hours.
Use separate syringes for reconstituting Sealer Protein and Thrombin solutions and for application to prevent premature clotting.
ARTISS Kit contains the following substances in four separate vials:
Freeze-dried Sealer Protein Concentrate and Thrombin are reconstituted in Fibrinolysis Inhibitor Solution and Calcium Chloride Solution, respectively. The Sealer Protein Solution and Thrombin Solution are then combined using the DUPLOJECT Preparation and Application System, or an equivalent delivery device cleared by FDA for use with ARTISS to form the Fibrin Sealant.
Prewarming ARTISS Kit with FIBRINOTHERM
If a FIBRINOTHERM device is not available, contact Baxter (1-800-423-2090) for assistance. See FIBRINOTHERM manual for complete operating instructions.
Preparation of Sealer Protein Solution with FIBRINOTHERM
Notes:
Preparation of Thrombin Solution with FIBRINOTHERM
Transferring to the Sterile Field
For transfer of the Sealer Protein Solution and the Thrombin Solution to the sterile field, the scrub nurse should withdraw the solutions while the circulating nurse holds the non-sterile vials. The solutions should be withdrawn slowly by firm constant aspiration to reduce the risk of large air bubbles.
During preparation of ARTISS (frozen):
DO NOT EXPOSE TO
TEMPERATURES ABOVE 37°C
DO NOT MICROWAVE
DO NOT
REFRIGERATE OR RE-FREEZE AFTER THAWING
Do not use ARTISS (frozen) unless it is completely thawed and warmed (liquid consistency).

ARTISS (frozen) can be prepared (thawed) using one of two options:
Room Temperature Thawing
Approximate thawing times when using this method are:
| Pack Size | Room
Temperature (In Pouches) |
| 2 mL | 60 minutes |
| 4 mL | 110 minutes |
| 10 mL | 160 minutes |
Unopened pouches, thawed at room temperature, may be stored for up to 14 days at 15-25°C.
Prior to use, the product should be warmed to 33-37°C:
| Pack Size | 33°C to
37°C Incubator (In Pouches) |
| 2 mL | 15 minutes |
| 4 mL | 25 minutes |
| 10 mL | 35 minutes |
Quick Thawing
Thawing on the sterile field using a water bath
33°C to 37°C sterile water bath - transfer the inner pouch to the sterile field, remove pre-filled syringe from inner pouch and place directly into sterile water bath. Ensure the contents of the pre-filled syringe are completely immersed under the water.
Approximate thawing times when using this method are:
| Pack Size | 33°C to
37°C Sterile Water Bath (Pouches Removed) |
| 2 mL | 5 minutes |
| 4 mL | 5 minutes |
| 10 mL | 12 minutes |
Thawing off the sterile field using a water bath
33°C to 37°C non-sterile water bath in two pouches - maintain the pre-filled syringe in both pouches and place into a water bath off the sterile field for appropriate time. Ensure the pouches remain submerged throughout thawing. Remove from the water bath after thawing, dry external pouch and transfer inner pouch with pre-filled syringe onto the sterile field.
Approximate thawing times when using this method are:
| Pack Size | 33°C to
37°C Non-Sterile Water Bath (In Pouches) |
| 2 mL | 30 minutes |
| 4 mL | 40 minutes |
| 10 mL | 80 minutes |
Thawing off the sterile field using an incubator
33°C to 37°C incubator in pouches – maintain the pre-filled syringe in both pouches and place into an incubator for appropriate time. Remove from incubator after thawing and transfer inner pouch with pre-filled syringe onto the sterile field.
Approximate thawing times when using this method are:
| Pack Size | 33°C to
37°C Incubator (In Pouches) |
| 2 mL | 40 minutes |
| 4 mL | 85 minutes |
| 10 mL | 105 minutes |
Maintain the product at 33-37°C until use. If product is removed from original pouch or warmed to 33-37°C it must be used within 12 hours.
Apply ARTISS using the Easyspray and Spray Set, or an equivalent device cleared by FDA for application of ARTISS. See additional instructions for use provided with the spray set.
The wound surface should be as dry as possible before application.
Ensure that parts of the body outside the desired application area are sufficiently covered to prevent tissue adherence at undesired site.
Apply ARTISS as a thin layer to avoid the formation of excess granulation tissue and to ensure gradual absorption of the polymerized fibrin sealant.
The aerosolized sealant should be applied to the wound in a painting motion from side to side to achieve a single thin application. The wound bed will glisten in the area to which fibrin sealant has been applied.
Any areas not covered by fibrin sealant will be clearly visible.
The skin flap or graft should be attached to the wound bed immediately after ARTISS has been sprayed. The surgeon has up to 60 seconds to manipulate and position the flap or graft prior to polymerization. The initial amount of the product to be applied should be sufficient to cover the intended application area.
The application can be repeated, if necessary, to any small areas that may not have been previously treated. To prevent adherence, wet gloves with normal saline before product contact.
After the flap or graft has been positioned, hold in the desired position by gentle compression for at least 3 minutes to ensure ARTISS sets properly and adheres firmly to the surrounding tissue. The solidified fibrin sealant reaches its final strength in approximately 2 hours after application.
The cannulas included with the DUPLOJECT Preparation and Application System or DUO Set may be used for small wounds or for edges of a skin graft that did not adhere to the wound bed (see WARNINGS/PRECAUTIONS Application Precautions (5.3)). Immediately before application, expel and discard the first several drops from the application cannula to ensure adequate mixing of the Sealer Protein and Thrombin solutions in cases where very small volumes (1-2 drops) are administered.
If application of ARTISS is interrupted, replace the cannula immediately before application is resumed.
Figure 1 DUO SET A
Vials and pre-filled syringes are for single use only. Discard unused contents.
ARTISS is available as a two-component fibrin sealant, including Sealer Protein (Human) and Thrombin (Human), in two dosage forms 2 mL, 4 mL and 10 mL Freeze-Dried Kit and 2 mL, 4 mL and 10 mL Frozen Solution in Pre-filled Syringe.
The reconstituted solution or pre-filled syringe contains:
Sealer Protein Solution
| Total protein: | 96 – 125 mg/mL | |
| Fibrinogen: | 67 – 106 mg/mL | |
| Fibrinolysis Inhibitor (Synthetic): | 2250 – 3750 KIU/mL | |
| Other ingredients include: human albumin, tri-sodium citrate, histidine, niacinamide, polysorbate 80 and water for injection (WFI). |
Thrombin Solution
| ||
| Thrombin (Human): | 2.5 – 6.5 units/mL* | |
| Calcium Chloride: | 36 – 44 µmol/mL | |
| Other ingredients include: human albumin, sodium chloride and water for injection (WFI). |
Do not inject ARTISS directly into blood vessels. Intravascular application of ARTISS may result in life-threatening thromboembolic events.
Do not use ARTISS in individuals with a known hypersensitivity to aprotinin and/or hypersensitivity to any of the active substances or excipients (see WARNINGS/PRECAUTIONS, Hypersensitivity/Allergic/Anaphylactic Reactions (5.1) and ADVERSE REACTIONS (6)).
Hypersensitivity or allergic/anaphylactoid reactions may occur with the use of ARTISS. Cases have been reported in post marketing experience with fibrin sealant (see ADVERSE REACTIONS, Post-MarketingExperience (6.2)). In specific cases, these reactions have progressed to become life-threatening. Such reactions may especially be seen if ARTISS is applied repeatedly over time or in the same setting, or if systemic aprotinin has been administered previously; however, these reactions may also occur in patients receiving ARTISS for the first time. Even if the first treatment was well tolerated, a subsequent administration of ARTISS or systemic aprotinin may not exclude the occurrence of an allergic reaction. Symptoms associated with allergic anaphylactic reactions include: flush, urticaria, pruritus, nausea, drop in blood pressure, tachycardia or bradycardia, dyspnea, severe hypotension and anaphylactic shock.
Aprotinin is included in ARTISS for its antifibrinolytic properties. Aprotinin, a monomeric polypeptide, is known to be associated with anaphylactic reactions. Even in the case of strict local application of aprotinin, there is a risk of anaphylactic reactions to aprotinin, particularly in the case of previous exposure (see CONTRAINDICATIONS, Aprotinin Hypersensitivity (4.2)).
Discontinue administration of ARTISS in the event of anaphylactic/-oid or hypersensitivity reactions. Remove the already applied, polymerized product from the surgical field. Mild reactions can be managed with antihistamines. Severe reactions and reactions involving hypotension require immediate resuscitative intervention.
Air or gas embolism has occurred with the use of spray devices employing pressure regulator to administer fibrin sealants. This event appears to be related to the use of the spray device at higher than recommended pressures and in close proximity to the tissue surface.
When applying ARTISS using a spray device, be sure to use the pressure within the pressure range recommended by the spray device manufacturer. In the absence of a specific recommendation avoid using pressure above 20-25 psi. Do not spray closer than the distance recommended by the spray device manufacturer. In the absence of a specific recommendation avoid spraying closer than 10-15 cm from the surface of the tissue. When spraying ARTISS, changes in blood pressure, pulse, oxygen saturation and end tidal CO2 should be monitored because of the possibility of occurrence of air or gas embolism. When using the Easyspray device, or an equivalent spray device cleared by FDA, use the pressure within the pressure range recommended by the spray device manufacturer. Spray ARTISS only on to visible application sites.
The sealer protein and thrombin solutions can be denatured by alcohol, iodine or heavy metal ions (e.g. antiseptic solutions). If any of these substances have been used to clean the wound area, the area must be thoroughly rinsed before application of ARTISS and made as dry as possible.
Apply ARTISS as a thin layer. Excessive clot thickness may delay the natural wound healing process.
ARTISS is made from human plasma. Products made from human plasma may contain infectious agents, such as viruses, that can cause disease. The risk that such products will transmit an infectious agent has been reduced by screening plasma donors for prior exposure to certain viruses, by testing for the presence of certain current virus infections, and by inactivating and removing certain viruses. Despite these measures, such products can still potentially transmit disease. Because this product is made from human blood, it may carry a risk of transmitting infectious agents, e.g., viruses, and theoretically, the Creutzfeldt-Jakob disease (CJD) agent. This also applies to unknown or emerging viruses or other pathogens. All infections thought by a physician possibly to have been transmitted by this product should be reported by the physician or other healthcare provider to Baxter Healthcare Corporation, telephone # 1-866-888-2472.
Some viruses, such as parvovirus B19, are particularly difficult to remove or inactivate at this time. Parvovirus B19 most seriously affects pregnant women (fetal infection), immune-compromised individuals or individuals with an increased erythropoiesis (e.g., hemolytic anemia) (see USE IN SPECIFIC POPULATIONS, Pregnancy (8.1) and PATIENT COUNSELING INFORMATION (17)).
The most frequent (≥ 1% of clinical study subjects) adverse reactions with the use of ARTISS were: skin graft failure, hematoma and pruritus in burn studies, and hematoma/seroma in rhytidectomy studies.
Because clinical trials are conducted under widely varying conditions, adverse reaction rates observed in the clinical trials of a drug cannot be directly compared to rates in the clinical trials of another drug and may not reflect the rates observed in practice.
The burn and rhytidectomy surgery studies were prospective, randomized, controlled, multicenter clinical studies with a total of 298 subjects. In each study the subject served as its own control. All subjects treated have been included into the safety analysis. See CLINICAL STUDIES (14) for outcome.
The data described in Table 2 reflects the exposure to ARTISS in the 4 burn and rhytidectomy surgery studies:
| Burn | Rhytidectomy | |||
| Parameter | Preliminary Study | Confirmatory Study | Preliminary Study | Confirmatory Study |
| Sample size (N) | 40 | 138 | 45 | 75 |
|
Gender F (%) / M (%) |
11 (27.5%) 29 (72.5%) |
44 (31.9%) 94 (68.1%) |
42 (93.3%) 3 (6.7%) |
71 (94.7%) 4 (5.3%) |
| Age Range (years) | 6 – 55 | 1 – 63 | 43 – 70 | 40 - 71 |
|
Volume applied (Mean ± SD) (Range in mL) |
2.9 ± 1.64 (Range: 1.0 - 10.8) |
2.7 ± 1.9 (Range: 0.2 - 12.0) |
2.32 ± 0.95 (Range: 0.80 - 4.0) |
2.58 ± 1.17 (Range: 0.60 - 4.0) |
Adverse reactions in the burn studies occurring in greater than 1% of subjects treated with ARTISS were skin graft failure (3%), hematoma (1%) and pruritus (1%) [n=178].
Adverse reactions in the facial rhytidectomy studies occurring in greater than 1% of subjects treated with ARTISS were hematoma/seroma (4%) [n = 120].
In the facial rhytidectomy studies, three subjects experienced serious adverse events (experiences). Two were local: wound abscess on the ARTISS treated side of the face that was recognized on postoperative day 14 and was treated by operative incision and drainage; and a case of basal cell carcinoma on the SoC treated side of the face. A third subject experienced dehydration on the second postoperative day.
The following adverse reactions have been identified during post approval use of ARTISS. Because these reactions are reported voluntarily from a population of uncertain size, it is not always possible to reliably estimate their frequency or establish a causal relationship to drug exposure.
Fatal air embolism has been reported with misapplication of fibrin sealants administered with a pressurized spray device.
The following adverse reactions have been reported in post-marketing experience with another Baxter fibrin sealant that could reasonably be expected to occur with ARTISS:
Immune system disorders: anaphylactic responses, hypersensitivity
Cardiac disorders: bradycardia, tachycardia
Respiratory, thoracic and mediastinal disorders: dyspnea
Gastrointestinal disorders: nausea
Skin and subcutaneous tissue disorders: urticaria
General disorders and administration site conditions: flushing, impaired healing, edema, pyrexia
Injury, poisoning and procedural complication: seroma
Oxycellulose containing preparations may reduce the efficacy of ARTISS and should not be used as carrier materials. No interaction studies have been performed.
Pregnancy Category C
Animal reproduction studies have not been conducted with ARTISS. It is also not known whether ARTISS can cause fetal harm when administered to a pregnant woman or can affect reproduction capacity. Some viruses, such as parvovirus B19, are particularly difficult to remove or inactivate at this time. Parvovirus B19 most seriously affects pregnant women (fetal infection). ARTISS should be given to a pregnant woman only if deemed medically necessary.
It is not known whether this drug is excreted in human milk. Because many drugs are excreted in human milk, caution should be exercised when ARTISS is administered to nursing mothers.
In two clinical trials utilizing ARTISS to adhere autologous skin grafts to surgically prepared wound beds resulting from burns, the efficacy and safety of ARTISS in 38 pediatric subjects (27 subjects ages 1 through 10 years and 11 subjects ages 11 through 16 years) were not different from an adult population
To avoid the formation of excess granulation tissue and to ensure gradual absorption of the polymerized fibrin sealant, apply only a thin layer of ARTISS (see DOSAGE AND ADMINISTRATION, Method of Application (2.3)).
ARTISS [Fibrin Sealant (Human)] is a two-component fibrin sealant made from pooled human plasma.
Sealer Protein (Human)
Sealer Protein (Human) is a sterile, non-pyrogenic, vapor-heated and solvent/detergent treated preparation made from pooled human plasma. Sealer Protein (Human) is provided either as a freeze-dried powder [Sealer Protein Concentrate (Human)] for reconstitution with Fibrinolysis Inhibitor Solution (Synthetic) or as a frozen liquid solution pre-filled into one side of a dual-chambered syringe (1). The active ingredient in Sealer Protein (Human) is fibrinogen. A Fibrinolysis Inhibitor, Aprotinin (Synthetic) is included in the Sealer Protein (Human) component to delay fibrinolysis. Aprotinin (Synthetic) is manufactured by solid phase synthesis from materials completely of non-human/non-animal origin.
Thrombin (Human)
Thrombin (Human) is a sterile, non-pyrogenic, vapor-heated and solvent/detergent treated preparation made from pooled human plasma. Thrombin (Human) is also provided either as a freeze-dried powder for reconstitution with Calcium Chloride Solution or as a frozen liquid solution pre-filled into one side of a dual-chambered syringe (2).
Sealer Protein (Human) and Thrombin (Human) are made from pooled human plasma collected at US licensed collection centers. The vapor heat and solvent/detergent treatment steps used in the manufacturing process have been shown to be capable of significant viral reduction. No procedure, however, has been shown to be completely effective in removing viral infectivity from derivatives of human plasma (see Viral Clearance below and WARNINGS/PRECAUTIONS, Infection Risk from Human Plasma (5.4).
Viral Clearance
The manufacturing procedure for ARTISS includes processing steps designed to further reduce the risk of viral transmission. In particular, vapor heating and solvent/detergent treatment processes are included in the manufacturing of Sealer Protein Concentrate and Thrombin. Validation studies were conducted using samples drawn from manufacturing intermediates for each of the two human plasma derived components. These samples were spiked with stock virus suspensions of known titers followed by further processing under conditions equivalent to those in the respective manufacturing steps. The stock virus suspensions represent HIV, HBV, HCV, HAV and Human Parvovirus B19.
The virus reduction factors (expressed as log10) of independent manufacturing steps are shown in Table 3 for each of the viruses tested:
| Reduction Factors for
Virus Removal and/or Inactivation Sealer Protein Component | |||||
| Manufacturing Step | Mean Reduction Factors [log10] of Virus Tested | ||||
| HIV-1* | HAV* | BVDV* | PRV* | MMV* | |
| Early Manufacturing Steps | n.d.† | n.d. | n.d. | n.d. | 2.7 |
| Solvent/Detergent Treatment | >5.3 | n.d. | >5.7 | >5.9 | n.d. |
| Vapor Heat Treatment | >5.5 | >5.6 | >5.7 | >6.7 | 1.2 |
| Overall Reduction Factor (ORF) | >10.8 | >5.6 | >11.4 | >12.6 | 3.9 |
| Reduction Factors for
Virus Removal and/or Inactivation Thrombin Component | |||||
| Mean Reduction Factors [log10] of Virus Tested | |||||
| Manufacturing Step | HIV-1 | HAV | BVDV | PRV | MMV |
| Thrombin precursor mass capture | 3.2 | 1.5 | 1.8 | 2.5 | 1.2 |
| Vapor Heat Treatment | >5.5 | >4.9 | >5.3 | >6.7 | 1.0 |
| Solvent/Detergent Treatment | >5.3 | n.d. | >5.5 | >6.4 | n.d. |
| Ion Exchange Chromatography | n.d. | n.d. | n.d. | n.d. | 3.6 |
| Overall Reduction Factor (ORF) | >14.0 | >6.4 | >12.6 | >15.6 | 5.8 |
In addition, Human Parvovirus B19 was used to investigate the upstream Thrombin precursor mass capture step, the Sealer Protein early manufacturing steps and the Thrombin and Sealer Protein vapor heating steps. Using quantitative PCR assays, the estimated log reduction factors obtained were 1.7 and 3.4 for the Thrombin precursor mass capture step and Sealer Protein early manufacturing steps and >4 / 1.0 for the Thrombin / Sealer Protein vapor heating steps, respectively.
See DOSAGE FORMS AND STRENGTHS (3).
Upon mixing Sealer Protein (Human) and Thrombin (Human), the two components mimic the final stage of the blood coagulation cascade. Soluble fibrinogen is transformed into fibrin that adheres to the wound surface and to the skin flap or graft to be affixed. Due to the low thrombin concentration, initial polymerization of ARTISS will take up to 60 seconds. The fibrin clot continues to strengthen for up to 2 hours after application.
Spray application of ARTISS over the wound bed provides full surface adherence of skin flaps and grafts. Full surface adherence minimizes areas of dead space between the wound bed and applied tissues. Elimination of dead space prevents shear irritation upon movement as well as reduces the void space under the skin that can host fluid build-up.
Thrombin is a highly specific protease that transforms the fibrinogen contained in Sealer Protein (Human) into fibrin (see Pharmacokinetics (12.3)).
Fibrinolysis Inhibitor, Aprotinin (Synthetic), is a polyvalent protease inhibitor that prevents premature degradation of fibrin. Free Aprotinin and its metabolites have a half-life of 30 to 60 minutes and are eliminated by the kidney. Preclinical studies with different fibrin sealant preparations simulating the fibrinolytic activity generated by extracorporeal circulation in patients during cardiovascular surgery have shown that incorporation of aprotinin in the product formulation increases resistance of the fibrin sealant clot to degradation in a fibrinolytic environment.
ARTISS was investigated for adherence of split thickness sheet skin grafts in burn patients in a prospective, randomized, controlled, evaluator- blinded, multicenter clinical study. In each of the 138 patients, two comparable test sites were identified after burn wound excision. Skin grafts were adhered at one test site using ARTISS, and at the other test site using staples (control). The study product was applied once to the wound bed of the allocated test site during skin grafting surgery.
The mean ± SD estimated total body surface area (TBSA) for all burn wounds was 13.6 ± 9.2%. The mean ± SD estimated TBSA requiring skin grafting was 8.0 ± 6.9%. The mean ± SD estimated TBSA for ARTISS test sites was 1.7 ± 0.8% and for the stapled test sites was 1.7 ± 0.7%. Burn wound thickness was classified as full thickness in 106 (76.8%) of the 138 treated subjects, and partial thickness in 32 (23.2%) subjects.
The safety population contained all 138 treated subjects; however, 11 subjects did not have an available primary endpoint assessment, leaving a modified intent-to-treat (ITT) set of 127 patients. Complete wound closure by Day 28 was achieved in 43.3% of the ARTISS test sites and 37.0% of the stapled test sites in the 127 ITT patients. Wound closure at Day 28 was complete at 72% of the ARTISS and staples test sites for the 1-?6 years old group (N=18), at 32% of the ARTISS test sites and 26% of the staples test sites for the 7-18 years old group (N=19) and at 40% of the ARTISS test sites and 32% of the staples test sites for the greater then 18 years old group [ITT]. The lower limit of the 97.5% confidence interval of the difference between ARTISS and staples was –0.029. A similar result was obtained in the per protocol (PP) population: complete wound closure by Day 28 was achieved in 45.3% of the ARTISS test sites and 39.6% of the stapled test sites in the 106 PP patients. The lower limit of the 97.5% confidence interval of the difference between ARTISS and staples was –0.041. Therefore, ARTISS was found to be non-inferior to staples in the ITT and PP populations at the 97.5% one-sided level for complete wound closure by Day 28 because the lower limit of the confidence interval of the difference between ARTISS and staples success rates was greater than the predefined limit of –0.1.
14.2 Facial Rhytidectomy (flaps)
ARTISS was investigated for adherence of skin flaps in facial rhytidectomy surgeries during two prospective, randomized, controlled, multicenter clinical studies. Both the preliminary study investigating 45 subjects and the confirmatory study with 75 subjects had a split-face design in which 1 side of the face was treated with ARTISS as an adjunct to the standard of care (SoC) and the other side received SoC only, which was closure of the flap by means of staples and suturing only; therefore each subject participated in both arms (ARTISS and SoC).
Primary endpoint of the confirmatory study conducted in 75 subjects was the total drainage volume collected from each side of the face at 24 h (±4 h) post surgery. Occurrence of hematoma and seroma on each side of the face, comparison of edema between the 2 sides of the face, changes in skin sensitivity from baseline on each side of the face and subject preference were evaluated as secondary endpoints.
In both studies, a standardized drain was placed in each side of the face prior to the flap closure and drainage volume from both sides of the face from all subjects was compared. Pressure dressings were not allowed.
The results for the primary endpoint of the confirmatory study are presented in Table 4a below.
| Clinical Study (n= 75) | Mean ± SD Drainage (mL) ARTISS Side of the Face | Mean ± SD Drainage (mL) SoC Side of the Face | p-Value |
| Confirmatory study | 7.7 ± 7.4 | 20.0 ± 11.3 | < 0.0001 |
A statistically significant difference in drainage volumes was observed, favoring the side of the face treated with ARTISS.
Drainage volumes at 24 h post operatively for each side of the face reported as secondary endpoint in the preliminary study are presented in Table 4b below.
| Clinical Study (n = 45) | Mean ± SD Drainage (mL) ARTISS Side of the Face | Mean ± SD Drainage (mL) SoC Side of the Face |
| Preliminary study | 11.5 ± 13.7 | 26.8 ± 24.0 |
An integrated analysis of the occurrence of hematoma/seroma in all 120 subjects across two studies was performed. A comparison of the proportion of subjects experiencing a hematoma/seroma exclusively on the ARTISS-treated side or on the SoC side of the face is presented in Table 5 below.
| Clinical Study |
ARTISS n (%) |
SoC n (%) |
Both Sides of Face n (%) |
Total n (%) |
| Preliminary study | 0 | 9 (20%) | 0 | 9 (20%) |
| Confirmatory study | 2 (2.7%) | 5 (6.7%) | 3 (4%) | 10 (13.3%) |
ARTISS is supplied in the following pack sizes and presentations:
| Pack Size | NDC Number | ||
| ARTISS Kit (Freeze-Dried) | ARTISS Kit (Freeze-Dried) with DUPLOJECT System | ARTISS Pre-Filled Syringe (Frozen) with DUO Set | |
| 2 mL | 0944-4351-03 | 0944-4351-04 | 0944-8503-02 |
| 4 mL | 0944-4351-07 | 0944-4351-08 | 0944-8503-04 |
| 10 mL | 0944-4351-11 | 0944-4351-12 | 0944-8503-10 |
See DOSAGE FORMS AND STRENGTHS (3).
Storage
Store ARTISS in original carton to protect from light. Do not use after the expiration date. Discard if packaging of any components is damaged.
ARTISS Kit (Freeze-Dried)
Store at 2°C to 25°C. Avoid freezing. After reconstitution, the product must be used within 4 hours. Reconstituted solutions must not be refrigerated or frozen.
ARTISS Pre-filled Syringe (Frozen)
| Long term: | Store at ≤ -20°C. |
| Short term: | Room Temperature Thawing: Unopened pouches, thawed at room temperature, may be stored for up to 14 days at room temperature (15-25°C) after removal from the freezer. |
| Quick Thawing: Maintain the product at 33-37°C until use. If the product is removed from original pouch or warmed to 33-37°C it must be used within 12 hours. | |
| Do not refrigerate or re-freeze after thawing. Do not microwave. |
Do not use after the expiration date. Discard if packaging of any components is damaged.
Inform patients that ARTISS is made from human plasma and discuss the risks and benefits with the patient.
Parvovirus B19 infection may be serious for pregnant women (fetal infection) and for individuals with immunodeficiency or increased red blood cell turnover. Instruct patients to consult their physician if symptoms of B19 virus infection appear (fever, drowsiness, chills and runny nose followed about two weeks later by a rash and joint pain (see USE IN SPECIFIC POPULATIONS, Pregnancy (8.1)).
Baxter Healthcare Corporation
Westlake Village, CA 91362 USA
US License No.
140
This product is covered under US Patent Nos. 5,962,405 and 6,579,537.
Baxter, Artiss, Easyspray, Fibrinotherm and Duploject are trademarks of Baxter International
ARTISS 4 mL kit unit carton
NDC 0944-4351-07
4 mL
Kit
Fibrin Sealant (Human)
ARTISS
Contents:
Sealer Protein Concentrate (Human). Vapor Heated, Solvent/Detergent Treated, freeze dried, sterile, for 2 mL of Sealer Protein Solution
Fibrinolysis Inhibitor Solution (Synthetic), Sterile, 3000 KIU of Aprotinin/mL
Thrombin (Human), Vapor Heated, Solvent/Detergent Treated, freeze dried, sterile, for 2 mL of Thrombin Solution 4 IU/mL
Calcium Chloride Solution. Sterile, 40 µmol/mL
FOR TOPICAL USE ONLY
NOT FOR INJECTION
Do not use on individuals with a know hypersensitivity to aprotinin. The risk and benefits of this product should be discussed with the patient. Read the full prescribing information before use.
For single use only.
No preservative
Latex free
Rx Only
Baxter
ARTISS 4 mL kit sleeve
NDC 0944-4351-08
4 mL
Kit
Fibrin Sealant (Human)
ARTISS
Contents:
Sealer Protein Concentrate (Human). Vapor Heated, Solvent/Detergent Treated, freeze dried, sterile, for 2 mL of Sealer Protein Solution
Fibrinolysis Inhibitor Solution (Synthetic), Sterile, 3000 KIU of Aprotinin/mL
Thrombin (Human), Vapor Heated, Solvent/Detergent Treated, freeze dried, sterile, for 2 mL of Thrombin Solution 4 IU/mL
Calcium Chloride Solution. Sterile, 40 µmol/mL
Also includes: DUPLOJECT System for ARTISS [Fibrin Sealant (Human)] 2mL/4mL
FOR TOPICAL USE ONLY
NOT FOR INJECTION
Do not use on individuals with a know hypersensitivity to aprotinin. The risk and benefits of this product should be discussed with the patient. Read the full prescribing information before use.
For single use only.
No preservative
Latex free
Rx Only
Baxter
Sealer Protein Concentrate (Human) vial label
NDC 0944-7112-02
Sealer Protein Concentrate (Human)
Baxter
Vapor Heated, Solvent/Detergent Treated, Freeze-Dried, Sterile
Reconstitute with 2 mL of Fibrinolysis Inhibitor Solution (Synthetic)
Vial contains a stirrer to facilitate reconstitution.
Baxter Healthcare Corporation
Westlake Village, CA 91362 USA
U.S. License No. 140
Use within 4 hours of reconstitution.
Read enclosed directions prior to use.
NOT FOR INJECTION.
Store at 2ºC to 25ºC.
Rx only
Thrombin (Human) vial label
NDC 0944-7344-02
Thrombin (Human)
Baxter
Vapor Heated, Solvent/Detergent Treated, Freeze-Dried, Sterile
Reconstitute with 2 mL of Calcium Chloride Solution
Concentration: 4 IU/mL
Baxter Healthcare Corporation
Westlake Village, CA 91362 USA
U.S. License No. 140
Rx Only
Calcium Chloride Solution vial label
NDC 0944-7401-02
Calcium Chloride Solution
Baxter
Sterile For reconstitution of freeze-dried Thrombin (Human), Contents: 2 mL
Concentration: 40 µmol/mL
NOT FOR INJECTION. Store at 2°C to 25°C.
Baxter Healthcare Corporation
Westlake Village, CA 91362 USA
U.S. License No. 140
Rx Only
Fibrinolysis Inhibitor Solution (Synthetic) vial label
NDC 0944-7201-01
Fibrinolysis Inhibitor Solution (Synthetic)
Baxter
Sterile For reconstitution of freeze-dried Sealer Protein Concentrate (Human), Contents: 1 mL
Concentration: 3000 KIU of Aprotinin/mL
NOT FOR INJECTION. Store at 2°C to 25°C.
Baxter Healthcare Corporation
Westlake Village, CA 91362 USA
U.S. License No. 140
Rx Only
ARTISS 2 mL and 4 mL DUPLOJECT unit carton
DUPLOJECT 2 mL / 4 mL
Preparation and Application System for ARTISS [Fibrin Sealant (Human)]
For the preparation and application of ARTISS [Fibrin Sealant (Human)] 2 mL/4mL Kit.
STERILE - SINGLE PATIENT USE ONLY - DO NOT RESTERILIZE
Use separate devices for reconstitution of Sealer Protein Concentrate and Thrombin.
Rx only
Baxter
ARTISS Frozen 4 mL unit carton
NDC 0944-8503-04
4 mL
Fibrin Sealant (Human)
ARTISS
Frozen
TOPICAL USE ONLY
DO NOT INJECT
Contents:
Pre-filled syringe containing:
Sealer Protein Solution (1): 2 mL, sterile
Sealer Protein (Human) Vapor Heated, Solvent /Detergent Treated
Fibrinolysis Inhibitor (Aprotinin, Synthetic), 3000 KIU/mL
Thrombin Solution (2): 2 mL, sterile
Thrombin (Human), 4 units/mL Vapor Heated, Solvent /Detergent Treated
Calcium Chloride, 40 µmol/mL
Do not use on individuals with a known hypersensitivity to aprotinin and/or any of the active substances or excipients.
The risks and benefits of this product should be discussed with the patient.
Read full prescribing information before use.
Store at -20°C (-4°F) or colder. Unopened pouches, thawed at room temperature, may be stored for up to 14 days at 15-25°C.
The product must be used within 12 hours after warming to 33-37°C or removal form original pouches.
Do not refrigerate, microwave, or re-freeze.
For single use only
No preservative
Latex free
Rx Only
Contents were sterilized and package under aseptic conditions.
ARTISS Frozen 4 mL pouch label
NDC 0944-8503-04
Fibrin Sealant (Human)
ARTISS 4 mL
Frozen
Baxter
Contents:
Pre-filled syringe containing:
Sealer Protein Solution (1): 2 mL, sterile
Sealer Protein (Human)
Fibrinolysis Inhibitor (Aprotinin, Synthetic), 3000 KIU/mL
Thrombin Solution (2): 2 mL, sterile
Thrombin (Human), 4 units/mL
Calcium Chloride, 40 µmol/mL
Read directions for thawing and application before use.
TOPICAL USE ONLY
DO NOT INJECT
Store at -20°C (-4°F) or colder. Unopened pouches, thawed at room temperature, may be stored for up to 14 days at 15-25°C.
Do not refrigerate, microwave, or re-freeze.
Rx Only
Contents were sterilized and package under aseptic conditions.
Baxter Healthcare Corporation
Westlake Village, CA 91362 USA
U.S. License No. 140
Rx Only
ARTISS 4 mL Syringe label
Baxter
Fibrin Sealant (Human)
ARTISS
4 mL
|
ARTISS
fibrinogen human thrombin human kit | ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
| ||||||||||||||||||||
|
| Labeler - Baxter Healthcare Corporation (039121363) |
| Establishment | |||
| Name | Address | ID/FEI | Business Operations |
|---|---|---|---|
| Baxter Aktiengesellschaft | 300434670 | MANUFACTURE |


Pod Patcher
$refs.modalConfig.focus());" > Configure agent
Namespace
Deployments
–
–
Application name
Deployment name
No deployments
$refs.modalReview.focus()); " >
Review patch
Configure agent
×
Agent version
Collector host
Collector port
Review patch
×


TABLE OF INTERACTIONS WITH
CLOZAPINE
See also: atropinic medications
See also: sedative medications
See also: medications at the origin of orthostatic hypotension
See also: medications at risk when withdrawing from tobacco
See also: neuroleptics
From the French ANSM drug interactions document of September 2016, pp. 62-63
CLOZAPINE RxNorm: 2626 ATC: N05AH02 |
BENZODIAZEPINES AND RELATED CLASS CODE: N05-001 |
Accrued risk of drop in blood pressure with respiratory and/or cardiac arrest. |
Take into account |
CLOZAPINE RxNorm: 2626 ATC: N05AH02 |
CARBAMAZEPINE RxNorm: 2002 ATC: N03AF01 |
Risk of increase of the serious hematological effects |
Not recommended |
CLOZAPINE RxNorm: 2626 ATC: N05AH02 |
CIPROFLOXACIN RxNorm: 2551 ATC: J01MA02 S01AE03 S02AA15 S03AA07 |
Increase of the concentrations of clozapine with risk of overdose, due to decrease of its hepatic metabolism by the ciprofloxacin |
Precaution for use Clinical monitoring and possible reduction of the dosage of the clozapine during the treatment with the ciprofloxacin and after it is stopped. |
CLOZAPINE RxNorm: 2626 ATC: N05AH02 |
FLUVOXAMINE RxNorm: 42355 ATC: N06AB08 |
Increase of the plasma concentrations of clozapine with signs of overdose |
Precaution for use Increased clinical monitoring; if needed, adjustment of the dosage of the clozapine during the treatment with the fluvoxamine and after it is stopped. |
CLOZAPINE RxNorm: 2626 ATC: N05AH02 |
PHENYTOIN (AND, BY EXTRAPOLATION, FOSPHENYTOIN) CLASS CODE: N03AB |
Risk of ineffectiveness of the antipsychotic treatment (decrease of the plasma concentrations of clozapine due to increase of its hepatic metabolism) |
Precaution for use Clinical monitoring and possible increase of the dosage of the clozapine during the treatment with the phenytoin. |
CLOZAPINE RxNorm: 2626 ATC: N05AH02 |
RIFAMPICIN RxNorm: 9384 ATC: J04AB02 |
Risk of ineffectiveness of the antipsychotic treatment (decrease of the plasma concentrations of clozapine due to increase of its hepatic metabolism) |
Precaution for use Clinical monitoring and possible increase of the dosage of the clozapine during the treatment with the rifampicin. |


Enter parts of a card's name, text, type, race, class, or rarity
Enter multiple terms seperated with spaces to only find matches to every term entered
Click on a card to read more about it
SourcesWe get card data from hearthstonejson.com
When you click on a card, we open the corresponding hearthstone.gamepedia.com page
AboutV.1.1.1
Made by Justin Golden
Contact me at justingolden@rgbstudios.org


Unicode In Python, Completely Demystified
What does this mean?
UnicodeDecodeError: 'ascii' codec
can't decode byte 0xc4 in position
10: ordinal not in range(128)
- Never seen this exception?
- Seen it and sort of fixed it?
- This is a confusing error
- If you've never seen this before but want to write Python code, this talk is for you
- If you've seen this before and have no idea how to solve it, this talk is for you
- This is a really confusing error if you don't know what Python is trying to do for you; this talk aims to clarify
Overview
- The truth about strings in Python
- The magic of Unicode
- How to work with Unicode in Python 2
- fundamental concept
- example code
- Glimpse at Unicode in Python 3
- Ask lots of questions
- Corrections?
Why use Unicode in Python?
- handle non-English languages
- use 3rd party modules
- accept arbitrary text input
- you will love Unicode
- you will hate Unicode
Web application
[form input] => [Python] => [HTML]
- accepts input as text
- writes text to an html file
Interacting with a database
[read from DB] => [Python] => [write to DB]
- accepts input as text
- writes text to the database
Command line script
[text files] => [Python] => [stdout]
- accepts input as text
- writes text to stdout or other files
Let's open a UTF-8 file
Ivan Krstić
>>> f = open('/tmp/ivan_utf8.txt', 'r')
>>> ivan_utf8 = f.read()
>>> ivan_utf8
'Ivan Krsti\xc4\x87'
- Ivan Krstić is the director of security architecture at OLPC
- pretend you opened this in a desktop text editor (nothing fancy like vi)
and you saved it in UTF-8 format. This might not have been the default.
- now you are opening the file in Python
What is it?
>>> ivan_utf8
'Ivan Krsti\xc4\x87'
>>> type(ivan_utf8)
<type 'str'>
- a string of bytes!
- 1 byte = 8 bits
- A bit is either "0" or "1"
Text is encoded
Ivan Krstić
- This string is encoded in UTF-8 format
- An encoding is a set of rules that assign numeric values to each text character
- Notice the c with a hachek takes up 2 bytes
- Other encodings might represent ć differently
- Python stdlib supports over 100 encodings
- c with a hachek is part of the Croatian language
- each encoding has its own byte representation of text
ASCII
| char |
I |
v |
a |
n |
| hex |
\x49 |
\x76 |
\x61 |
\x6e |
| decimal |
73 |
118 |
97 |
110 |
- UTF-8 is an extension of ASCII
- created in 1963 as the American Standard Code for Information Interchange
- each character is 1 byte
- 128 possible characters
ASCII
| char |
K |
r |
s |
t |
i |
ć |
| hex |
\x4b |
\x76 |
\x72 |
\x74 |
\x69 |
nope |
| decimal |
75 |
118 |
114 |
116 |
105 |
sorry |
- ć cannot be encoded as ASCII
- d'oh!
built-in string types
(Python 2)
<type 'basestring'>
|
+--<type 'str'>
|
+--<type 'unicode'>
Important methods
s.decode(encoding)
- <type 'str'> to <type 'unicode'>
u.encode(encoding)
- <type 'unicode'> to <type 'str'>
The problem
Can't my Python text remain encoded?
Ivan Krstić
>>> ivan_utf8
'Ivan Krsti\xc4\x87'
>>> len(ivan_utf8)
12
>>> ivan_utf8[-1]
'\x87'
- isn't encoded text good enough? No decoding errors anywhere
- is the length of Ivan Krstić really 12?
- what happens if the text were encoded differently?
- is the last character really hexadecimal 87? Is that what I wanted?
Unicode is more accurate
Ivan Krstić
>>> ivan_utf8
'Ivan Krsti\xc4\x87'
>>> ivan_uni = ivan_utf8.decode('utf-8')
>>> ivan_uni
u'Ivan Krsti\u0107'
>>> type(ivan_uni)
<type 'unicode'>
Unicode is more accurate
Ivan Krstić
>>> ivan_uni
u'Ivan Krsti\u0107'
>>> len(ivan_uni)
11
>>> ivan_uni[-1]
u'\u0107'
Unicode, what is it?
- a way to represent text without bytes
- unique number (code point) for each character of every language
- supports all major languages written today
- defines over 1 million code points
- supports...
- European alphabets
- Middle Eastern right-to-left
- scripts of Asia
- technical math symbols
- et cetera
Unicode, the ideal
If ASCII, UTF-8, and other byte strings are "text" ...
...then Unicode is "text-ness";
it is the abstract form of text
Unicode is a concept
| letter |
Unicode Code Point |
| ć |
\u0107 |
- to save Unicode to disk you have to encode it
| Byte Encodings |
| letter |
UTF-8 |
UTF-16 |
Shift-JIS |
| ć |
\xc4\x87 |
\x07\x01 |
\x85\xc9 |
Unicode Transformation Format
UTF-16
>>> ab.encode('utf-16')
'\xff\xfeA\x00B\x00'
- variable byte representation
- 2 bytes (16 bits) to 4 bytes per code point
- optimized for languages residing in the 2 byte character range
Unicode Transformation Format
UTF-32
- fixed width byte representation, fastest
- 4 bytes (32 bits) per code point
- not supported in Python
Unicode chart
Ian Albert's Unicode chart
- this guy decided to print the entire Unicode chart
- 1,114,112 code points
- 6 feet by 12 feet
- 22,017 × 42,807 pixels
Unicode chart
Ian Albert's Unicode chart. Says it only cost him $20 at Kinko's but he was pretty sure they rang him up wrong.
Unicode chart 50 %
Unicode chart 100 %
Decoding text into Unicode
- It's mostly automatic
- this happens a lot in 3rd party modules
- Python will try to decode it for you
Python magic
>>> ivan_uni
u'Ivan Krsti\u0107'
>>> f = open('/tmp/ivan.txt', 'w')
>>> f.write(ivan_uni)
Traceback (most recent call last):
...
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0107' in position 10: ordinal not in range(128)
Python magic, revealed
>>> ivan_uni
u'Ivan Krsti\u0107'
>>> f = open('/tmp/ivan.txt', 'w')
>>> import sys
>>> f.write(ivan_uni.encode(
... sys.getdefaultencoding()))
...
Traceback (most recent call last):
...
UnicodeEncodeError: 'ascii' codec can't encode character u'\u0107' in position 10: ordinal not in range(128)
Gasp!

- No!
- your code will not work on other Python installations
- more trouble than it's worth
Solution
- Decode early
- Unicode everywhere
- Encode late
1. Decode early
Decode to <type 'unicode'> ASAP
>>> def to_unicode_or_bust(
... obj, encoding='utf-8'):
... if isinstance(obj, basestring):
... if not isinstance(obj, unicode):
... obj = unicode(obj, encoding)
... return obj
...
>>>
detects if object is a string and if so converts to unicode, if not already.
2. Unicode everywhere
>>> to_unicode_or_bust(ivan_uni)
u'Ivan Krsti\u0107'
>>> to_unicode_or_bust(ivan_utf8)
u'Ivan Krsti\u0107'
>>> to_unicode_or_bust(1234)
1234
3. Encode late
Encode to <type 'str'> when you write to disk or print
>>> f = open('/tmp/ivan_out.txt','w')
>>> f.write(ivan_uni.encode('utf-8'))
>>> f.close()
Shortcuts
codecs.open()
>>> import codecs
>>> f = codecs.open('/tmp/ivan_utf8.txt', 'r',
... encoding='utf-8')
...
>>> f.read()
u'Ivan Krsti\u0107'
>>> f.close()
Shortcuts
codecs.open()
>>> import codecs
>>> f = codecs.open('/tmp/ivan_utf8.txt', 'w',
... encoding='utf-8')
...
>>> f.write(ivan_uni)
>>> f.close()
Python 2 Unicode incompatibility
- some 3rd party modules incompatible
- some builtin modules are incompatible
Python 2 Unicode workarounds
- momentarily encode as UTF-8, then decode immediately
- csv documentation shows you how to do this
>>> ivan_bytes = ivan_uni.encode('utf-8')
>>> # do stuff
>>> ivan_bytes.decode('utf-8')
u'Ivan Krsti\u0107'
The BOM
- sometimes at beginning of files
- Byte Order Mark
- essential for UTF-16, UTF-32 files
- Little Endian (MSB first)
- Big Endian (MSB last)
- UTF-8 BOM just says "I am UTF-8"
Detecting the BOM
>>> f = open('/tmp/ivan_utf16.txt','r')
>>> sample = f.read(4)
>>> sample
'\xff\xfeI\x00'
- BOM can be 2, 3, or 4 bytes long
Detecting the BOM
>>> import codecs
>>> (sample.startswith(codecs.BOM_UTF16_LE) or
... sample.startswith(codecs.BOM_UTF16_BE))
...
True
>>> sample.startswith(codecs.BOM_UTF8)
False
Do I have to remove the BOM?
- maybe
- decoding UTF-16 removes the BOM automatically
- but not UTF-8
- unless you say s.decode('utf-8-sig')
- available since Python 2.5
How do you guess an encoding?
- There is no reliable way to guess an encoding
- BOM gives you a clue
- Content-type header usually contains charset=...
- chardet module tries
- UTF-8 is your best guess
Summary of problems
- default Python 2 encoding is 'ascii'
- files might contain a BOM
- not all Python 2 internals support Unicode
- You can't reliably guess an encoding
Summary of solutions
- Encode early, Unicode everywhere, decode late
- write wrappers for modules that don't like Unicode
- Always put Unicode in unit tests
- UTF-8 is the best guess for an encoding
- use the BOM to guess encodings
- or use chardet.detect()
Unicode in Python 3
- they fixed Unicode!
- <type 'str'> is a Unicode object
- separate <type 'bytes'> type
- all builtin modules support Unicode
- no more u'text' syntax
Unicode in Python 3
- open() takes an encoding argument, like codecs.open()
- default encoding is UTF-8 not ASCII
- Tries to guess the file encoding
- You will still need to declare encodings


{{> ../layouts/head.html }} Toolbar (with no Title Eyebrow) Application Menu Trigger My Toolbar Text Menu Item One Item Two Item Three More Items Item Four Item Five Item Six Settings Trash Option One Option Two Option Three More Options Option Four Option Five Option Six {{> ../layouts/footer.html }}