Configuration Guidelines¶
The purpose of this document is to detail the basic configuration steps required for running WSGI applications with mod_wsgi.
The WSGIScriptAlias Directive¶
Configuring Apache to run WSGI applications using mod_wsgi is similar to how Apache is configured to run CGI applications. To streamline this task however, an additional configuration directive called WSGIScriptAlias is provided. Like the ScriptAlias directive for CGI scripts, the mod_wsgi directive combines together a number of steps so as to reduce the amount of configuration required.
The first way of using the WSGIScriptAlias directive to indicate the WSGI application to be used, is to associate a WSGI application against a specific URL prefix:
WSGIScriptAlias /myapp /usr/local/wsgi/scripts/myapp.wsgi
The last option to the directive in this case must be a full pathname to the actual code file containing the WSGI application. A trailing slash should never be added to the last option when it is referring to an actual file.
The WSGI application contained within the code file specified should be called ‘application’. For example:
def application(environ, start_response):
status = '200 OK'
output = b'Hello World!'
response_headers = [('Content-type', 'text/plain'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]
Note that an absolute pathname to a WSGI script file must be provided. It is not possible to specify an application by Python module name alone. A full path is used for a number of reasons, the main one being so that all the Apache access controls can still be applied to indicate who can actually access the WSGI application. Because these access controls will apply, if the WSGI application is located outside of any directories already known to Apache, it will be necessary to tell Apache that files within that directory can be used. To do this the Directory directive must be used:
<Directory /usr/local/wsgi/scripts>
Order allow,deny
Allow from all
</Directory>
Note that Apache access control directives such as Order and Allow should nearly always be applied to Directory and never to a Location. Adding them to a Location would not be regarded as best practice and would potentially weaken the security of your Apache server, especially where the Location was for ‘/’.
As for CGI scripts and the ScriptAlias directive, it is not necessary to have used the Options directive to enable the ExecCGI directive. This is because it is automatically implied from the use of the WSGIScriptAlias directive that the script must be executable.
For WSGIScriptAlias, to mount a WSGI application at the root of the web site, simply use ‘/’ as the mount point:
WSGIScriptAlias / /usr/local/wsgi/scripts/myapp.wsgi
If you need to mount multiple WSGI applications, the directives can be listed more than once. When this occurs, those occuring first are given precedence. As such, those which are mounted at what would be a sub URL to another WSGI application, should always be listed earlier:
WSGIScriptAlias /wiki /usr/local/wsgi/scripts/mywiki.wsgi
WSGIScriptAlias /blog /usr/local/wsgi/scripts/myblog.wsgi
WSGIScriptAlias / /usr/local/wsgi/scripts/myapp.wsgi
The second way of using the WSGIScriptAlias directive is to use it to map to a directory containing any number of WSGI applications:
WSGIScriptAlias /wsgi/ /usr/local/wsgi/scripts/
When this is used, the next part of the URL after the URL prefix is used to identify which WSGI application script file within the target directory should be used. Both the mount point and the directory path must have a trailing slash.
If you want WSGI application scripts to use an extension, but don’t wish to have that extension appear in the URL, then it is possible to use the WSGIScriptAliasMatch directive instead:
WSGIScriptAliasMatch ^/wsgi/([^/]+) /usr/local/wsgi/scripts/$1.wsgi
In this case, any path information appearing after the URL prefix, will be mapped to a corresponding WSGI script file in the directory, but with a ‘.wsgi’ extension. The extension would though not need to be included in the URL.
In all ways that the WSGIScriptAlias can be used, the target script is not required to have any specific extension type and in particular it is not necessary to use a ‘.py’ extension just because it contains Python code. Because the target script is not treated exactly like a traditional Python module, if an extension is used, it is recommended that ‘.wsgi’ be used rather than ‘.py’.
The Apache Alias Directive¶
Although the WSGIScriptAlias directive is provided, the traditional Alias directive can still be used to enable execution of WSGI applications for specific URLs. The equivalent such configuration for:
WSGIScriptAlias /wsgi/ /usr/local/wsgi/scripts/
<Directory /usr/local/wsgi/scripts>
Order allow,deny
Allow from all
</Directory>
using the Alias directive would be:
Alias /wsgi/ /usr/local/wsgi/scripts/
<Directory /usr/local/wsgi/scripts>
Options ExecCGI
SetHandler wsgi-script
Order allow,deny
Allow from all
</Directory>
The additional steps required in this case are to enable the ability to execute CGI like scripts using the Options directive and define the Apache handler as ‘wsgi-script’.
If wishing to hold a mixture of static files, normal CGI scripts and WSGI applications within the one directory, the AddHandler directive can be used instead of the SetHandler directive to distinguish between the various resource types based on resource extension:
Alias /wsgi/ /usr/local/wsgi/scripts/
<Directory /usr/local/wsgi/scripts>
Options ExecCGI
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
Order allow,deny
Allow from all
</Directory>
For whatever extension you use to identify a WSGI script file, ensure that you do not have a conflicting definition for that extension marking it as a CGI script file. For example, if you previously had all ‘.py’ files being handled as ‘cgi-script’, consider disabling that before marking ‘.py’ file as then being handled as ‘wsgi-script’ file in same context. If both are defined in same context, which is used will depend on the order of the directives and the wrong handler may be selected.
Because an extension is required to determine whether a script should be processed as a CGI script versus a WSGI application, the extension would need to appear in the URL. If this is not desired, then add the MultiViews option and MultiviewsMatch directive:
Alias /wsgi/ /usr/local/wsgi/scripts/
<Directory /usr/local/wsgi/scripts>
Options ExecCGI MultiViews
MultiviewsMatch Handlers
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
Order allow,deny
Allow from all
</Directory>
Adding of MultiViews in this instance and allowing multiviews to match Apache handlers will allow the extension to be dropped from the URL. Provided that for each resource there is only one alternative, Apache will then automatically select either the CGI script or WSGI application as appropriate for that resource. Use of multiviews in this way would make it possible to transparently migrate from CGI scripts to WSGI applications without the need to change any URLs.
A benefit of using the AddHandler directive as described above, is that it also allows a directory index page or directory browsing to be enabled for the directory. To enable directory browsing add the Indexes option:
Alias /wsgi/ /usr/local/wsgi/scripts/
<Directory /usr/local/wsgi/scripts>
Options ExecCGI Indexes
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
Order allow,deny
Allow from all
</Directory>
If a directory index page is enabled, it may refer to either a static file, CGI or WSGI application. The DirectoryIndex directive should be used to designate what should be used for the index page:
Alias /wsgi/ /usr/local/wsgi/scripts/
<Directory /usr/local/wsgi/scripts>
Options ExecCGI Indexes
DirectoryIndex index.html index.wsgi index.cgi
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
Order allow,deny
Allow from all
</Directory>
Using AddHandler or SetHandler to configure a WSGI application can also be done from within the ‘.htaccess’ file located within the directory which a URL maps to. This will however only be possible where the directory has been enabled to allow these directives to be used. This would be done using the AllowOverride directive and enabling FileInfo for that directory. It would also be necessary to allow the execution of scripts using the Options directive by listing ExecCGI:
Alias /site/ /usr/local/wsgi/site/
<Directory /usr/local/wsgi/site>
AllowOverride FileInfo
Options ExecCGI MultiViews Indexes
MultiviewsMatch Handlers
Order allow,deny
Allow from all
</Directory>
This done, the ‘.htaccess’ file could then contain:
DirectoryIndex index.html index.wsgi index.cgi
AddHandler cgi-script .cgi
AddHandler wsgi-script .wsgi
Note that the DirectoryIndex directive can only be used to designate a simple WSGI application which returns a single page for when the URL maps to the actual directory. Because the DirectoryIndex directive is not applied when the URL has additional path information beyond the leading portion of the URL which mapped to the directory, it cannot be used as a means of making a complex WSGI application responding to numerous URLs appear at the root of a server.
When using the AddHandler directive, with WSGI applications identified by the extension of the script file, the only way to make the WSGI application appear as the root of the server is to perform on the fly rewriting of the URL internal to Apache using mod_rewrite. The required rules for mod_rewrite to ensure that a WSGI application, implemented by the script file ‘site.wsgi’ in the root directory of the virtual host, appears as being mounted on the root of the virtual host would be:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ /site.wsgi/$1 [QSA,PT,L]
Do note however that when the WSGI application is executed for a request the ‘SCRIPT_NAME’ variable indicating what the mount point of the application was will be ‘/site.wsgi’. This will mean that when a WSGI application constructs an absolute URL based on ‘SCRIPT_NAME’, it will include ‘site.wsgi’ in the URL rather than it being hidden. As this would probably be undesirable, many web frameworks provide an option to override what the value for the mount point is. If such a configuration option isn’t available, it is just as easy to adjust the value of ‘SCRIPT_NAME’ in the ‘site.wsgi’ script file itself:
def _application(environ, start_response):
# The original application.
...
import posixpath
def application(environ, start_response):
# Wrapper to set SCRIPT_NAME to actual mount point.
environ['SCRIPT_NAME'] = posixpath.dirname(environ['SCRIPT_NAME'])
if environ['SCRIPT_NAME'] == '/':
environ['SCRIPT_NAME'] = ''
return _application(environ, start_response)
This wrapper will ensure that ‘site.wsgi’ never appears in the URL as long as it wasn’t included in the first place and that access was always via the root of the web site instead.
Application Configuration¶
If it is necessary or desired to be able to pass configuration information through to a WSGI application from the Apache configuration file, then the SetEnv directive can be used:
WSGIScriptAlias / /usr/local/wsgi/scripts/demo.wsgi
SetEnv demo.templates /usr/local/wsgi/templates
SetEnv demo.mailhost mailhost
SetEnv demo.debugging 0
Any such variables added using the SetEnv directive will be automatically added to the WSGI environment passed to the application when executed.
Note that the WSGI environment is passed upon each request to the application in the ‘environ’ argument of the application object. This environment is totally unrelated to the process environment which is kept in ‘os.environ’. The SetEnv directive has no effect on ‘os.environ’ and there is no way through Apache configuration directives to affect what is in the process environment.
If needing to dynamically set variables based on some aspects of the request itself, the RewriteRule directive may also be useful in some cases as an avenue to set application configuration variables.
For example, to enable additional debug only when the client is connecting from the localhost, the following might be used:
SetEnv demo.debugging 0
RewriteEngine On
RewriteCond %{REMOTE_ADDR} ^<IP_ADDRESS>$
RewriteRule . - [E=demo.debugging:1]
More elaborate schemes involving RewriteMap could also be employed.
Where SetEnv and RewriteRule are insufficient, then any further application configuration should be injected into an application using a WSGI application wrapper within the WSGI application script file:
def _application(environ, start_response):
...
def application(environ, start_response):
if environ['REMOTE_ADDR'] in ['<IP_ADDRESS>']:
environ['demo.debugging'] = '1'
return _application(environ, start_response)
User Authentication¶
As is the case when using CGI scripts with Apache, authorisation headers are not passed through to WSGI applications. This is the case, as doing so could leak information about passwords through to a WSGI application which should not be able to see them when Apache is performing authorisation.
Unlike CGI scripts however, when using mod_wsgi, the WSGIPassAuthorization
directive can be used to control whether HTTP authorisation headers are
passed through to a WSGI application in the HTTP_AUTHORIZATION
variable of the WSGI application environment when the equivalent HTTP
request headers are present. This option would need to be set to On
if the WSGI application was to handle authorisation rather than Apache
doing it:
WSGIPassAuthorization On
If Apache is performing authorisation and not the WSGI application, a WSGI
application can still find out what type of authorisation scheme was used
by checking the variable AUTH_TYPE
of the WSGI application
environment. The login name of the authorised user can be determined by
checking the variable REMOTE_USER
.
Hosting Of Static Files¶
When the WSGIScriptAlias directive is used to mount an application at the root of the web server for a host, all requests for that host will be processed by the WSGI application. If is desired for performance reasons to still use Apache to host static files associated with the application, then the Alias directive can be used to designate the files and directories which should be served in this way:
Alias /robots.txt /usr/local/wsgi/static/robots.txt
Alias /favicon.ico /usr/local/wsgi/static/favicon.ico
AliasMatch /([^/]*\.css) /usr/local/wsgi/static/styles/$1
Alias /media/ /usr/local/wsgi/static/media/
<Directory /usr/local/wsgi/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /usr/local/wsgi/scripts/myapp.wsgi
<Directory /usr/local/wsgi/scripts>
Order allow,deny
Allow from all
</Directory>
When listing the directives, list those for more specific URLs first. In practice this shouldn’t actually be required as the Alias directive should take precedence over WSGIScriptAlias, but good practice all the same.
Do note though that if using Apache 1.3, the Alias directive will only take precedence over WSGIScriptAlias if the mod_wsgi module is loaded prior to the mod_alias module. To ensure this, the LoadModule/AddModule directives are used.
Note that there is never a need to use SetHandler to reset the Apache content handler back to ‘None’ for URLs mapped to static files. That this is a requirement for mod_python is a short coming in mod_python, do not do the same thing for mod_wsgi.
Limiting Request Content¶
By default Apache does not limit the amount of data that may be pushed to the server via a HTTP request such as a POST. That this is the case means that malicious users could attempt to overload a server by attempting to upload excessively large amounts of data.
If a WSGI application is not designed properly and doesn’t limit this itself in some way, and attempts to load the whole request content into memory, it could cause an application to exhaust available memory.
If it is unknown if a WSGI application properly protects itself against such attempts to upload excessively large amounts of data, then the Apache LimitRequestBody directive can be used:
LimitRequestBody 1048576
The argument to the LimitRequestBody should be the maxumum number of bytes that should be allowed in the content of a request.
When this directive is used, mod_wsgi will perform the check prior to actually passing a request off to a WSGI application. When the limit is exceeded mod_wsgi will immediately return the HTTP 413 error response without even invoking the WSGI application to handle the request. Any request content will not be read as the client connection will then be closed.
Note that the HTTP 413 error response page will be that defined by Apache, or as specified by the Apache ErrorDocument directive for that error type.
Defining Application Groups¶
By default each WSGI application is placed into its own distinct application group. This means that each application will be given its own distinct Python sub interpreter to run code within. Although this means that applications will be isolated and cannot in general interfere with the Python code components of each other, each will load its own copy of all Python modules it requires into memory. If you have many applications and they use a lot of different Python modules this can result in large process sizes.
To avoid large process sizes, if you know that applications within a directory can safely coexist and run together within the same Python sub interpreter, you can specify that all applications within a certain context should be placed in the same application group. This is indicated by using the WSGIApplicationGroup directive:
<Directory /usr/local/wsgi/scripts>
WSGIApplicationGroup admin-scripts
Order allow,deny
Allow from all
</Directory>
The argument to the WSGIApplicationGroup directive can in general be any unique name of your choosing, although there are also a number of special values which you can use as well. For further information about these special values see the more detailed documentation on the WSGIApplicationGroup directive. Two of the special values worth highlighting are:
%{GLOBAL}
The application group name will be set to the empty string.
Any WSGI applications in the global application group will always be executed within the context of the first interpreter created by Python when it is initialised. Forcing a WSGI application to run within the first interpreter can be necessary when a third party C extension module for Python has used the simplified threading API for manipulation of the Python GIL and thus will not run correctly within any additional sub interpreters created by Python.
%{ENV:variable}
The application group name will be set to the value of the named environment variable. The environment variable is looked-up via the internal Apache notes and subprocess environment data structures and (if not found there) via getenv() from the Apache server process.
In an Apache configuration file, environment variables accessible
using the %{ENV}
variable reference can be setup by using directives
such as SetEnv and RewriteRule.
For example, to group all WSGI scripts for a specific user when using mod_userdir within the same application group, the following could be used:
RewriteEngine On
RewriteCond %{REQUEST_URI} ^/~([^/]+)
RewriteRule . - [E=APPLICATION_GROUP:~%1]
<Directory /home/*/public_html/wsgi-scripts/>
Options ExecCGI
SetHandler wsgi-script
WSGIApplicationGroup %{ENV:APPLICATION_GROUP}
</Directory>
Defining Process Groups¶
By default all WSGI applications will run in what is called ‘embedded’ mode. That is, the applications are run within Python sub interpreters hosted within the Apache child processes. Although this results in the best performance possible, there are a few down sides.
First off, embedded mode is not recommended where you are not adept at tuning Apache. This is because the default MPM settings are never usually suitable for Python web applications, instead being biased towards static file serving and PHP applications. If you run embedded mode without tuning the MPM settings, you can experience problems with memory usage, due to default number of processes being too many, and can also experience load spikes, due to how Apache performs lazy creation of processes to meet demand.
Secondly, embedded mode would not be suitable for shared web hosting environments as all applications run as the same user and through various means could interfere with each other.
Running multiple Python applications within the same process, even if separated into distinct sub interpreters also presents other challenges and problems. These include problems with Python extension modules not being implemented correctly such that they work from a secondary sub interpreter, or when used from multiple sub interpreters at the same time.
Where multiple applications, potentially owned by different users, need to be run, ‘daemon’ mode of mod_wsgi should instead be used. Using daemon mode, each application can be delegated to its own dedicated daemon process running just the WSGI application, with the Apache child processes merely acting as proxies for delivering the requests to the application. Any static files associated with the application would still be served up by the Apache child processes to ensure best performance possible.
To denote that a daemon process should be created the WSGIDaemonProcess directive is used. The WSGIProcessGroup directive is then used to delegate specific WSGI applications to execute within that daemon process:
WSGIDaemonProcess www.site.com threads=15 maximum-requests=10000
Alias /favicon.ico /usr/local/wsgi/static/favicon.ico
AliasMatch /([^/]*\.css) /usr/local/wsgi/static/styles/$1
Alias /media/ /usr/local/wsgi/static/media/
<Directory /usr/local/wsgi/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias / /usr/local/wsgi/scripts/myapp.wsgi
WSGIProcessGroup www.site.com
<Directory /usr/local/wsgi/scripts>
Order allow,deny
Allow from all
</Directory>
Where Apache has been started as the root
user, the daemon processes
can optionally be run as a user different to that which the Apache child
processes would normally be run as. The number of daemon processes making
up the process group and whether they are single or multithreaded can also
be controlled.
A further option which should be considered is that which dictates the maximum number of requests that a daemon process should be allowed to accept before the daemon process is shutdown and restarted. This should be used where there are problems with increasing memory use due to problems with the application itself or a third party extension module.
As a general recommendation it would probably be a good idea to use the maximum requests option when running large installations of packages such as Trac and MoinMoin. Any large web site based on frameworks such as Django, TurboGears and Pylons or applications which use a database backend may also benefit.
If an application does not shutdown cleanly when the maximum number of requests has been reached, it will be killed off after the shutdown timeout has expired. If this occurs on a regular basis you should run with more than a single daemon process in the process group such that the other process can still accept requests while the first is being restarted.
If the maximum requests option is not specified, then the daemon process will never expire and will only be restarted if Apache is restarted or the user explicitly signals it to restart.
For further information about the options that can be supplied to the WSGIDaemonProcess directive see the more detailed documentation for WSGIDaemonProcess. A few of the options which can be supplied to the WSGIDaemonProcess directive worth highlighting are:
user=name | user=#uid
Defines the UNIX user _name_ or numeric user _uid_ of the user that the daemon processes should be run as. If this option is not supplied the daemon processes will be run as the same user that Apache would run child processes and as defined by the User directive.
Note that this option is ignored if Apache wasn’t started as the root user, in which case no matter what the settings, the daemon processes will be run as the user that Apache was started as.
group=name | group=#gid
Defines the UNIX group _name_ or numeric group _gid_ of the primary group that the daemon processes should be run as. If this option is not supplied the daemon processes will be run as the same group that Apache would run child processes and as defined by the Group directive.
Note that this option is ignored if Apache wasn’t started as the root user, in which case no matter what the settings, the daemon processes will be run as the group that Apache was started as.
processes=num
Defines the number of daemon processes that should be started in this process group. If not defined then only one process will be run in this process group.
Note that if this option is defined as ‘processes=1’, then the WSGI environment attribute called ‘wsgi.multiprocess’ will be set to be True whereas not providing the option at all will result in the attribute being set to be False. This distinction is to allow for where some form of mapping mechanism might be used to distribute requests across multiple process groups and thus in effect it is still a multiprocess application. If you need to ensure that ‘wsgi.multiprocess’ is False so that interactive debuggers will work, simply do not specify the ‘processes’ option and allow the default single daemon process to be created in the process group.
threads=num
Defines the number of threads to be created to handle requests in each daemon process within the process group.
If this option is not defined then the default will be to create 15 threads in each daemon process within the process group.
maximum-requests=nnn
Defines a limit on the number of requests a daemon process should process before it is shutdown and restarted. Setting this to a non zero value has the benefit of limiting the amount of memory that a process can consume by (accidental) memory leakage.
If this option is not defined, or is defined to be 0, then the daemon process will be persistent and will continue to service requests until Apache itself is restarted or shutdown.
Note that the name of the daemon process group must be unique for the whole server. That is, it is not possible to use the same daemon process group name in different virtual hosts.
If the WSGIDaemonProcess directive is specified outside of all virtual host containers, any WSGI application can be delegated to be run within that daemon process group. If the WSGIDaemonProcess directive is specified within a virtual host container, only WSGI applications associated with virtual hosts with the same server name as that virtual host can be delegated to that set of daemon processes.
When WSGIDaemonProcess is associated with a virtual host, the error log associated with that virtual host will be used for all Apache error log output from mod_wsgi rather than it appear in the main Apache error log.
For example, if a server is hosting two virtual hosts and it is desired that the WSGI applications related to each virtual host run in distinct processes of their own and as a user which is the owner of that virtual host, the following could be used:
<VirtualHost *:80>
ServerName www.site1.com
CustomLog logs/www.site1.com-access_log common
ErrorLog logs/ww.site1.com-error_log
WSGIDaemonProcess www.site1.com user=joe group=joe processes=2 threads=25
WSGIProcessGroup www.site1.com
...
</VirtualHost>
<VirtualHost *:80>
ServerName www.site2.com
CustomLog logs/www.site2.com-access_log common
ErrorLog logs/www.site2.com-error_log
WSGIDaemonProcess www.site2.com user=bob group=bob processes=2 threads=25
WSGIProcessGroup www.site2.com
...
</VirtualHost>
When using the WSGIProcessGroup directive, the argument to the directive can be either one of two special expanding variables or the actual name of a group of daemon processes setup using the WSGIDaemonProcess directive. The meaning of the special variables are:
%{GLOBAL}
The process group name will be set to the empty string. Any WSGI applications in the global process group will always be executed within the context of the standard Apache child processes. Such WSGI applications will incur the least runtime overhead, however, they will share the same process space with other Apache modules such as PHP, as well as the process being used to serve up static file content. Running WSGI applications within the standard Apache child processes will also mean the application will run as the user that Apache would normally run as.
%{ENV:variable}
The process group name will be set to the value of the named environment variable. The environment variable is looked-up via the internal Apache notes and subprocess environment data structures and (if not found there) via getenv() from the Apache server process. The result must identify a named process group setup using the WSGIDaemonProcess directive.
In an Apache configuration file, environment variables accessible using the %{ENV} variable reference can be setup by using directives such as SetEnv and RewriteRule.
For example, to select which process group a specific WSGI application should execute within based on entries in a database file, the following could be used:
RewriteEngine On
RewriteMap wsgiprocmap dbm:/etc/httpd/wsgiprocmap.dbm
RewriteRule . - [E=PROCESS_GROUP:${wsgiprocmap:%{REQUEST_URI}}]
WSGIProcessGroup %{ENV:PROCESS_GROUP}
Note that the WSGIDaemonProcess directive and corresponding features are not available on Windows or when running Apache 1.3.


Fill in and submit the form, then reload the page to see how autocomplete works.
Notice that autocomplete is "on for the form, but "off" for the e-mail field.


Alex Spedding
Portfolio
Alex Spedding
Portfolio
Mobile Navigation
Main Portfolio
Game Jam Entries
University Projects
Academic Work
Teaching
GIF Gallery
External Links
Twitter
itch.io
GitHub
LinkedIn


---
license: |
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
layout: post
---
{{page.img-architecture.title}}
{{page.img-plan.title}}
{{item.description}}


MIT Computer Science and Artificial Intelligence Laboratory
The Stata Center, Building 32-G744
32 Vassar Street
Cambridge, MA 02139
Email<EMAIL_ADDRESS>WWW Home Page: http://www.cag.lcs.mit.edu/~rinard
Work Phone:<PHONE_NUMBER>
Work Fax:<PHONE_NUMBER>
I am a Professor in the Department of Electrical Engineering and Computer Science at the Massachusetts Institute of Technology, and a member of the Computer Science and Artificial Intelligence Laboratory .
The Flex Program Analysis and Compilation System
A program analysis and compilation system written in Java for Java,
complete with extensive backend, thread, memory management, and
runtime support.
The SPAN Pointer Analysis Package
A pointer analysis package for both multithreaded and
sequential C programs. The package is integrated with the
SUIF Compiler Infrastructure and has been used by several
research groups to support a variety of projects.
The Jade Programming Language
A portable, implicitly parallel programming language that
runs on wide range of machines, from tightly-coupled shared-memory
multiprocessors to geographically distributed networks of
workstations.
I received the Sc.B. in Computer Science, Magna cum Laude and with Honors, from Brown University in 1984. I spent the next several years working for two startup companies, Ikan Systems and Polygen Corporation. I then entered the Ph.D. program in Computer Science at Stanford University, and received the Ph.D. in Computer Science from Stanford University in 1994. I joined the Computer Science Department at the University of California, Santa Barbara as an Assistant Professor in 1994, then moved to MIT as an Assistant Professor in 1997. I was promoted to Associate Professor in 2000.
Much of the research that my group does is supported by the Defense Advanced Research Projects Agency under DARPA/AFRL Contract F33615-00-C-1692 and by the National Science Foundation under grants CCR00-86154 and CCR00-63513.
I have developed a set of lecture notes for teaching an undergraduate course in operating systems. These notes cover the important basic concepts in operating systems, presented in a sequence suitable for a first course in operating systems.
I have written a quick guide to including Adobe Illustrator and Microsoft PowerPoint files into LaTex documents. I hope it saves you some time!


A project I've been working on for the last few weeks. A personal assistant/AI chatbot program that assists with tasks.
Download Here (Windows)A mockup I made for a commercial project I'm working on. Live version unavaliable.
One of my first commercial projects. Handled everything for the customer from setting up the domain and hosting to designing the theme and building the website.
Check it outA website I did for a family friend, once again handled everything from registering the domain to setting up the hosting, as well as developed a few custom plugins for the client.
Check it out


{% extends 'email_template.html' %} {% block content %}
Hello {{ name }},
Congratulations! Your visiting request to visit the virtual Houston ARTCC was approved by a senior staff member! We are happy to welcome you to our family and hope you enjoy your time here.
Teamspeak is Houston ARTCC's primary method of voice communications. You are required to be in the Teamspeak server while controlling.
Discord is Houston's secondary method of communications. It is used for text discussions and occasionally for training sessions if your mentor or instructor wishes to see your screen.
To join our server, download and install Discord by visiting discord.com. Once you're logged in, visit this link, which will automatically open Discord and prompt you to join the server.
VATSIM Sync is used across Teamspeak and Discord to sync permissions and roles with rating changes. It is recommended that you set it up with both services. More instructions can be found at vatsimsync.com.
The main website, found at zhuartcc.org, is a central tool used for scheduling training, signing up for events, and downloading and viewing important documents. Your account should be automatically activated but if you are experiencing any issues reach out to<EMAIL_ADDRESS>or<EMAIL_ADDRESS>We also have an Information Display System, which displays important information to controllers while on duty. It is highly encouraged that you use this tool while controlling to keep yourself and other controllers up to date on any procedures.
To schedule a training session, log in to the main website and go to the Training Center, which can be found by clicking on your name in the top right. Here you will see all training sessions, previous and scheduled, and will also be able to manage training requests. Once you submit a training request, a member of the training team will accept your request and a session will be automatically scheduled.
If you have any questions regarding the training process or if you have any trouble scheduling training, please contact the Training Administrator at<EMAIL_ADDRESS>Again, on behalf of the entire staff team at Houston, welcome to the vZHU family!
{% endblock %}


STARSHIP TROOPERS (1997) A Film Review by Ted Prigge Copyright 1997 Ted Prigge
Director: Paul Verhoeven Writer: Edward Neumeier (based on the novel by Robert A. Heinlein) Starring: Casper Van Dien, Dina Meyer, Denise Richards, Neil Patrick Harris, Patrick Muldoon, Jake Busey, Michael Ironside, Clancy Brown, Seth Gilliam, Marshall Bell, Rue McClanahan
Sure, "Starship Troopers" is no "Star Wars," but it has enough fun-ass gore, cool futuristic satire, and hysterically bad 90210-esque melodrama to keep me interested and satisfied for the full time. I mean, sure it's jam-packed with stupidity, gratuitous nudity, and zero characterization, but it's a sci-fi gorefest, and a fun one at that.
 And yes, there's some attempts at creating memorable characters, most who are slaughtered mercilessly by the razor-sharp legged bugs, and yeah, that fails pitifully, but the whole bit with the bugs, which takes up most of the last half of the film, is what we came to see, and the film knows it.
The film brings us a bunch of pretty Spelling-ites...and Neil Patrick Harris (who's the biggest name in the no-name cast), who interact with one another during the film. The protagonist is Johnny Rico (Casper Van Dien), who is dating the hot Carmen (Denise Richards), who is crazy over him, but soon falls for the hunky Zander (Patrick Muldoon, from "Melrose Place"), who are both going to be pilots in the army. Of course, she still loves Johnny, but she can never see him, even if he joins the army to be sorta near her. Soon Johnny finds that the chick from high school who had a crush on him, Diz (Dina Meyer), looks more attractive than she used to.
This all takes place in the far future, a fascist world of pure high tech-ness, where we hear about televised executions, public beatings, and about obtaining citizenship. The film presents some of it in the fashion of a Riefenstahl-esque bit of propoganda that goes on throughout the film, showing people working hard, and glorifying the deadly marines, even when they're being torn limb by limb by the bugs. This satire is one of the saving graces of the film.
For the first hour, we get the aforementioned melodrama, as well as the whole spiel of boot camp, where the drill sergeant (Clancy Brown, who obviosuly took notes from R. Lee Ermey about how to act like one) trains them in horribly nasty training, sometimes even wounding them (he breaks a guy's arm, and throws a dagger into another's hand). These aren't great, but they're cool to watch.
The big part which we were all waiting for comes at about the halfway part, and is hardly disappointing. The first time we see the bugs is cool, and we are predictably slaughtered mercilessly by them, as it takes about 5 guys shooting them for about a minute to take just one down.
Oh, and I suppose you're all wondering where Mr. Doogie Howser M.D. himself is included here?   Oh, and look for ex-"Golden Girl" Rue McClanahan as a biology teacher.
There's not a lot of humanity in the characters, and even scenes where a well-known character is killed isn't as moving as it should be. Sure when one of the four leads was killed, I was moved, but most people are just sent to war just to get killed, which kind of works as satire in a way, I suppose.
The real star of the film is the special effects, which are brilliant, man. Of course, this is from Paul Verhoeven, who is a genius with special effects that look realistic ("Total Recall" won an Oscar for them), and the ones in this look absolutely realistic. The bugs interact perfectly with the actors on the screen, creating a sense of realism. They become scarier just because they look so realistic, and when they attack a human, it looks just as realistic. My personal favorite use of this is when the giant base is surrounded by a literal sea of bugs.
The charm of "Starship Troopers" is that it's just plain fun and it knows it.  I mean, the shower sequence where we men and women bathing together is one of the funniest things I've ever seen. And the huge amount of gore (people being chomped in half, appendages laying around everywhere, etc, etc, etc) is just awesome. And how he pays homages to everything from Riefenstahl's "Triumph of the Will" to his earlier "Total Recall" is awesome (Verhoeven staple Michael Ironside plays a one-armed general or sergeant or something, and he lost both his arms in "Total Recall").
There's a kind of campy fun to watching all these Spelling-ites sent to a far and away place to be slaughtered that satisfies something in ourselves. And even while "Starship Troopers" might be about as dumb as Forrest Gump himself, or not even follow the novel very well (I never read it anyway), it's still a bitching time at the movies.
MY RATING (out of 4): ***
Homepage at: http://www.geocities.com/Hollywood/Hills/8335/
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


At 1,5$ / kmd it Was a great buy, so I went in. By 1$ / kmd it Was a better buy and I went all in. At 0,5$ / kmd. It Wasn't possible... And I had nothing to go in anymore and I start to cry (because Lack of Liquidity) .... At 0,3$ / kmd... I would wish I Could have $ to go more All in... And continue to cry (because Lack of Liquidity).
2


HTML Code:
/* full size card of dualgraph alarm data */
<dualgraph data="JSONDATA" ctitle="TITLE OF CARD" class="grid-item-wide" ></dualgraph>
/* container for use when topology data is present for region / zone locations on alarms */
<dualgraph-cntr data="JSONDATA" ctitle="TITLE OF CARD" class="grid-item-wide" ></dualgraph>
<dualgraph-wide data="JSONDATA" ctitle="TITLE OF CARD" class="grid-item-wide" ></dualgraph>
<dualgraph-small data="JSONDATA" ctitle="TITLE OF CARD" class="grid-item-wide" ></dualgraph>
example of JSONDATA:
{[
condition: "OPEN"
dimension: "process_name=nova-compute,component=nova-compute,hostname=devstack,service=compute",
history: undefined, /* history is filled in only after specific call to details modal is made...seperate call */
id: "021fdc7a-eb81-4d3e-8e10-58edc2f350aa",
lastCheck: "2015-07-23T14:10:17.000Z",
name: "Process Check",
severity: "HIGH",
state: "OK",
statusInfo: "http://somesite.com/this-alarm-info",
ui_status: "OK"
],
[...],
[...],
[...],
[...],
[...]};


0.9.6
- #300: Use
async
/await
to simplify init and mapagent request code.- API: Removed
IPromise<T>
. All references toIPromise<T>
now reference standardPromise<T>
to supportasync
/await
- API: Removed
- #302: Fix transparency toggler for maps with no external base layer configuration.
- API: Image/cursor file references moved from
utils/asset
toconstants/assets
0.9.5
- #250: Added support for toggling layer transparency (via Viewer Options)
- API: Added OL factories for creating extent and snap interactions
- #111: Ensure that scales of new views "snap" to the closest finite scale when viewing a tiled map
- #252: Fix tooltip queries being sent with points instead of pixel-buffered polygons
- #239:
- Support element target (New Window / Task Pane / Specific Frame) for commands
- Expanded extension property support for select Fusion widgets
- #22: Added sprite icon support. Any icon currently in the default Fusion image sprite is supported here.
- #276:
- New standardized path (
dist/stdassets
) for all content assets (images/icons/fonts/etc) - Command/Flyout icon settings are now respected.
- #295: Some helpers to ensure proper asset path resolution when using the npm module
- New standardized path (
- Legend now properly renders layers with multiple geometry styles
- Fix: Fusion MapMessage compat not spawning equivalent blueprint toast alerts
- #290: Fix flyout menus requiring double-click to re-open
- #277: Fix excessive blueprint toaster components created when using toast alerts
0.9.1
- Update blueprint to 1.21.0
- Update OpenLayers to 4.2.0
- Update React to 15.6.1
- #261: Now built with Webpack 3 with scope hoisting support for faster bundle loading and slightly smaller bundle size
- #251: Fix inability to interact with tooltip content
- #262: Fix refresh not rebuilding legend
- #246: Support for setting initial template element visibility when mounting
0.9
- Update blueprint to 1.17.1
- Update to React 15.5.4
- #210: Now using TypeScript 2.3.2
- Update OpenLayers to 4.1.1
- Now available as a npm module. Use the npm module if you need to customize the viewer with:
- Additional layout templates
- Custom script commands
- Removing un-used features from the viewer bundle
- Check out this example to see how the npm module is used
- #50: API documentation (provided by Typedoc)
- #125: New project landing page
- #189: Added support for Bing Maps as external base layers
- #121: Ported testing infrastructure over to jest
- #99: Now built using Webpack 2.x
- #124: Set up greenkeeper.io service
- #224: The following tools now reuse existing Fusion widget and/or backend code:
- Buffer
- Query
- Theme
- FeatureInfo
- Redline
- QuickPlot
- Search Commands
- As a result, many Fusion viewer APIs have been polyfilled to support these tools
- Components docked into the Task Pane will now properly scroll overflow content if required
- #145: Added support for some Fusion events
- #197: The
ajax-viewer
andsidebar
templates now work with Application Definitions - #17: InvokeURL and Search commands now support:
- Frame targeting (Target =
SpecifiedFrame
) - Opening in a new window (will use a modal dialog)
- Frame targeting (Target =
- Fusion template tweaks:
limegold
andturquoiseyellow
templates now use the blueprintjsTabs2
component instead of the deprecatedTabs
component- All templates now listen on a new dedicated redux state branch for controlling visibility/focus of primary elements:
- Task Pane
- Legend
- Selection
- New script commands are registered by default that can push new visibility/focus states to this redux state brach. As a result, any existing InvokeScript widgets that toggled the TaskPane/Legend/SelectionPanel (these commands exist if you created a fresh Application Definition in Maestro), now work out of the box and no longer show
[X] Error
placeholders - As a result of the new redux state branch, any InvokeURL command executed now automatically toggles the visibility/focus of the Task Pane to be the active element (if hidden or not visible).
- #174: Fix race condition where the viewer finishes init before the fetching custom projections from epsg.io has completed
- #130: Fix
parent.parent
pointing to nowhere when viewer itself is embedded in an iframe.
0.8
- Update Blueprint to 1.9.0
- Update React to 15.4.2
- Improved performance due to restructured and optimized redux state tree and updates to minimize unnecessary re-rendering
- #108: Added multi-map support
- #64: Ported across MapMenu fusion widget
- #113: Fix small sliver of task pane content visible when task pane collapsed on sidebar template
- #114: Fix legend infinite loop on maps with multiple (>2) levels of group nesting
- #115: Hover styles no longer rendered for disabled toolbar items
- #122: Clicking expanded panel in accordion should not collapse it
- #123: Offset modals more from the top (so toolbars don't obscure them)
- #25: Add support for InvokeURL command parameters
- #3: Complete menu/toolbar loose ends
0.7.1
- #64: Fix accordion not showing last panel as initially expanded in Slate and Maroon templates
- #111: Fix switching to fractional finite display scale not reflecting in scale dropdown
- #109: Restore 'NONE' option in Base Layer Switcher component
0.7
- #98: Updated to TypeScript 2.1
- #91: Use Blueprint as UI foundation
- Many UI elements updated/replaced/re-styled with blueprint equivalents
- Menus (flyout and context) can now support multiple levels of nesting
- Replaces the following components/libraries which have been removed
- ol3-contextmenu
- react-flyout
- Our custom fontello icon set
- Feature Tooltips are now toggle-able from Viewer Options
- #64: All Fusion templates ported across
- TurquoiseYellow
- LimeGold
- Slate
- Maroon
- Aqua template changes:
- Added status bar
- Changed to use Blueprint-styled modal dialogs
- Task Pane window opens (if hidden) when an InvokeURL command is executed
- Sidebar template changes:
- Updated to use Blueprint icons and load spinner
- More Fusion widgets ported over
- Now shows busy indicator on viewer startup instead of a "white screen of nothingness"
- #90: Replaced
npm
withyarn
- #103: non-
en
string bundles are now loaded on demand if the passed inlocale
parameter is noten
- #38: Mouse cursor now updates based on active map tool
- #86: Zoom slider position should now better reflect actual zoom (especially for tiled maps)
- #85: Scale display is now editable. For tiled maps, this becomes a select dropdown of finite scales
0.6.2
- #79: Update OpenLayers to 3.19.1
- #87: Update to TypeScript 2.0.10 and React 15.4.1
- #81: Check that the
resource
parameter is specified - #84: Fix
DisplayInLegend
property of layers and groups not being used to determine visibility of legend items - #88: Fix property pane "spilling over" in non-Aqua templates when viewing a feature with lots of attributes
- Better/improved tiled layer support
0.6.1
- #76: Fix init error when loading map containing raster layers
0.6
- #75: Refactored flyout menus to be physically de-coupled from their toolbars
- #52: Task Pane flyout menu will now properly show over the task pane when it has embedded (ActiveX/Flash/etc) content in IE.
- #74: Implemented ExecuteMapAction AJAX Viewer API.
- #47: Viewer now supports passing in Application Definition resource ids
- See KNOWN_ISSUES.md for features not yet supported
- #64: New layout template: Aqua
- This is a port of the equivalent Fusion template
- #33: Update toolbar CSS in Sidebar layout template so that it better blends in.
- #65: Page document title will now be set to the title of the Web Layout / Application Definition if specified
- #60: Fix bad relative path to webconfig.ini that causes most server-side tools to fail
- #55: Handle and show startup errors
- #40: Measure tool now requires explicit start/stop of measurements
- #66: Error placeholders now shown for toolbar/menu items for invalid command references
- #59: Enable feature tooltips by default
- #73: Fix incorrect ratio for ol.source.ImageMapGuide resulting in image requests that are bigger than viewport
- #71, #72, #29: Set active tool to nothing before digitizing, ensuring selection isn't triggered when drawing
- Selection Panel now respects attribute display order of Layer Definition
- #70: Projections for unknown EPSG codes will now be requested from https://epsg.io
- Added OL controls to base map viewer component
- Overview Map
- #62 Rotation reset
- #53 Code base migrated to TypeScript 2.0
0.4
Initial release


Amlaan Bhoi
Graduate Student
Intel AI Student Ambassador
Department of Computer Science
University of Illinois at Chicago
851 S Morgan St
Chicago, IL
USA
E-mail:
<EMAIL_ADDRESS>"
unscramble
Research Interests
My current research interests involve spatio-temporal action recognition in videos, object localization in images, and aspect-based sentiment analysis.
Biography
Hello, I am Amlaan Bhoi. I am a graduate student of Computer Science in the Department of Computer Science at University of Illinois at Chicago. My research interests are in computer vision, time-series prediction, data & text mining. I love reading machine learning papers on arxiv-sanity and am always keen on learning something new! I graduated from Amity University with a B.Tech in Computer Science & Engineering in 2017 with First Class honors. Outside classwork, my team won the "Best Microsoft Hack" at HackHarvard 2017 (Cambridge, MA) in Oct 2017. I also dwell around with occasional iOS development and Apple's ARKit to develop augmented reality experiences. Feel free to contact me!


--- layout: page title: An Egalitarian Experience ---
Now that you have personalised your objects, let's put them to use! It's time to experience an egalitarian concept of ownership as we virtually explore four reconstructions of Çatalhöyük's houses. Each house is listed below, follow the links to be transported to Neolithic Turkey!
This stage can be completed by using either a mobile app or our printed instructions to guide your tour through the virtual houses. More information can be found on our Using the Kit page.


@Deprecated public class ShoppinglistItem extends java.lang.Object implements java.lang.Comparable<ShoppinglistItem>, SyncState<ShoppinglistItem>, IJson<org.json.JSONObject>, android.os.Parcelable
| Modifier and Type | Field and Description |
|---|---|
static android.os.Parcelable.Creator<ShoppinglistItem> |
CREATOR
Deprecated.
|
static java.util.Comparator<ShoppinglistItem> |
MODIFIED_DESCENDING
Deprecated.
Compare object, that uses
modified
to compare two items. |
static java.lang.String |
TAG
Deprecated.
|
static java.util.Comparator<ShoppinglistItem> |
TITLE_ASCENDING
Deprecated.
Compare object, that uses the
description
to compare two items. |
| Constructor and Description |
|---|
ShoppinglistItem()
Deprecated.
Default constructor, this will create a new UUID as this objects id, and
update modified to the creation time of this object (now).
|
ShoppinglistItem(Shoppinglist shoppinglist,
Offer offer)
Deprecated.
Constructor for creating a new ShoppinglistItem from an offer, and attach
it to a
Shoppinglist . |
ShoppinglistItem(Shoppinglist shoppinglist,
java.lang.String description)
Deprecated.
Constructor for creating a new ShoppinglistItem from a plain text description
and attach it to a
Shoppinglist . |
| Modifier and Type | Method and Description |
|---|---|
int |
compareTo(ShoppinglistItem another)
Deprecated.
|
int |
describeContents()
Deprecated.
|
boolean |
equals(java.lang.Object obj)
Deprecated.
|
static java.util.List<ShoppinglistItem> |
fromJSON(org.json.JSONArray array)
Deprecated.
Convert a
JSONArray into a List ;. |
static ShoppinglistItem |
fromJSON(org.json.JSONObject object)
Deprecated.
A factory method for converting
JSONObject into a POJO. |
java.lang.String |
getComment()
Deprecated.
Get the comment set on this shoppinglistitem.
|
int |
getCount()
Deprecated.
Get the count.
|
java.lang.String |
getCreator()
Deprecated.
Get the creator of this list (an e-mail address).
|
java.lang.String |
getDescription()
Deprecated.
Get the description for this object
|
java.lang.String |
getErn()
Deprecated.
|
java.lang.String |
getId()
Deprecated.
|
org.json.JSONObject |
getMeta()
Deprecated.
Get any meta data associated with this item.
|
java.util.Date |
getModified()
Deprecated.
Get the last-modified date
|
Offer |
getOffer()
Deprecated.
Get the offer associated with this object.
|
java.lang.String |
getOfferId()
Deprecated.
Get the id of the offer associated with this item.
|
java.lang.String |
getPreviousId()
Deprecated.
Get the id of the previous
ShoppinglistItem . |
java.lang.String |
getShoppinglistId()
Deprecated.
Get the id of the
Shoppinglist that this item is attached to. |
int |
getState()
Deprecated.
Get the current state of this object.
|
int |
getUserId()
Deprecated.
Get the id, of the user that has this item.
|
int |
hashCode()
Deprecated.
|
boolean |
isTicked()
Deprecated.
Whether this item it ticked, or not
|
boolean |
same(java.lang.Object obj)
Deprecated.
|
ShoppinglistItem |
setComment(java.lang.String comment)
Deprecated.
Set a comment on the shoppinglistitem.
|
ShoppinglistItem |
setCount(int count)
Deprecated.
Set the count
|
ShoppinglistItem |
setCreator(java.lang.String creator)
Deprecated.
Set the creator of this list.
|
ShoppinglistItem |
setDescription(java.lang.String description)
Deprecated.
Set the description for this ShoppinglistItem
|
ShoppinglistItem |
setErn(java.lang.String ern)
Deprecated.
|
ShoppinglistItem |
setId(java.lang.String id)
Deprecated.
|
ShoppinglistItem |
setMeta(org.json.JSONObject meta)
Deprecated.
Set any meta information needed for this object.
|
ShoppinglistItem |
setModified(java.util.Date time)
Deprecated.
Set the
Date for when this object was last modified. |
ShoppinglistItem |
setOffer(Offer offer)
Deprecated.
Attach an offer with this ShoppinglistItem.
|
ShoppinglistItem |
setOfferId(java.lang.String offerId)
Deprecated.
Set the offer id associated with this item
|
ShoppinglistItem |
setPreviousId(java.lang.String id)
Deprecated.
Set the previous id of this item.
|
ShoppinglistItem |
setShoppinglistId(java.lang.String id)
Deprecated.
Set the id of the
Shoppinglist that should have an association
to this item. |
ShoppinglistItem |
setState(int state)
Deprecated.
Set a new
SyncState for this object. |
ShoppinglistItem |
setTick(boolean tick)
Deprecated.
Set the tick state of this item.
|
ShoppinglistItem |
setUserId(int userId)
Deprecated.
Set the id of the user, that this item is associated with.
|
org.json.JSONObject |
toJSON()
Deprecated.
|
java.lang.String |
toString()
Deprecated.
|
void |
writeToParcel(android.os.Parcel dest,
int flags)
Deprecated.
|
public static final java.lang.String TAG
public static final android.os.Parcelable.Creator<ShoppinglistItem> CREATOR
public static java.util.Comparator<ShoppinglistItem> TITLE_ASCENDING
description
to compare two items.public static java.util.Comparator<ShoppinglistItem> MODIFIED_DESCENDING
modified
to compare two items.public ShoppinglistItem()
public ShoppinglistItem(Shoppinglist shoppinglist, java.lang.String description)
Shoppinglist
.shoppinglist
- A list to associate this item withdescription
- A plain text descriptionpublic ShoppinglistItem(Shoppinglist shoppinglist, Offer offer)
Shoppinglist
.shoppinglist
- A list to assiciate this item withoffer
- An offer to attach to this itempublic static java.util.List<ShoppinglistItem> fromJSON(org.json.JSONArray array)
JSONArray
into a List
;.array
- A JSONArray
with a valid API v2 structure for a ShoppinglistItem
List
of POJOpublic static ShoppinglistItem fromJSON(org.json.JSONObject object)
JSONObject
into a POJO.object
- A JSONObject
with a valid API v2 structure for a ShoppinglistItem
ShoppinglistItem
, or null
if object is null
public org.json.JSONObject toJSON()
public java.lang.String getId()
public ShoppinglistItem setId(java.lang.String id)
public java.lang.String getErn()
public ShoppinglistItem setErn(java.lang.String ern)
public java.lang.String getDescription()
public ShoppinglistItem setDescription(java.lang.String description)
description
- A descriptionpublic int getCount()
Count represents the physical amount or number of items to get of this ShoppinglistItem, (such as 6 eggs or 500g of flour)
public ShoppinglistItem setCount(int count)
Count represents the physical amount or number of items to get of this ShoppinglistItem, (such as 6 eggs or 500g of flour)
count
- A number representing some type of 'amount'public boolean isTicked()
Tick represents a notation of whether the item have been purchased or is in the shopping basket
public ShoppinglistItem setTick(boolean tick)
Tick represents a notation of whether the item have been purchased or is in the shopping basket
tick
- The ticked statepublic Offer getOffer()
public ShoppinglistItem setOffer(Offer offer)
To keep the object 'sane', this will also trigger
setOfferId(String)
, and if
necessary setDescription(String)
(updating description is considered necessary if it's current value is
null
, or offer.getId()
is not equal to
getOfferId()
)
offer
- An offer to attach to this itempublic java.lang.String getCreator()
public ShoppinglistItem setCreator(java.lang.String creator)
Creator must be an e-mail address, and must be a valid ShopGun user
creator
- The creator of this listpublic java.lang.String getShoppinglistId()
Shoppinglist
that this item is attached to.public ShoppinglistItem setShoppinglistId(java.lang.String id)
Shoppinglist
that should have an association
to this item.id
- The shoppinglist idpublic java.lang.String getPreviousId()
ShoppinglistItem
.
previous_id
is used primarily for drawing the ShoppinglistItems
in the correct order when presenting the items for the user.
The first item to onTransform will have the previous_id
FIRST_ITEM
, the next item should then
point at this items id
, and so on
null
public ShoppinglistItem setPreviousId(java.lang.String id)
When updating one prevoius_id
you would probably have to update
several other ShoppinglistItem
previous_id
, if you are
using the SDK's ListManager
, this should be handled automatically.
previous_id
is used primarily for drawing the ShoppinglistItems
in the correct order when presenting the items for the user.
The first item to onTransform will have the previous_id
FIRST_ITEM
, the next item should then
point at this items id
, and so on
id
- A getId()
public java.lang.String getOfferId()
public ShoppinglistItem setOfferId(java.lang.String offerId)
offerId
- A Offer.getId()
public java.util.Date getModified()
public ShoppinglistItem setModified(java.util.Date time)
Date
for when this object was last modified.
When using the SDK's ListManager
this value is automatically
set when using it's methods for ShoppinglistItem operations
time
- A datepublic org.json.JSONObject getMeta()
Meta can be used for any kind of information, that is needed to describe any kind of information regarding this item. It's kind of a 'anything goes' item.
public ShoppinglistItem setMeta(org.json.JSONObject meta)
Please ensure that you do not accidentally override information written by
other apps, by reusing meta
if it's present.
Meta can be used for any kind of information, that is needed to describe any kind of information regarding this item. It's kind of a 'anything goes' item.
meta
- A JSONObject
containing the meta datapublic int getUserId()
This is mostly a use case when storing the item in a DB, where several
users can have access to the same item (same getId()
.
public ShoppinglistItem setUserId(int userId)
This is mostly a use case when storing the item in a DB, where several
users can have access to the same item (same getId()
.
userId
- An id of a userpublic java.lang.String getComment()
The comment is part of the meta
-blob, and therefore
has very few restrictions
null
public ShoppinglistItem setComment(java.lang.String comment)
null
will delete the comment
-key altogether.
The comment is part of the meta
-blob, and therefore
has very few restrictions
comment
- The comment to set on the shoppinglistitem, null
to deletepublic int getState()
SyncState
getState
in interface SyncState<ShoppinglistItem>
SyncState
public ShoppinglistItem setState(int state)
SyncState
SyncState
for this object.setState
in interface SyncState<ShoppinglistItem>
state
- A SyncState
(where state
>=
SyncState.TO_SYNC
&&
state
<=
SyncState.ERROR
)public java.lang.String toString()
toString
in class java.lang.Object
public int compareTo(ShoppinglistItem another)
compareTo
in interface java.lang.Comparable<ShoppinglistItem>
public boolean same(java.lang.Object obj)
public int hashCode()
hashCode
in class java.lang.Object
public boolean equals(java.lang.Object obj)
equals
in class java.lang.Object
public int describeContents()
describeContents
in interface android.os.Parcelable
public void writeToParcel(android.os.Parcel dest, int flags)
writeToParcel
in interface android.os.Parcelable


Implements interfaces:
A user within the system.
Located in /user.php (line 8)
Initializes class constants.
Retrieves a user from the database.
Converts the User into JSON, for use with the API.
Documentation generated on Fri, 24 Apr 2015 06:55:35 +0000 by phpDocumentor 1.4.4


Restoring when vCenter or Other Management VMs Are Not Accessible
IBM Spectrum Protect Plus provides an option to automatically restore by using ESXi hosts if the vCenter is not accessible. This option restores the vCenter VM or VMs that the vCenter is dependent on.
This procedure applies if any of the following management services are partially or fully lost in your environment:
- vCenter
- Platform Services Controller (PSC)
- Software-Defined Data Center (SDDC)
- Active Directory (AD)/Domain Name System (DNS) servers
In order to recover without a vCenter, the ESXi host must have either a standard switch or a preexisting distributed switch with ephemeral binding. In these conditions are not available, a new standard switch should be created on the ESXi host. If there are no available uplinks for the standard switch, it must be removed from a distributed switch.
Additional manual steps are required to complete a restore operation when running on a VCS environment.
Recovering a management VMs on a VCS environment could result in the loss of access to VMs. This is caused because of a misconfiguration of the virtual switch. Complete the following steps on the affected VMs to recover from this state and to complete a recovery operation:
- Connect to the destination ESXi UI host and create a new standard virtual switch. At the beginning, there are no port groups or uplinks for the switch.
- Use SSH to connect to the ESXi server. Identify and select the physical NIC and the port group of the existing distributed virtual switch SDDC-Dswitch-Private. This sample used the vnic vmnic0, which is part of the port ID 64. You can list the Distributed Virtual Switch (DVS) information by issuing the following command:
#esxcli network vswitch dvs vmware list
- Based on the previous information, remove the NIC and port ID (port group) from the SDDC-Dswitch-Private DVS. Use the port ID from step 2.
#esxcfg-vswitch -Q <physical_vnic> -V <port_group> SDDC-Dswitch-Private
- Add the NIC and port group into the standard switch created in step 1:
#esxcli network vswitch standard uplink add –-uplink-name=<physical_vnic> --vswitch-name=<standard_vswitch>
- In the ESXi interface, add a port group and select the standard virtual switch.
- At this point, the virtual switch should have one uplink and one port group.
- Run a restore operation with the ESX host if vCenter is down option enabled in the IBM Spectrum Protect Plus interface.
- Click Options and make sure you choose the new networking switch that you created in step 1 under Networking.
- Using the destination ESXI UI, power on the recovered VM.
- Once the VMs are reachable, log in into the vCenter UI and start the migration of the management VMs from the temporary port group created in step 5 to the original distributed port group, SDDC-DPortGroup-Mgmt.
- Start a migration from the Networking tab by selecting a datacenter and then selecting Migrate VMs to Another Network from the Actions menu. Select the source network (the temporary switch created in step 5) and the destination network (management switch).
- Once all VMs are migrated into the original port group, reincorporate the physical NIC and the port group into the original distributed virtual switch:
- Remove the network cards (known as vmnics) from a standard vSwitch that was re-assigned previously by using the following command:
#esxcli network vswitch standard uplink remove --uplink-name=vmnic --vswitch-name=vSwitch
- For example:
#esxcli network vswitch standard uplink remove --uplink-name=vmnic0 --vswitch-name=vered_recovery
- Add network cards to a vNetwork Distributed Switch (vDS) by using the following command:
- #esxcfg-vswitch -P vmnic -V unused_dvPort_ID dvSwitch # add a vDS uplink
- For example:
- #esxcfg-vswitch -P vmnic0 -V 64 SDDC-Dswitch-Private
- Delete the temporary port group and the standard vSwitch from the ESXi host UI.
- After the VMs are migrated and accessible, use the ESXI host UI to unregister (do not delete) the old VMs (if the original host is reachable). This avoids having duplicated information such as names, Media Access Control (MAC) addresses, OS level IDs, and VM Universal Unique Identifiers (UUIDs). This step must to be performed even if you are using a new datastore.
- Note: In some vSphere or ESXi versions, the unregister operation can be performed by using the Remove from inventory option. This unregisters a VM from the vCenter catalog but leaves vmdk files on the datastore consuming storage space. Once you have fully recovered the VM and the environment is successfully running, you can regain the space by manually removing these files from the datastore.
IBM Spectrum Protect Plus 10.1.2
Licensed Material - Property of IBM Corp. © IBM Corporation and other(s) 2018. IBM is a registered trademark of the IBM Corporation in the United States, other countries, or both. | 8/23/2018


ID
First Name
Last Name
Faculty Number
Grade
Id:
First Name:
Last Name:
Facility Number:
Grade:
Submit


No Expense Made
| Title | Requested | Date Requested | Amount | Approved | Date Approved | Action |
|---|---|---|---|---|---|---|
| Not Approved 0): ?> Approved | Not Approved 0): ?> |
|
No Expense Made
| Title | Requested | Date Requested | Amount | Approved | Date Approved | Action |
|---|---|---|---|---|---|---|
| Not Approved 0): ?> Approved | Not Approved 0): ?> |
|


--- layout: default title: "BNX 1526 Liquid Handling System" date: May 21, 2017 desc: Benchtop Microplate Dispenser and Washer in One Small Footprint keywords: Bulk Dispenser, BNX 1536, Liquid Handling slug: "jekyll_metas" ---
The BNX 1536 liquid handling system provides both precise dispensing and thorough microplate washing in a single instrument. The small footprint houses a built-in vacuum and air pressure pump; no external pumps are needed.
Each of the four reservoir bottles has its own fluid path to individual dispense heads, allowing four different fluids to be dispensed into a single microplate. A single aspiration head allows fast and efficient liquid removal from microplate wells for plate washing applications. The intuitive software provides a high degree of control over operating parameters, allowing rapid processing of robust assays and gentle processing of cell based assays. The system is robot compatible, with a robot-friendly plate carriage and accessible RS-232 COM port.
With its Windows compatible, drag-and-drop software, the BNX 1536 provides a high degree of control over process parameters. Column selection offers the choice of dispensing only a few columns, or a complete plate. For optimal dispense accuracy, the software allows fine tuning the dispense volume using the Liquid Factor tool. Dispense pressure can be lowered for a gentler dispense when using loosely adherent cells or weakly bound antibodies. A spiration controls allow the probe height, probe offset, aspiration rate and aspiration time to be set for lowest residual volume or gentlest processing.


Each player in turn places an atom in a cell on the board. They can either place it in an empty cell, or any cell with their own colour atoms in it. If the placed atom causes the cell to be overloaded, the cell will explode with the atoms moving out into all orthogonally adjacent cells, turning any existing atoms in those cells into the player's colour. Chain reactions can occur after the initial explosion, which can cause sweeping changes across the board.
The maximum number of atoms a cell can hold before becoming overloaded is:
Once a player's last atom has been wiped out, they are out of the game. The winner is the last surviving player.
All source code for this implementation of Atoms can be found in the atoms-www GitHub project.


Rugby: Saracens won't ask players to put club before country, says McCall
LONDON: Saracens will not ask their England players to put club before country despite their Premiership status being jeaopordised by a 35-point deduction for beaching breaching salary cap regulations, coach Mark McCall has said.
English and European champions Saracens were also fined 5.36 million pounds this month and the club has opted not to appeal the punishment.
England coach Eddie Jones has said he was concerned that Saracens players such as Owen Farrell, Maro Itoje, Elliot Daly, Mako and Billy Vunipola would prioritize Premiership survival over next year's Six Nations.
"I would never ask players not to play for England," McCall told reporters. "We want them to play for their country and I support them doing so 100per cent ... it's the pinnacle of the game.
"Wanting to play in the Six Nations doesn't mean you're not committed to the club. All of these guys are 100 per cent committed to the club but playing for your country is playing for your country and I would support that every time."
England, who finished runners-up to South Africa at the World Cup, begin their Six Nations campaign against France on Feb. 2 and finish on March 14 against Italy.
With the points penalty, Saracens are last in the standings on -22 points after four games and McCall said setting a target for how many wins they would need to avoid relegation was the wrong way to approach the campaign.
"It's one of the things that can trip you up if you start to think that way instead of just playing your best rugby - and hopefully winning matches," he added.
"The end of the Six Nations might be a good time to see where we are and what is properly required."


Toggle navigation
Table Soccer Trainer
Home
Settings
Fork me on GitHub
Your browser does not support the audio element.
Run setup to start
Start training
Stop training
Setup...
Wait for singal...
Hit!
0/0 (0%)


generic-switch
WAI ARIA Practices
A switch is a button that toggles between true or false.
API:
| name |
detail |
| checked-changed |
boolean |
| name |
type |
| disabled |
boolean |
| checked |
boolean |
| label |
string |
| name |
type |
| checked |
boolean |
| name |
description |
| --generic-switch-focus |
Customizes the focus styles of the thumb |
| name |
description |
| label |
|
| thumb |
|
| track |
|
| button |
|
| name |
description |
| default |
Provide a label node as lightdom |
Usage:
The switch component requires a label, which you can provide as a textnode. You can see an example down below.
Default:
Show code
Default
Custom label:
Show code
Custom label
Disabled:
Show code
Disabled
Checked:
Show code
Checked
Checked and disabled:
Show code
Checked and disabled
With a long text in a small place:
Show code
Very very loooong text in a small space


Indian Idol 11: Music Composer Duo Ajay-Atul Sign THIS Talented Contestant For A Future Project
The Indian Idol 11 episode featuring Ajay-Atul will air on Sony TV this weekend.
by IANSMusic composer duo Ajay-Atul, who recently appeared as guests on “Indian Idol 11“, signed one of the show’s contestants, Jannabi Das, for a song in the future.
Although the composer duo did not specify what project Jannabi would be a part of, they promised her that she would soon be singing under their direction.
Jannabi, who hails from Delhi, performed Mere naam chin chin chu, originally sung by Geeta Dutt in the 1958 hit, “Howrah Bridge”. On listening to Jannabi’s voice, Ajay-Atul were so impressed that they immediately signed her for a new song.
The current season of “Indian Idol” i.e Indian Idol 11 is being judged by Anu Malik, Neha Kakkar, and Vishal Dadlani.
Composer-singer Vishal Dadlani, while appreciating Jannabi’s performance had said, “Whenever you perform, you rock the house. I must say you might not be able to sing like other performers, but the other performers would also be not able to sing like you.
The episode featuring Ajay-Atul will air on Sony TV this weekend.


JavaScript is disabled on your browser.
Skip navigation links
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes
A
B
C
D
E
F
G
H
I
K
L
M
N
O
P
R
S
T
U
V
W
G
getAvailableGraphicsMode()
- Static method in class org.herebdragons.utils.
SystemManager
getBehaviorOnExit()
- Method in class org.herebdragons.graphics.canvas.
AbstractCanvas
getBehaviorOnExit()
- Method in class org.herebdragons.graphics.canvas.
Canvas
getBehaviorOnExit()
- Method in interface org.herebdragons.graphics.canvas.
notSoSimpleCanvas
getBgColor()
- Method in class org.herebdragons.graphics.canvas.
AbstractCanvas
getBgColor()
- Method in class org.herebdragons.graphics.canvas.
Canvas
getBgColor()
- Method in interface org.herebdragons.graphics.canvas.
notSoSimpleCanvas
getCurrentDisplayMode()
- Static method in class org.herebdragons.utils.
SystemManager
getDimension()
- Method in class org.herebdragons.graphics.canvas.
AbstractCanvas
getDimension()
- Method in class org.herebdragons.graphics.canvas.
Canvas
getDimension()
- Method in interface org.herebdragons.graphics.canvas.
notSoSimpleCanvas
getDimension()
- Method in class org.herebdragons.graphics.objects.
notSoSimpleObject
getFonts()
- Static method in class org.herebdragons.utils.
SystemManager
getFramesPerSecond()
- Method in class org.herebdragons.utils.
FrameRate
getGraphicsDevice()
- Static method in class org.herebdragons.utils.
SystemManager
getLocation()
- Method in class org.herebdragons.graphics.canvas.
AbstractCanvas
getLocation()
- Method in class org.herebdragons.graphics.canvas.
Canvas
getLocation()
- Method in interface org.herebdragons.graphics.canvas.
notSoSimpleCanvas
getObjectManager()
- Method in class org.herebdragons.graphics.canvas.
Canvas
getPosition()
- Method in class org.herebdragons.graphics.objects.
notSoSimpleObject
getRemainingInCyle()
- Method in class org.herebdragons.utils.
FrameRate
getRenderer()
- Static method in class org.herebdragons.graphics.canvas.
CanvasFactory
getResult()
- Method in class org.herebdragons.utils.
FrameRate
getRotation()
- Method in class org.herebdragons.graphics.objects.
notSoSimpleObject
getText()
- Method in class org.herebdragons.graphics.objects.
Text
getTitle()
- Method in class org.herebdragons.graphics.canvas.
AbstractCanvas
getTitle()
- Method in class org.herebdragons.graphics.canvas.
Canvas
getTitle()
- Method in interface org.herebdragons.graphics.canvas.
notSoSimpleCanvas
getUpdatesPerSecond()
- Method in class org.herebdragons.utils.
FrameRate
A
B
C
D
E
F
G
H
I
K
L
M
N
O
P
R
S
T
U
V
W
Skip navigation links
Overview
Package
Class
Use
Tree
Deprecated
Index
Help
Prev Letter
Next Letter
Frames
No Frames
All Classes


Become a chatbot developer
Chatbot School is a learning hub for chatbot development. We help people of all skill level from beginners to experts both
technical and non-technical to discover and learn what's possible with Chatbots.


{% extends "layout_no_search.html" %} {% block content %} {{ scopedSearch.total }} results found for: “{{ queryParams.q }}” Search {% if queryParams.scope %} Within: Education, training and skills {% endif %} {{ scopedSearch.total }} search results found {% for result in scopedSearch.results.slice(0,3) %} {% include "_search-result.html" %} {% endfor %} {% if queryParams.scope %} You’re currently searching in: Education, training and skills There are {{ allGovUkResultsCount }} results for your search term across the whole of GOV.UK. See all results {% endif %} {% for result in scopedSearch.results.slice(3) %} {% include "_search-result.html" %} {% endfor %} {% endblock %}
Within: Education, training and skills
There are {{ allGovUkResultsCount }} results for your search term across the whole of GOV.UK.


Microfrontends using Web Components and Integration pattern
Text to send
Enter you want to send to components.
Broadcast components
Angular App
React App
Console


DailyCode 32
Unmotivated today: I want to move on to building apps but there's still much to get right design-wise. I' being patient and continuing to do the right things. Time to dig in and drive on. I kept it simple today since I'm going to bed early tonight. My best bet is to work with type and simple graphics (lines, shapes and forms) as I continue to explore layout. There's also responsive/adaptive layout considerations to work with as well. For now though, focusing on the smartphone screen is a good strategy. Today's design looks like it could be a good landing page. I'm going to find a full Helvetica family so that i can deepen my font/text skills in CSS. I'm also looking forward to using SVG.


Installing scikit-learn¶
There are different ways to get scikit-learn installed:
- Install the version of scikit-learn provided by your operating system or Python distribution. This is the quickest option for those who have operating systems that distribute scikit-learn.
- Install an official release. This is the best approach for users who want a stable version number and aren’t concerned about running a slightly older version of scikit-learn.
- Install the latest development version. This is best for users who want the latest-and-greatest features and aren’t afraid of running brand-new code.
Note
If you wish to contribute to the project, it’s recommended you install the latest development version.
Installing an official release¶
Getting the dependencies¶
Installing from source requires you to have installed Python (>= 2.6), NumPy (>= 1.3), SciPy (>= 0.7), setuptools, Python development headers and a working C++ compiler. Under Debian-based operating systems, which include Ubuntu, you can install all these requirements by issuing:
sudo apt-get install build-essential python-dev python-numpy python-setuptools python-scipy libatlas-dev libatlas3-base
Note
In order to build the documentation and run the example code contains in this documentation you will need matplotlib:
sudo apt-get install python-matplotlib
Note
On older versions of Ubuntu, you might need to apt-get install python-numpy-dev to get the header files for NumPy.
On Ubuntu 10.04 LTS, the package libatlas-dev is called libatlas-headers.
Note
The above installs the ATLAS implementation of BLAS (the Basic Linear Algebra Subprograms library). Ubuntu 11.10 and later, and recent (testing) versions of Debian, offer an alternative implementation called OpenBLAS.
Using OpenBLAS can give speedups in some scikit-learn modules, but it doesn’t play nicely with joblib/multiprocessing, so using it is not recommended unless you know what you’re doing.
If you do want to use OpenBLAS, then replacing ATLAS only requires two commands. ATLAS has to be removed, otherwise NumPy may not work:
sudo apt-get remove libatlas3gf-base libatlas-dev
sudo apt-get install libopenblas-dev
On Red Hat and clones (e.g. CentOS), install the dependencies using:
sudo yum -y install gcc gcc-c++ numpy python-devel scipy
Easy install¶
This is usually the fastest way to install the latest stable release. If you have pip or easy_install, you can install or update with the command:
pip install -U scikit-learn
or:
easy_install -U scikit-learn
for easy_install. Note that you might need root privileges to run these commands.
From source package¶
Download the package from http://pypi.python.org/pypi/scikit-learn/ , unpack the sources and cd into the source directory.
This packages uses distutils, which is the default way of installing python modules. The install command is:
python setup.py install
Windows installer¶
You can download a Windows installer from downloads in the project’s web page. Note that must also have installed the packages numpy and setuptools.
This package is also expected to work with python(x,y) as of <IP_ADDRESS>.
Installing on Windows 64-bit
To install a 64-bit version of scikit-learn, you can download the binaries from http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn Note that this will require a compatible version of numpy, scipy and matplotlib. The easiest option is to also download them from the same URL.
Building on windows¶
To build scikit-learn on windows you will need a C/C++ compiler in addition to numpy, scipy and setuptools. At least MinGW (a port of GCC to Windows OS) and Microsoft Visual C++ 2008 should work out of the box. To force the use of a particular compiler, write a file named setup.cfg in the source directory with the content:
[build_ext]
compiler=my_compiler
[build]
compiler=my_compiler
where my_compiler should be one of mingw32 or msvc.
When the appropriate compiler has been set, and assuming Python is in your PATH (see Python FAQ for windows for more details), installation is done by executing the command:
python setup.py install
To build a precompiled package like the ones distributed at the downloads section, the command to execute is:
python setup.py bdist_wininst -b doc/logos/scikit-learn-logo.bmp
This will create an installable binary under directory dist/.
Third party distributions of scikit-learn¶
Some third-party distributions are now providing versions of scikit-learn integrated with their package-management systems.
These can make installation and upgrading much easier for users since the integration includes the ability to automatically install dependencies (numpy, scipy) that scikit-learn requires.
The following is an incomplete list of Python and OS distributions that provide their own version of scikit-learn.
Debian and derivatives (Ubuntu)¶
The Debian package is named python-sklearn (formerly python-scikits-learn) and can be installed using the following command:
sudo apt-get install python-sklearn
Additionally, backport builds of the most recent release of scikit-learn for existing releases of Debian and Ubuntu are available from the NeuroDebian repository .
A quick-‘n’-dirty way of rolling your own .deb package is to use stdeb.
Python(x,y)¶
The Python(x,y) distributes scikit-learn as an additional plugin, which can be found in the Additional plugins page.
Enthought Python distribution¶
The Enthought Python Distribution already ships a recent version.
MacPorts¶
The MacPorts package is named py<XY>-scikits-learn, where XY denotes the Python version. It can be installed by typing the following command:
sudo port install py26-scikit-learn
or:
sudo port install py27-scikit-learn
Archlinux¶
Archlinux’s package is provided at Arch User Repository (AUR) with name python2-scikit-learn for latest stable version and python2-scikit-learn-git for building from git version. If yaourt is available, it can be installed by typing the following command:
sudo yaourt -S python2-scikit-learn
or:
sudo yaourt -S python2-scikit-learn-git
depending on the version of scikit-learn you want to use.
Bleeding Edge¶
See section Retrieving the latest code on how to get the development version.
Testing¶
Testing requires having the nose library. After installation, the package can be tested by executing from outside the source directory:
nosetests sklearn --exe
This should give you a lot of output (and some warnings) but eventually should finish with a message similar to:
Ran 601 tests in 27.920s
OK (SKIP=2)
Otherwise, please consider posting an issue into the bug tracker or to the Mailing List.
Note
Alternative testing method
If for some reason the recommended method is failing for you, please try the alternate method:
python -c "import sklearn; sklearn.test()"
This method might display doctest failures because of nosetests issues.
scikit-learn can also be tested without having the package installed. For this you must compile the sources inplace from the source directory:
python setup.py build_ext --inplace
Test can now be run using nosetests:
nosetests sklearn/
This is automated by the commands:
make in
and:
make test


Veggies of Virginia is a student-run CIO that promotes a plant-based lifestyle. We advocate for health, environmental protection, sustainability, and the rights of all living things through community building, education, and outreach.
Although this organization has members who are University of Virginia students and may have University employees associated or engaged in its activities and affairs, the organization is not a part of or an agency. It is a separate and independent organization, which is responsible for and manages its own activities and affairs. The University does not direct, supervise or control the organization and is not responsible for the organization's contracts, acts or omissions.


With Halloween approaching, I thought I would share ten of my favourite scary reads. From dancing skeletons falling apart to an unseen ‘monster’ who imprisons random people in the dark, the following books have truly terrified me at various points in my life. I dare you to try reading one by candlelight!
Funnybones by Janet and Allan Ahlberg
This could be the first ‘scary’ book I read as a child, and is a book I simply still love to read. Two pretty useless skeletons attempt to scare their neighbours but end up falling apart and trying to put themselves back together again. Now, how did the song go…
The Witches by Roald Dahl
A classic Dahl tale that still terrifies me to this day. Set in a world where child-hating evil witches secretly exist, a young boy stumbles across their AGM in Bournemouth. Contains some very useful tips on how to spot a witch and the wonderful fact that to a witch a child smells of dog’s droppings. Nice!
Sawbones by Catherine Johnson
Sawbones is a wild romp through eighteenth century London that takes in grave-robbing, murder, anatomy, dissection and magic. Two fantastic young characters, Ezra and Loveday, set out to find a shadowy murderer who is leaving a trail of bodies across London in a search for lost treasure, and a member of royalty. Warning – Sawbones might not be suitable for those with a weak stomach!
Night Shift by Stephen King
Night Shift is the first collection of short stories by Stephen King, and what a collection of gruesome, terrifying tales it is. I can remember re-reading the stories repeatedly at secondary school, and then hunting down the film adaptations (most of the stories were adapted into terrible movies or TV films). My favourites from the collection were ‘The Mangler’ and ‘Trucks’.
The Lie Tree by Frances Hardinge
The Lie Tree has everything I look for in a scary story; a remote island, unwelcoming locals, terrible weather, Victorian death customs, weird photography of dead people and a tree that feeds off whispered lies. With an intriguing plot and a collection of vile characters it was a worthy winner of the Costa book prize. A new edition, illustrated by Chris Riddell, is out soon!
Jekyll’s Mirror by William Hussey
When a schoolboy is invited by his English teacher to take part in a social network experiment he soon realises that he is being used by an evil supernatural mastermind. The other participants in the experiment do not see the danger, and soon their inner demons are unleashed with catastrophic results. Some of the scenes in Jekyll’s Mirror are truly chilling and pack a real horror punch – an episode set in a roadside cafe is still giving me nightmares six months after finishing the book!
The Dead of Winter by Chris Priestley
To be honest, this list could have been compiled by listing only books written by Chris Priestly. He is one of my favourite authors, and probably the best horror writer currently with us. I have picked The Dead Winter simply because it was the one I read most recently. A chilling tale featuring an orphan sent to live in an isolated house, and the secrets he unearths there. Brilliantly spooky – try reading alone by candlelight if you dare…
Coraline by Neil Gaiman
Coraline freaked me out. Repeatedly. Surely every parent knows that if you leave your daughter to amuse herself in your new home, you must be prepared for her to travel through a portal to another world where a version of you will try to replace her eyes with buttons. The film adaption also freaked me out. As did the graphic novel version. I have just freaked myself out again by writing this. Neil Gaiman has a lot to answer for.
When the Wind Blows by Raymond Briggs
When the Wind Blows is a graphic novel by British artist Raymond Briggs – the genius behind the Snowman and Fungus the Bogeyman (which nearly made this list!). The book illustrates how a retired couple, Jim and Hilda Bloggs, prepare for a nuclear attack on Britain by the Soviet Union during the cold war. Will Government advice on protecting your home from the blast be enough to save Jim and Hilda?
The Bunker Diary by Kevin Brooks
With no ghouls or supernatural events, The Bunker Diary is not a traditional Halloween story. It does, however, have a terrible unseen ‘man upstairs’ who kidnaps a group of people and imprisons them in his underground bunker. The truly horrific plot unfolds through the teenage diary of one of the captives which filled me with dread as I reached the final pages.
Do you agree that these are ten supremely scary books, or is there a book that scared you more? Let us know by commenting on the Suffolk Libraries Facebook page or mentioning us on Twitter!


01. About me
{{ .Site.Params.home.aboutme | safeHTML }}
{{ range first 1 (where .Site.RegularPages "Type" "blog") }}
{{ partial "blog-list-item.html" . }}
{{ end }}
03. Professional Skills
{{ range .content }}
{{ end }}
{{ end }}
{{ .name }}
{{ range (where .Site.RegularPages "Type" "education") }}
{{ partial "education.html" . }}
{{ end }}
{{ range (where .Site.RegularPages.ByTitle "Type" "certification") }}
{{ partial "education.html" . }}
{{ end }}
{{ range (where .Site.RegularPages "Type" "workexperience") }}
{{ partial "workexperience.html" . }}
{{ end }}


--- layout: page title: About header-img: "img/about-bg.png" ---
UCSB grad, former analyst, searching for work within the scope of his passion of building and creating