Advertising Internet Online Opportunities To Explore
Chances are unless you are very lucky you will go thru many different relationships before you find your special someone. Finding your sole mate is like gambling... In poker and blackjack you may have to play dozens of hands until you get a winning hand, and it is the same with relationships.
During your life you will probably meet some people who seem like they may be the one, or that they are close, but still have the feeling that something else is missing. My advice is that if you are not happy, because something seems like it is missing, then it usually is not right.
Before I found my special someone, I was in a relationship for over 10 years, and I thought everything was great, until I started to seriously consider getting married. Then I noticed that we had so little in common and in reality wanted so many different things out of life and one day we both realized there was much about each of us that we both wanted from someone, but it was not us that we wanted.
Then one day I decided I had enough of trying to go to clubs and bars to meet people. I was sick and tired of trying to find someone in the time it takes to finish a drink. It always seemed the ladies I would meet were all wrong for me, or they seemed great after talking to them for 5 minutes but they seemed to have no interest in me.
Then one day I had an idea, it was not an original idea but I decided to use the internet to try to find the right person for me. So I proceeded to make a myspace profile. On this page I tried to put the real me and not the funny guy trying to be charming that was looking for love at the bar.
And as I would at the poker rooms I went all in, I poured my heart and sole into this. I wrote what I wanted and wrote down who I truly think I am and not who I want to be, and I was rewarded by 1 email responding to my site.
It was amazing; the response I got was like a dream.
At first things were a little awkward for the both of us. We decided to hold of on actually meeting until we got to know each other first. We spent a month just talking everyday on the internet. You can really open up to someone and show them the real you and not have to worry about rejection on the internet, after all you are just a faceless ghost, and if things don’t work out you could be sitting next to her on the bus one day without ever knowing it.
The key to finding happiness is realizing you are going to bust more then you are going to get blackjack, but you must keep trying, trying to remember you only need to find the real thing once.


--- title: Linked Name Authority ---
Note This site is still a work in progress.
The Linked Name Authority stores information and citations about Dartmouth faculty and staff.
Getting started? Follow our step-by-step guide.


JLabel fatLabel with JTextField inFat JLabel calLabel with JTextField inCal JLabel perLabel with JTextField outPer
JPanel
The idea is to have three panels, one for each pair of label and text field. The lone title at the top and the button at the bottom do not need to be placed in panels. The picture shows this grouping. The lines showing the panels do not appear when the program is run.
The add()
method places components in a panel.
The panel also needs a layout manager.
By default, the layout manager is FlowLayout
.
Here is the program:
public class percentFatPanel extends JFrame implements ActionListener { JLabel title = new JLabel("Percent of Calories from Fat"); JLabel fatLabel = new JLabel("Enter grams of fat: "); JLabel calLabel = new JLabel("Enter total calories: "); JLabel perLabel = new JLabel("Percent calories from fat: "); JTextField inFat = new JTextField( 7 ); JTextField inCal = new JTextField( 7 ); JTextField outPer = new JTextField( 7 ); JButton doit = new JButton("Do It!"); JPanel fatPanel = new JPanel(); JPanel calPanel = new JPanel(); JPanel perPanel = new JPanel(); public percentFatPanel() { fatPanel.add( ); fatPanel.add( ); calPanel.add( ); calPanel.add( ); perPanel.add( ); perPanel.add( ); . . . . . }


Created by Teodor Naydenov and Hristo Yankov
Collection of features (objects) with geographical locations, projected on flat surface.
Any app that operates with data related to geography locations
Any ideas to make it better?
Not an image. For an example a street on road map can be represented as polyline with several attributes.
Convert data to an image. Each feature is "drawn" to a layer of the map.
Drawing rules for each feature type are configured. These can be: line width, line color, text, etc.
Each layer contains set of features. Layers are placed on top of each other.
Data that identifies geographic locations of features on Earth. These can be natural or constructed features, oceans, continents, rivers, cities, restaurants, stores, etc.
Geospatial data, GIS data or geodata has explicit geographic positioning information included within it.
In raster data the entire area of the map is subdivided into a grid of tiny cells. A value is stored in each of these cells to represent the nature of whatever is present at the corresponding location on the ground. Raster data can be thought of as a matrix of values.
Examples for raster geospatial data:
Beside raster band, raster geospatial data includes coordinate system and transformation.
In vector data the features are recorded one by one, with shape being defined by the numerical values of the pairs of xy coordinates.
A feature is representation of real world object on a map.
Each feature has a type (class), which determines type of geometry and set of attributes. Features with same class can be combined into collections.
Binary format developed by ESRI. The main file types have the suffixes .shp, .shx and .dbf, but there are several more.
Contains vector data organized as features placed in layers. Each feature has geometry and other attributes.
GeoJSON is a format for encoding a variety of geographic data structures.
Based on well known JSON file format.
{
"type": "Feature",
"geometry": {
"type": "Point",
"coordinates": [125.6, 10.1]
},
"properties": {
"name": "Dinagat Islands"
}
}
Developed by Keyhole, later bought by Google. The file format is based on XML. The file contained both: geographic data and style, which instruct browser how to render data.
KML is now open standard.
Spatially enabled database is database system, which is aware of the notion of space and direct interaction with spatial objects and concepts
Spatial databases can store points, lines, polygons, etc directly in the database in the form of geometry columns.
Spatial databases support index on geometry columns, which dramatically speeds up lookup operations
Spatially enabled databases support large set of operators, which can be used in queries such as: contains, intersects, crosses, closest point and many more.
Files with spatial data allow effective storage of large amount of information, but are very inefficient regarding finding any interaction between features
Spatial databases can save the day for any GIS application, which needs to operate effectively with features. Typical example: find all features, which are contained in rectangle with some coordinates.
Have a look at Wikipedia: List of GIS data sources
Geographical coordinate system is method for describing geographical location on Earth's surface, using measures of latitude and longitude.
Datum is mathematical model that approximates the shape of the Earth, which is quite uneven and complex. Datum is used along with coordinate system for accurate position, length and area calculations.
A Simple Explanation of Datum (Youtube)One of the most widely used global datum is WGS84.
Defacto standard in web mapping. EPSG code: EPSG:3857.
Each projection from Earth's surface to flat surface impose some distortions.
Raw geospatial data can be meaningless for human eye. Rendering is the process, which transforms raw data to another form (i.e. image), which can be understood by humans.
Rendering can be quite complex process, depending on the nature of the data and desired map look and feel.
The inputs are
Generally it depends on type of application. For web maps, we have following options.
For some interactive web maps, which lack base layer, rendering can be performed entirely in the browser.
Appropriate for complex maps, which includes a lot of features. Most popular toolkits:
Mapnik is very flexible regarding sources of data. They can be:
Drawing is performed by javascript library. The geospatial data comes in GeoJSON, CSV, WKT or other "micro" format.
Relatively easy to configure, but has limitations regarding data amount and performance.
Despite of being simpler than server renderer toolkits, JS client libraries give a lot of functionality for developer including manipulation of features, coordinates, projections, renderer styles and many more.
They allows to use base layer, rendered on the server plus additional features, rendered in the browser.
JS libraries are inevitable for every kind of interactivity of the web map!
The continuous image of the world is divided to small square images called tiles.
Map scale depends not only on zoom level, but on monitor DPI as well.
For each map "zoom level, there is separate layer of tiles
Each tile has coordinates, which depends on zoom level. For zoom level 2, tiles look like this:
Tile rendering is relatively cpu intensive process. Since most geospatial data remains unchanged for a long period of time, it is effective to cache rendered tiles.
Currently, the mostly used protocol for transfering tiles from server to client is HTTP with REST API. The common URL pattern looks like:
http://{tile_server}/{z}/{x}/{y}.png
where:Browser is powerful exection environment, capabable of interpreting HTML/CSS and JavaScript code. Modern JS engines such as V8 (Chrome) and Rhino(Mozilla) provides exceptional performance.
Implementation of interactive maps is not possible without using appropriate JS map library which:
Modern JS map libraries support many more functionalities, including:
One more truly amazing library is D3js. Not designed to deal with maps initially, now it has great support dealing with GeoJSON features and tiles.
Leaflet is one of the leading JS libraries for interactive maps. It's simplicity and performance make it an excellent choice for web and mobile apps with map support.
???
Thank you!


NODE Connection Test
Connection:
PENDING
Subscription:
PENDING
Sending:
PENDING
Receiving:
PENDING
Send-receive iterated:
PENDING


class: center middle # Memento & Signposting ## Automating the scholarly web #### ELAG 2017, 6-9 June 2017, Athens, Greece ### Nicolas Steenlant, Vitali Peil --- class: middle ## Agenda * Introduction * Memento * Signposting --- class: center middle ## About Us ### Nicolas Steenlant, Gent University Library, Belgium ### Vitali Peil, Bielefeld University Library, Germany --- class: center middle ![LibreCat](./img/librecat.png "Logo LibreCat") ## LibreCat ... is an open collaboration of the three university libraries of **Bielefeld**, **Gent** and **Lund** ... joined by developers from other institutions ... aim: provide tools for digital libraries: **Catmandu** --- class: middle # Brief overview of Catmandu --- class: middle ## Libraries collect data ... * books * journals * articles * maps * manuscripts * sheets of music * ... --- class: middle ## Libraries create metadata ... * bibliographic descriptions * holding informations * references * patron data * ... --- class: middle center ## Metadata ![Katalog](./img/code4lib.png "Katalog") --- class: middle ## Metadata ... catalogued in library specific formats (MARC, MAB2, PICA, ...) ... provided via library specific APIs (OAI, SRU, Z39.50, ...) ... used in diverse systems (OPACs, discovery systems, institutional repositories, link resolvers, ...) --- class: center middle ## Demand ... for a library specific metadata toolkit --- class: middle ## Catmandu ... provides an open source set of programming components to build up digital libraries and research services ... supports "Extract, Transform, Load" (ETL) processes --- class: middle ## Catmandu - core concepts * **Items** are the basic unit of data processing in Catmandu. Items may be read, stored, and accessed in many forms. * **Importers** are Catmandu packages to read items into an application. One can also import from remote sources for instance via Atom and OAI-PMH endpoints. * **Fixes** transforms items, massage the data into any format you like. * **Stores** are databases and search engines to store/index your data. * **Exporters** are Catmandu packages to export items from an application. * **Iterables** - Every stream of data, if it comes from Iterators, Fixes or Stores, is an iterator. With Iterators the memory consumption of your program is low: you can process Gigabytes, Terabytes of input data without ever running out of memory. --- class: middle ## A short history of the scholarly web * OAI-PMH 1999 * XML-RPC / SOAP around 2000 * Roy Fielding's REST thesis 2000 * OAI-ORE 2006 * Memento 2009 * Robust Links 2012 * ResourceSync 2014 * Signposting 2016 --- class: middle # ONE protocol to rule them all! ## http://... --- class: middle ## The essence of the web * Resources * URIs * HTTP * links * media types * content negotiation --- class: middle # How to provide more web-ish services? * Resource-centric vs. repository-centric * Older efforts used HTTP merely as a transport --- class: middle # What about Linked Data and RDF? * both approaches aim at *machine readable* resources * *course* grained and easy to implement and scale vs. *fine* grained --- class: middle # Memento ![Timetravel log](./img/timetravel_logo.png) --- class: middle ## What's Memento? * The web consists of highly dynamic resources * Older versions are still available in many cases * Many are hidden in the *dark web* * There's the internet archive https://archive.org/web/ --- class: middle ## What's Memento? Memento adds *date* negotiation and a way to discover older versions ```terminal curl -I \ -H "Accept-Datetime: Sat, 16 Jun 2012 00:00:00 GMT" \ http://timetravel.mementoweb.org/timegate/http://www.ietf.org/ ``` ```terminal HTTP/1.1 302 Found Date: Fri, 31 Oct 2014 20:44:44 GMT Content-Type: text/plain; charset=iso-8859-1 Content-Length: 0 Location: http://web.archive.org/web/20120616161314/http://www.ietf.org/ Vary: Accept-Datetime Link:
;rel="original" ,
; rel="timemap" ; type="application/link-format",
; rel="memento" ; datetime="Sat, 16 Jun 2012 16:13:14 GMT",
; rel="memento first" ; datetime="Wed, 06 Nov 1996 11:49:54 GMT",
; rel="memento last" ; datetime="Mon, 01 Sep 2014 13:11:13 GMT" ``` --- class: middle # Let's explore our VirtualBox! --- class: middle ## Exercise ### Open the chrome browser. Have a look a your favourite sites with the Memento Plugin! --- ## How does Memento work? ![Memento](./img/memento.png "Memento") --- class: middle # Let's create our own Memento-aware web service! --- class: middle ## We need some data first. Clone the repo: ```terminal git clone git@github.com:vpeil/ELAG2017-Memento-Signposting.git ``` The `share` directory contains some JSON files. Read the catmandu documentation and load some data into a MongoDB. Import: ```terminal $ catmandu import to MongoDB --database-name elag \ --bag pub < share/pub.json $ catmandu import to MongoDB --database-name elag \ --bag pub_version < share/pub_version.json ``` To check: ```terminal $ catmandu export MongoDB --database-name elag --bag pub to YAML ``` --- ## Make a small web app We need some extra components: ```terminal $ cpanm Plack::App::Catmandu::Bag $ cpanm Plack::Middleware::Memento $ cpanm Plack::Middleware::Memento::Handler::Catmandu::Bag ``` The web app is simply a file called app.psgi: ```terminal use Catmandu; use Plack::Builder; use Plack::App::Catmandu::Bag; Catmandu->define_store('elag', MongoDB => ( database_name => 'elag', bags => { pub => { plugins => ['Versioning', 'Datestamps'] } } )); my $app = Plack::App::Catmandu::Bag->new(store => 'elag', bag => 'pub'); builder { enable 'Memento', handler => 'Catmandu::Bag', store => 'elag', bag => 'pub'; $app->to_app; }; ``` --- ## Make a small web app Run it with: ```terminal $ plackup app.psgi ``` --- ## How to find *mementos* for a given list of URIs? Install another module ```terminal $ cpanm Catmandu::Identifier ``` and read ```terminal $ perldoc Catmandu::Fix::memento_find ``` --- ## Solution: How to find mementos. ```terminal catmandu convert CSV to CSV --fix 'memento_find(url, 2013)' < urls.csv ``` --- class: center # Signposting ![Sign](./img/greek_sign.jpg) --- class: center middle ![LibreCat](./img/signposting.png "Logo Signposting") --- class: middle ## Solution ### *"Signposting is an approach to make the scholarly web more friendly to machines. It uses Typed Links in HTTP Link headers as a means to clarify patterns that occur repeatedly in scholarly portals."* ### *"Signpost the Scholarly Web as a means to achieve broad, coarse, yet meaningful, interoperation across nodes in the web-based scholarly communication and research environment."* --- class:middle ## What are these patterns? ![Signposting](./img/signposting_graph.png "Signposting Graph") --- class: middle ```terminal $ curl -I "https://search.datacite.org/works/10.6084/M9.FIGSHARE.3501629" HTTP/1.1 200 OK Access-Control-Allow-Headers: Content-Type,Accept,Accept-Encoding,Origin, User-Agent,Cache-Control,Keep-Alive Access-Control-Allow-Origin: * Content-Length: 18238 Content-Type: text/html;charset=utf-8 Date: Fri, 12 May 2017 05:09:16 GMT Link:
; rel="identifier",
; rel="describedby" ; type="application/vnd.datacite.datacite+xml",
; rel="describedby" ; type="application/vnd.citationstyles.csl+json",
; rel="describedby" ; type="application/x-bibtex" Server: openresty/<IP_ADDRESS> Status: 200 OK X-Content-Type-Options: nosniff X-Frame-Options: SAMEORIGIN X-Powered-By: Phusion Passenger 5.1.4 X-XSS-Protection: 1; mode=block Connection: keep-alive``` --- class: middle ```terminal Link:
; rel="identifier",
; rel="describedby" ; type="application/vnd.datacite.datacite+xml",
; rel="describedby" ; type="application/vnd.citationstyles.csl+json",
; rel="describedby" ; type="application/x-bibtex" ``` --- class: middle ```terminal $ curl -I "https://doi.pangaea.de/10.1594/PANGAEA.867908" ... Link:
; rel="identifier"
; rel="describedby"; type="application/x-research-info-systems",
; rel="describedby"; type="application/x-bibtex",
; rel="item"; type="application/zip",
; rel="author" ... ``` For more examples visit http://signposting.org/adopters/ --- ## Make a small web app ```terminal cpanm Plack::Middleware::Signposting ``` Let's copy our previous web app and change it a bit. ```terminal $ cp app.psgi app2.psgi ``` We need to transform our data. ```terminal ... builder{ enable 'Signposting::JSON', fix => 'signposting.fix'; $app->to_app; }; ``` --- ## Write a fix file *singposting.fix* to transform our data. We need the data in the following form: ```json [ [uri, relation, type], [uri, relation, type], ... ] ``` (type is optional) --- ## Start your signposting web app. ```terminal $ plackup app2.psgi ``` --- ## Further developments github, zenodo, figshare --- class: middle ## Literature * https://www.slideshare.net/hvdsomp/interoperability-for-web-based-scholarship * Van de Sompel, H., Michael L. Nelson. 2015. Reminiscing About 15 Years of Interoperability Efforts. D-Lib Magazine 21 (11/12). 10.1045/november2015-vandesompel --- class: middle # THANK YOU! nicolas.steenlant [at] ugent.be vitali.peil [at] uni-bielefeld.de


Topic
Life sciences in general, and particularly biology, are experiencing a revolution due technological innovations that allow easy, efficient, and comparatively unexpensive data acquisition. For instance, the advent of deep sequencing technologies (also termed "High Throughput Sequencing" or "Next Generation Sequencing") in 2005, has not only boosted the volume of data produced, but also stirred hundreds of new uses of (new types of assays based on) sequencing. With these, life scientists can now obtain in a single experiment enough sequences to reconstruct an entire Human genome sequence. Similar technological breakthroughs also arise in imaging or in bio-logging.


The msgpack API enables structured communication to and from any programming language. Remote plugins run as co-processes that communicate with Neovim safely and asynchronously.
GUIs (or TUIs such as readline)
can nvim --embed
or communicate via named pipe using the
discoverable msgpack API.
Neovim is an extension of Vim: feature-parity and backwards
compatibility are high priorities. If you are already familiar with Vim,
see :help nvim-from-vim
to learn about the differences.
"Neovim is exactly what it claims to be. It fixes every issue I have with Vim." —Geoff Greer
"OMG! @Neovim just works :)" —@mehowte
"A nice looking website, that’s one thing Neovim did right." —Bram Moolenaar
Development happens in the GitHub repository. Discuss the project at gitter.im/neovim, IRC (#neovim on irc.freenode.net) or the mailing list.
0.1
.
See the wiki
for install instructions,
milestones
for current development progress, and the roadmap for future plans.
Subscribe to the newsletter or follow us on Twitter to stay up-to-date on project news.
Follow @NeovimSVG and PNG versions of the Neovim logo are available in the following zip file.
Neovim-logos.zip (1.1 MB)
The Neovim logo by Jason Long is licensed under the Creative Commons Attribution 3.0 Unported License.
You can donate to the Neovim project on Bountysource.


Class TargetBase
Abstract base class, suggested as a starting point for implementations of ITarget.
Inheritance
Implements
Inherited Members
Namespace: Rezolver.Targets
Assembly: Rezolver.dll
Syntax
public abstract class TargetBase : ITarget
Constructors
| Improve this Doc View SourceTargetBase()
Default constructor for derived types
Declaration
protected TargetBase()
TargetBase(Guid)
Can be used by derived types to initialise the base with a specific ID. Specifically used by targets which 'proxy' others, such as with the VariantMatchTarget etc.
Declaration
protected TargetBase(Guid id)
Parameters
| Type | Name | Description |
|---|---|---|
| Guid | id |
Properties
| Improve this Doc View SourceDeclaredType
Gets the declared type of object that is constructed by this target.
Declaration
public abstract Type DeclaredType { get; }
Property Value
| Type | Description |
|---|---|
| Type |
Id
Declaration
public Guid Id { get; }
Property Value
| Type | Description |
|---|---|
| Guid |
ScopeBehaviour
Gets the scoping behaviour for instances that will ultimately be produced by this target.
Declaration
public virtual ScopeBehaviour ScopeBehaviour { get; }
Property Value
| Type | Description |
|---|---|
| ScopeBehaviour | The scope behaviour. |
Remarks
Base implementation always returns Implicit.
ScopePreference
Get the preferred scope in which an object produced from this target should be tracked.
Declaration
public virtual ScopePreference ScopePreference { get; }
Property Value
| Type | Description |
|---|---|
| ScopePreference |
Remarks
Base implementation always returns Current
UseFallback
Implementation of UseFallback
Base version always returns false
.
Declaration
public virtual bool UseFallback { get; }
Property Value
| Type | Description |
|---|---|
| Boolean |
Methods
| Improve this Doc View SourceSupportsType(Type)
Implementation of SupportsType(Type). Returns a boolean indicating whether the target
is able to produce an instance of, or an instance that is compatible with, the passed type
.
Declaration
public virtual bool SupportsType(Type type)
Parameters
| Type | Name | Description |
|---|---|---|
| Type | type | The type. |
Returns
| Type | Description |
|---|---|
| Boolean |
Remarks
It is strongly suggested that you use this method to check whether the target can construct an instance of a given type rather than performing any type checking yourself on the DeclaredType, because an ITarget might be able to support a much wider range of types other than just those which are directly compatible with its DeclaredType.
For example, the GenericConstructorTarget is statically bound to an open generic, so therefore
traditional type checks on the DeclaredType do not work. That class' implementation of this
method, however, contains the complex logic necessary to determine if the open generic can be closed into a
generic type which is compatible with the given type
.
Implementations of ITargetCompiler should always consult this function in their implementation of CompileTarget(ITarget, ICompileContext) to determine if the target is compatible with the TargetType of the CompileContext
ToString()
Returns a string similar to "<[TargetType], DeclaredType=[DeclaredType]>"
Declaration
public override string ToString()
Returns
| Type | Description |
|---|---|
| String |


Floorplans
Rooms
Room Stats
Occupancy
%
Meeting Length
30
60
90
120
150
Date Range
Time of Day
—
Day of Week
Room
Occupancy
Meeting Length
30
60
90
120
150+
Summary
Print
Occupancy
%
Meeting Length
30
60
90
120
150
UN
OCCUPIED FOR


i was really happy, when i saw the groups feature in battlelog, but i have a question: How to remove a created group?
Also i have an idea:
Could it be possible to add a friendslist beside the battlelog-limit, so you can have more than 100 friends?
Chat feature is not necessary needed, just to see the online-status of more friends than the 100limit.
Regards,
IdiotPiIot
Meaurk
Global Moderator
At the right side of the group name there should be a little cross. Click it and the group will be deleted.
Post edited 1 x times, last by
Fenriswolf
Topicstarter
Fenriswolf
ah ok,
this button can't be seen in standard design. (only if you move your mouse above it)
kokusz19
And how can i add a friend to a group? :\
Post edited 2 x times, last by
BrainFooLong
Administrator
BrainFooLong
Administrator
No friends over the limit of 100 possible.
Add/Remove friends via right click on the friends name.
Topicstarter
Fenriswolf
BrainFooLong wrote:
No friends over the limit of 100 possible.
May it be possible to have a list below the comcenter with onlinestatus of some guys, which i have the battlelog from? just like that stalk plugins, just for friends?
BrainFooLong
Administrator
Fenriswolf wrote:
May it be possible to have a list below the comcenter with onlinestatus of some guys, which i have the battlelog from? just like that stalk plugins, just for friends?
No.
Topicstarter
Fenriswolf
Too Bad.
Anyway thanks for your help
Meaurk
Global Moderator
Maybe some plugin developers are able to make this, just ask them. :-)
ocknoz
Hi, after exporting my BBlog settings to JSON I noticed the identifier for the groups is "undefined.groups". This might not be a problem, just wanted to let you know.
See snippet of my settings here:
http://pastebin.com/V9sfzEJY
BrainFooLong
Administrator
ocknoz wrote:
Hi, after exporting my BBlog settings to JSON I noticed the identifier for the groups is "undefined.groups". This might not be a problem, just wanted to let you know.
See snippet of my settings here:
http://pastebin.com/V9sfzEJY
Thx for information. Not a problem, but a coding bug, thx.


Poll: 75% of Democrats Would Back Democratic Socialist Candidate
A Hill-HarrisX poll released on Wednesday shows that 75 percent of Democrats would vote for a Democratic Socialist candidate.
by Penny StarrIn contrast, only 26 percent of Republicans and 36 percent of independents say they would back someone who describes themselves as a Democratic Socialist.
The Hill reported on its poll, which the media outlet said comes after a number of far left candidates were elected to Congress in 2018, including the Squad — Reps. Alexandria Ocasio-Cortez (D-NY), Ilhan Omar (D-MN), Rashida Tlaib (D-MI) and Ayanna Pressley (D-MA):
Younger voters were also more likely to throw their support behind a self-described democratic socialist. Seventy-four percent of those aged 18-34 said they would back a candidate with the tag, compared to 52 percent of those aged 35-49 and 30 percent of those aged 50-64. However, voters were nearly evenly split on the term overall: 48 percent of those polled said they would support a democratic socialist, while 52 percent said they would not.
The Hill noted that Sen. Bernie Sanders (I-VT) is the only one running for the 2020 Democrat presidential nomination who has embraced that title and has defended his ideology as carrying on the President Franklin Delano Roosevelt “New Deal,” redistribution of wealth model.
The Hill-HarrisX online survey asked questions of 523 registered voters between Nov. 1 and Nov. 2. The margin of error for the full sampling is plus or minus 4.3 percentage points.
Follow Penny Starr on Twitter


---
layout: post
title: Installing Sentry and Raven for Logging in Django
published: true
meta:
posterous_60e8ef2b7d9ddd23e14a941a8878b49c_post_id: "103373027"
posterous_60e8ef2b7d9ddd23e14a941a8878b49c_permalink: http://maxlynchmadison.posterous.com/installing-sentry-and-raven-for-logging-in-dj
tags: []
type: post
status: publish
---
I finally got Sentry and Raven correctly installed for Django, and I thought it was worth a really quick blog post, considering the gaping holes in documentation the projects have.
If you've used django-sentry before, the project has been split into a generic logging server (Sentry) and logging clients (Raven). The goal I guess is to make Sentry more framework and language agnostic. It comes at a pretty heavy cost of additional complexity compared to the old django-sentry. I've broken the steps down to make it easier to install.
Be aware, these steps below require Django 1.3.1, and will not work without it (see the raven docs for older versions of Django).
1. Install Sentry
If you are using virtualenv I'll assume you already know how to manage your packages with it, so adjust this command accordingly. Run
easy_install -U sentry
2. Install Raven
easy_install -U raven
3. Configure sentry
Sentry uses a simple python file to configure itself. We must create the config file by running
sentry init
which will use the default path of ~/.sentry/
sentry.conf.py. If you want to change it, run
4. Create sentry tables
5. Configure django
Add 'raven.contrib.django' to your INSTALLED_APPS tuple. Copy over the SENTRY_KEY value generated inside the
sentry.conf.py file and add it to your django settings file:
SENTRY_KEY='KEYHERE'
6. Run sentry
7. View sentry and copy project public and private key
This part hung me up for a long time as the docs seemed to just assume you would know how to configure django to connect to the sentry server. Open up your browser and point it to the running instance of sentry (9000 is the default port). Log in with the admin user/password created with the sentry upgrade command, and click Projects -> Manage on the dropdown in the header of the sentry dashboard. Copy the long URL under "Default"
8. Configure Raven to send logging to Sentry in your Django app
Paste that URL into this value in your django settings file:
SENTRY_DSN='URL HERE'
Add these lines in your views file or wherever you want to log to Sentry:
client = get_client()
client.captureException()
logger = logging.getLogger(__name__)
9. Log away
Call logger.error() to log an error, for example.
Conclusion
Sentry is awesome, but the docs are too opaque. I hope this helps you get logging set up for your Django app!


Productivity Tools on all platforms
Matching my most frequently used tools on OSX, Linux and Windows
28 August 2018 | 30 August 2018
Productivity toolsI’ve grown so accustomed to some of Neal Ford’s The Productive Programmer “power tools” that each time I install a new OS or get a new laptop, I start with my list of cant-live-without tools. I don’t usually switch between OSes a lot, but my recent switch of work environment has opened up the possibility to boot Linux again, next to Windows 10 or of course my beloved own laptop with OSX.
Problem is, none of those tools seem to be 100% cross-platform or work exactly the same as I expect them to work. That can be a pain if I work on Ubuntu at work but on OSX at home, or if I need to switch to Windows for a student project. Alternatives almost always exist, so here’s a short overview of my tooling usage with their counterparts on each OS.
Don’t forget to take a look at the publication date of this page as especially Unix tools have the bad habit of dying within a few years… I will try to keep this up to date when I adopt another tool.
100% Cross-platform tools
- IDEA IDEs like CLion, PyCharm and IntelliJ
- Opera
- Spotify
- Any great editor: Sublime Text, Visual Studio Code, GVim
The newer version of Opera has built-in adblock support and reduces battery drain for up to an hour compared to (lots of) open tabs with Chrome! My Macbook Air’s battery is slowly giving up so that’s a major factor for me. Opera’s JS eninge uses the same one as Chrome by the way.
Shortcut usage in IDEs or editors can be confusing if you’re used to the CMD or ALT keys of a Mac (or vice versa).
Quicklaunching
OSX: CMD+Space is all you need. There are tools that enhance the experience but I find them unneeded since El Capitan.
Ubuntu: Unity’s “dash” thing does almost what I want: it searches in possible software and files and it’s (a bit) customizable. The only problem is mapping it to CMD (or CTRL)+Space. This can be done in the Keyboard shortcut settings, but after choosing CTRL+Space I had to revert to Super+Space: the latter key combination has already been heavily used to autocomplete statements in IDEs!
Same ALT+TAB behavior
Linux’ virtual desktops makes for a very configurable environment but that also means ALT+TAB might or might not include windows in the current active desktop. I simply like to “have them all” in there, meaning I again had to modify some settings. I had to install the CompizConfig Settings Manager and go to Desktop -> Ubuntu Unity Plugin -> Launcher to fiddle with the available key options in subtab “switcher”.
Multitouch
OSX: built-in. Of course…
Ubuntu: Again a bit of a pain, even if it comes with a lot of flexibility. Scrolling with both fingers works out of the box, but swiping combined with a browser does not - ALT+LEFT/RIGHT need to be mapped to swiping. Fusuma is a small Ruby tool that monitors input and executes things based on a config file. It does not work with 2 finger motions meaning I have to do an unnecessary context switch between OSX and Ubuntu…
After a week working with Fusuma and alternatives, I’m a bit disappointed by the lack of a solid implementation. Scrolling to the next virtual window for example works but without releasing the touch pad, scrolling back to the previous (by swiping up again) doesn’t: after a motion is recognized, touch input needs to be interrupted.
Clipboard histroy
Windows: Happy CLCL user for years.
OSX: ClipMenu is free and works well.
Ubuntu: Diodon does exactly what I need after mapping ALT+C to command /usr/bin/diodon
.
Mail clients
If GMail isn’t an option, like my current work address, a mail client that emulates a threaded view is the next best thing. Again OSX wins here with the built-in Mail application that works exactly as I want it to work.
As an alternative, on any OS, there’s Mozilla Thunderbird. It is a hassle to get calendars and threaded views working though, I had to follow these steps to show sent messages in thread view and that still isn’t what I want. There are “gmail conversation”-alike plugins like this one that come as close as they can get to what I’m aimnig for. Don’t forget the Lightning Calendar extension.
Terminals
Windows: Install Cmder and never look back. The cygwin toolchain can also be installed, I’m not sure if GCC is included with Cmder.
OSX: Install iTerm2 and never look back.
Ubuntu: Still evaluating whether the default gnome-terminal is sufficient for me. You have to remap the creation of a new tab to CTRL+T in the settings if you’re used to iTerm. Guake and Terminator seem like good fits, but the default terminal isn’t that far away with CTRL+ALT+T.
Custom commands
That’s simply a matter of configuring your .bashrc
or .bash_profile
files - given you think the bash shell is good enough. I’ve used the Z shell for years but for what I do now, Bash is more than enough. I’m not a big fan of installing a lot of power tools for the sake of installing them.
Misc OS Things
Quick access to development folder
OSX’s Finder makes it easy to create shortcuts for directories that have been heavily used, like my ~/development
dir where all repositories live. Luckily, Ubuntu’s file manger also has this feature:
Taking screenshots of areas
Emulating OSX’s CMD+ALT+4 on Ubuntu works by mapping CTRL+ALT+4 in the Keyboard shortcut manager to gnome-screenshot -a
.
For Windows 10, if ALT+Screenshot or Win+Screenshot don’t suffice (the problem is uniformity with other OSes here!), the snipping tool will work but doesn’t have a shortcut bind to it. In the windows menu, rightclick on snipping tool after searching for it and set a shortcut key in tab “Shortcut”. CTRL+Screenshot then creates a new screenshot for an area.
Auto-expand directories when hovering files
Very annoying but it seems that Gnome has this option disabled by default and you have to re-enable it with gsettings set org.gnome.nautilus.preferences open-folder-on-dnd-hover true
in a CLI.
Window movement shortcuts
This can get very far, I have used Fvwm once and spent weeks on perfecting my shortcut configuration for windows and window management. Luckily that time of fiddling about is over and I must say that the Win+Left/Right key combination in Windows (and Ubuntu) works quite well. Win+Up does nothing in Ubuntu though, so get ready to fiddle again if you want them to work exactly like in Windows…
For OSX, Spectacle is a requirement.


Ulysses Review
So when I discovered Markdown, I quickly became a fan. The ease of creating content and not having to worry to much regarding the style of the content until after the writing was finished reminded me of LaTeX but allowed a much easier syntax to be used and it was also cross platform and compatible with Mac, Windows and iPad.
But as someone that writes a lot, not only for my work (try writing a thesis!) but also in his free time, I’m constantly trying new software to try and make it easier or to help me write better.
So I tried Scrivener a few months back and whilst I thought it was reasonable, I couldn’t see it fitting in with my workflow (especially considering it was already established for my thesis).
This time, I decided to try Ulysses as it was recently in the $2 Tuesday deal (which is well worth checking out).
Ulyssess
So Ulysses has been around for a while (it’s website says it originally released in 2003). I’d not heard of it until I got a Mac and seriously looked at writing and then I decided to investigate it. It describes itself as:
a semantic text editor that borrows concepts from Setext and LaTeX > >
Sounded promising, as separating the writing and layout is something I agree wholeheartedly with when writing.
When opening, you’re presented with the following screen:
Looks fairly similar to the Scrivener screen and I believe that Scrivener was based off a similar idea to Ulysses so that would make sense. You have the project window which shows your documents within the project and then document window where you enter the text. Lastly, you have the notes panel where you can make notes for the project.
Usage
I may be unfair on this product because the more I tried to use it, the less I could see it working as I wanted it to. Maybe I’m just stuck in my ways with my Markdown editing but I struggled to remember the language that Ulysses uses to represent emphasis and strong elements. I could possibly change these to match Markdown in which case it may improve – at the minute it seems similar but sufficiently different enough to confuse. All my not be lost though as v3 might appear to treat Markdown as it’s own language if the beta is anything to go by. source.
Storing data as a proprietary file format is a pain as well but I can see why they do it and to be fair, you can export as a plain text file so all is not lost. However, you cant edit the file on an iPad (as there isn’t an iOS version yet).
I tried to create a template file that I could use for writing Micro Mart articles by creating a project, then creating a document for each section that I needed to write (such as headline, standfirst, body, drop quotes and images) but the export options made it actually a pain to export them (I repeatedly exported just the document I was working on, not the project). I found it much easier to use my Textxpander snippet to populate a Markdown document with the template and then fill that in. Mainly because I didn’t find a place for the Ulysses and Scrivener note taking section because Evernote covers that nicely. The fact I can also edit Markdown files on the go is also a big boon.
Overall, Ulysses might be a polished product but I just couldn’t find a use for that suited me – I did however like the individual documents word count which would make it easier for tracking word counts in a Micro Mart article but at the end of the day, that can be done in other ways (less easily admittly).


Apache HTTP Server Version 1.3
Module mod_rewrite
This module is contained in the
URL Rewriting Enginemod_rewrite.c
file, with Apache 1.2 and later. It provides a rule-based rewriting engine to rewrite requested URLs on the fly. It is not compiled into the server by default. To usemod_rewrite
you have to enable the following line in the server buildConfiguration
file:AddModule modules/standard/mod_rewrite.o
Summary
``The great thing about mod_rewrite is it gives you all the configurability and flexibility of Sendmail. The downside to mod_rewrite is that it gives you all the configurability and flexibility of Sendmail.''-- Brian Behlendorf
Apache GroupWelcome to mod_rewrite, the Swiss Army Knife of URL manipulation!`` Despite the tons of examples and docs, mod_rewrite is voodoo. Damned cool voodoo, but still voodoo. ''-- Brian Moore
<EMAIL_ADDRESS>module uses a rule-based rewriting engine (based on a regular-expression parser) to rewrite requested URLs on the fly. It supports an unlimited number of rules and an unlimited number of attached rule conditions for each rule to provide a really flexible and powerful URL manipulation mechanism. The URL manipulations can depend on various tests, for instance server variables, environment variables, HTTP headers, time stamps and even external database lookups in various formats can be used to achieve a really granular URL matching.
This module operates on the full URLs (including the path-info part) both in per-server context (
httpd.conf
) and per-directory context (.htaccess
) and even can generate query-string parts on result. The rewritten result can lead to internal sub-processing, external request redirection or even to an internal proxy throughput.But all this functionality and flexibility has its drawback: complexity. So don't expect to understand this module in it's whole in just one day.
This module was invented and originally written in April 1996
and gifted exclusively to the The Apache Group in July 1997 by
Ralf S. Engelschall
<EMAIL_ADDRESS>www.engelschall.com
Table Of Contents
Internal Processing
Configuration Directives
Miscellaneous
- RewriteEngine
- RewriteOptions
- RewriteLog
- RewriteLogLevel
- RewriteLock
- RewriteMap
- RewriteBase
- RewriteCond
- RewriteRule
Internal Processing
The internal processing of this module is very complex but needs to be explained once even to the average user to avoid common mistakes and to let you exploit its full functionality.
API Phases
First you have to understand that when Apache processes a HTTP request it does this in phases. A hook for each of these phases is provided by the Apache API. Mod_rewrite uses two of these hooks: the URL-to-filename translation hook which is used after the HTTP request was read and before any authorization starts and the Fixup hook which is triggered after the authorization phases and after the per-directory config files (
.htaccess
) where read, but before the content handler is activated.So, after a request comes in and Apache has determined the corresponding server (or virtual server) the rewriting engine start processing of all mod_rewrite directives from the per-server configuration in the URL-to-filename phase. A few steps later when the final data directories are found, the per-directory configuration directives of mod_rewrite are triggered in the Fixup phase. In both situations mod_rewrite either rewrites URLs to new URLs or to filenames, although there is no obvious distinction between them. This is a usage of the API which was not intended this way when the API was designed, but as of Apache 1.x this is the only way mod_rewrite can operate. To make this point more clear remember the following two points:
- The API currently provides only a URL-to-filename hook. Although mod_rewrite rewrites URLs to URLs, URLs to filenames and even filenames to filenames. In Apache 2.0 the two missing hooks will be added to make the processing more clear. But this point has no drawbacks for the user, it is just a fact which should be remembered: Apache does more in the URL-to-filename hook then the API intends for it.
- Unbelievably mod_rewrite provides URL manipulations in per-directory context, i.e., within
.htaccess
files, although these are reached a very long time after the URLs were translated to filenames (this has to be this way, because.htaccess
files stay in the filesystem, so processing has already been reached this stage of processing). In other words: According to the API phases at this time it is too late for any URL manipulations. To overcome this chicken and egg problem mod_rewrite uses a trick: When you manipulate a URL/filename in per-directory context mod_rewrite first rewrites the filename back to its corresponding URL (which it usually impossible, but see theRewriteBase
directive below for the trick to achieve this) and then initiates a new internal sub-request with the new URL. This leads to a new processing of the API phases from the beginning.Again mod_rewrite tries hard to make this complicated step totally transparent to the user, but you should remember here: While URL manipulations in per-server context are really fast and efficient, per-directory rewrites are slow and inefficient due to this chicken and egg problem. But on the other hand this is the only way mod_rewrite can provide (locally restricted) URL manipulations to the average user.
Don't forget these two points!
Ruleset Processing
Now when mod_rewrite is triggered in these two API phases, it reads the configured rulesets from its configuration structure (which itself was either created on startup for per-server context or while the directory walk of the Apache kernel for per-directory context). Then the URL rewriting engine is started with the contained ruleset (one or more rules together with their conditions). The operation of the URL rewriting engine itself is exactly the same for both configuration contexts. Just the final result processing is different.The order of rules in the ruleset is important because the rewriting engine processes them in a special order. And this order is not very obvious. The rule is this: The rewriting engine loops through the ruleset rule by rule (
RewriteRule
directives!) and when a particular rule matched it optionally loops through existing corresponding conditions (RewriteCond
directives). Because of historical reasons the conditions are given first, the control flow is a little bit winded. See Figure 1 for more details.
Figure 1: The control flow through the rewriting ruleset As you can see, first the URL is matched against the Pattern of each rule. When it fails mod_rewrite immediately stops processing this rule and continues with the next rule. If the Pattern matched, mod_rewrite looks for corresponding rule conditions. If none are present, it just substitutes the URL with a new value which is constructed from the string Substitution and goes on with its rule-looping. But if conditions But if conditions exists, it starts an inner loop for processing them in order they are listed. For conditions the logic is different: We don't match a pattern against the current URL. Instead we first create a string TestString by expanding variables, back-references, map lookups, etc. and then we try to match TestPattern against it. If the pattern doesn't match, the complete set of conditions and the corresponding rule fails. If the pattern matches, then the next condition is processed until no more condition is available. If all conditions matched processing is continued with the substitution of the URL with Substitution.
Regex Back-Reference Availability
One important thing here has to be remembered: Whenever you use parenthesis in Pattern or in one of the TestPattern back-reference are internally created which can be used with the strings$N
and%N
(see below). And these are available for creating the strings Substitution and TestCond. Figure 2 shows at which locations the back-references are transfered to for expansion.
Figure 2: The back-reference flow through a rule We know, this was a crash course of mod_rewrite's internal processing. But you will benefit from this knowledge when reading the following documentation of the available directives.
Configuration Directives
RewriteEngine
Syntax:RewriteEngine
{on,off
}
Default:RewriteEngine off
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2
The
RewriteEngine
directive enables or disables the runtime rewriting engine. If it is set tooff
this module does no runtime processing at all. It does not even update theSCRIPT_URx
environment variables.Use this directive to disable the module instead of commenting out all
RewriteRule
directives!Note that, by default, rewrite configurations are not inherited. This means that you need to have a
RewriteEngine on
directive for each virtual host you wish to use it in.
RewriteOptions
Syntax:RewriteOptions
Option
Default: None
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2
The
RewriteOptions
directive sets some special options for the current per-server or per-directory configuration. The Option strings can be one of the following:
- '
inherit
'
This forces the current configuration to inherit the configuration of the parent. In per-virtual-server context this means that the maps, conditions and rules of the main server gets inherited. In per-directory context this means that conditions and rules of the parent directory's.htaccess
configuration gets inherited.
RewriteLog
Syntax:RewriteLog
Filename
Default: None
Context: server config, virtual host
Override: Not applicable
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2
The
RewriteLog
directive sets the name of the file to which the server logs any rewriting actions it performs. If the name does not begin with a slash ('/
') then it is assumed to be relative to the Server Root. The directive should occur only once per server config.
Notice: To disable the logging of rewriting actions it is not recommended to set Filename to /dev/null
, because although the rewriting engine does not create output to a logfile it still creates the logfile output internally. This will slow down the server with no advantage to the administrator! To disable logging either remove or comment out theRewriteLog
directive or useRewriteLogLevel 0
!
Security: See the Apache Security Tips document for details on why your security could be compromised if the directory where logfiles are stored is writable by anyone other than the user that starts the server. Example:
RewriteLog "/usr/local/var/apache/logs/rewrite.log"
RewriteLogLevel
Syntax:RewriteLogLevel
Level
Default:RewriteLogLevel 0
Context: server config, virtual host
Override: Not applicable
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2
The
RewriteLogLevel
directive set the verbosity level of the rewriting logfile. The default level 0 means no logging, while 9 or more means that practically all actions are logged.To disable the logging of rewriting actions simply set Level to 0. This disables all rewrite action logs.
Notice: Using a high value for Level will slow down your Apache server dramatically! Use the rewriting logfile only for debugging or at least at Level not greater than 2! Example:
RewriteLogLevel 3
RewriteLock
Syntax:RewriteLock
Filename
Default: None
Context: server config, virtual host
Override: Not applicable
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.3
This directive sets the filename for a synchronization lockfile which mod_rewrite needs to communicate with RewriteMap programs. Set this lockfile to a local path (not on a NFS-mounted device) when you want to use a rewriting map-program. It is not required for SAMP using all other types of rewriting maps.
RewriteMap
Syntax:RewriteMap
MapName MapType:
MapSource
Default: not used per default
Context: server config, virtual host
Override: Not applicable
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2 (partially), Apache 1.3
The
RewriteMap
directive defines a Rewriting Map which can be used inside rule substitution strings by the mapping-functions to insert/substitute fields through a key lookup. The source of this lookup can be of various types.The MapName is the name of the map and will be used to specify a mapping-function for the substitution strings of a rewriting rule via one of the following constructs:
When such a construct occurs the map MapName is consulted and the key LookupKey is looked-up. If the key is found, the map-function construct is substituted by SubstValue. If the key is not found then it is substituted by DefaultValue or the empty string if no DefaultValue was specified.${
MapName:
LookupKey}
${
MapName:
LookupKey|
DefaultValue}
The following combinations for MapType and MapSource can be used:
The
- Standard Plain Text
MapType:txt
, MapSource: Unix filesystem path to valid regular fileThis is the standard rewriting map feature where the MapSource is a plain ASCII file containing either blank lines, comment lines (starting with a '#' character) or pairs like the following - one per line.
MatchingKey SubstValueExample:
## ## map.txt -- rewriting map ## Ralf.S.Engelschall rse # Bastard Operator From Hell Mr.Joe.Average joe # Mr. Average
RewriteMap real-to-user txt:/path/to/file/map.txt
- Randomized Plain Text
MapType:rnd
, MapSource: Unix filesystem path to valid regular fileThis is identical to the Standard Plain Text variant above but with a special post-processing feature: After looking up a value it is parsed according to contained ``
|
'' characters which have the meaning of ``or''. Or in other words: they indicate a set of alternatives from which the actual returned value is chosen randomly. Although this sounds crazy and useless, it was actually designed for load balancing in a reverse proxy situation where the looked up values are server names. Example:
## ## map.txt -- rewriting map ## static www1|www2|www3|www4 dynamic www5|www6
RewriteMap servers rnd:/path/to/file/map.txt
- Hash File
MapType:dbm
, MapSource: Unix filesystem path to valid regular fileHere the source is a binary NDBM format file containing the same contents as a Plain Text format file, but in a special representation which is optimized for really fast lookups. You can create such a file with any NDBM tool or with the following Perl script:
#!/path/to/bin/perl ## ## txt2dbm -- convert txt map to dbm format ## ($txtmap, $dbmmap) = @ARGV; open(TXT, "<$txtmap"); dbmopen(%DB, $dbmmap, 0644); while (<TXT>) { next if (m|^s*#.*| or m|^s*$|); $DB{$1} = $2 if (m|^\s*(\S+)\s+(\S+)$|); } dbmclose(%DB); close(TXT)
$ txt2dbm map.txt map.db
- Internal Function
MapType:int
, MapSource: Internal Apache functionHere the source is an internal Apache function. Currently you cannot create your own, but the following functions already exists:
- toupper:
Converts the looked up key to all upper case.- tolower:
Converts the looked up key to all lower case.
- External Rewriting Program
MapType:prg
, MapSource: Unix filesystem path to valid regular fileHere the source is a Unix program, not a map file. To create it you can use the language of your choice, but the result has to be a run-able Unix executable (i.e., either object-code or a script with the magic cookie trick '
#!/path/to/interpreter
' as the first line).This program gets started once at startup of the Apache servers and then communicates with the rewriting engine over its
stdin
andstdout
file-handles. For each map-function lookup it will receive the key to lookup as a newline-terminated string onstdin
. It then has to give back the looked-up value as a newline-terminated string onstdout
or the four-character string ``NULL
'' if it fails (i.e., there is no corresponding value for the given key). A trivial program which will implement a 1:1 map (i.e., key == value) could be:
#!/usr/bin/perl $| = 1; while (<STDIN>) { # ...here any transformations # or lookups should occur... print $_; }But be very careful:
- ``Keep the program simple, stupid'' (KISS), because if this program hangs it will lead to a hang of the Apache server when the rule occurs.
- Avoid one common mistake: never do buffered I/O on
stdout
! This will cause a deadloop! Hence the ``$|=1
'' in the above example...- Use the RewriteLock directive to define a lockfile mod_rewrite can use to synchronize the communication to the program. Per default no such synchronization takes place.
RewriteMap
directive can occur more than once. For each mapping-function use oneRewriteMap
directive to declare its rewriting mapfile. While you cannot declare a map in per-directory context it is of course possible to use this map in per-directory context.
Notice: For plain text and DBM format files the looked-up keys are cached in-core until the mtime
of the mapfile changes or the server does a restart. This way you can have map-functions in rules which are used for every request. This is no problem, because the external lookup only happens once!
RewriteBase
Syntax:RewriteBase
BaseURL
Default: default is the physical directory path
Context: directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2
The
RewriteBase
directive explicitly sets the base URL for per-directory rewrites. As you will see below,RewriteRule
can be used in per-directory config files (.htaccess
). There it will act locally, i.e., the local directory prefix is stripped at this stage of processing and your rewriting rules act only on the remainder. At the end it is automatically added.When a substitution occurs for a new URL, this module has to re-inject the URL into the server processing. To be able to do this it needs to know what the corresponding URL-prefix or URL-base is. By default this prefix is the corresponding filepath itself. But at most websites URLs are NOT directly related to physical filename paths, so this assumption will be usually be wrong! There you have to use the
RewriteBase
directive to specify the correct URL-prefix.
Notice: If your webserver's URLs are not directly related to physical file paths, you have to use RewriteBase
in every.htaccess
files where you want to useRewriteRule
directives.Example:
Assume the following per-directory config file:
# # /abc/def/.htaccess -- per-dir config file for directory /abc/def # Remember: /abc/def is the physical path of /xyz, i.e., the server # has a 'Alias /xyz /abc/def' directive e.g. # RewriteEngine On # let the server know that we are reached via /xyz and not # via the physical path prefix /abc/def RewriteBase /xyz # now the rewriting rules RewriteRule ^oldstuff\.html$ newstuff.htmlIn the above example, a request to
/xyz/oldstuff.html
gets correctly rewritten to the physical file/abc/def/newstuff.html
.
Notice - For the Apache hackers:
The following list gives detailed information about the internal processing steps:
Request: /xyz/oldstuff.html Internal Processing: /xyz/oldstuff.html -> /abc/def/oldstuff.html (per-server Alias) /abc/def/oldstuff.html -> /abc/def/newstuff.html (per-dir RewriteRule) /abc/def/newstuff.html -> /xyz/newstuff.html (per-dir RewriteBase) /xyz/newstuff.html -> /abc/def/newstuff.html (per-server Alias) Result: /abc/def/newstuff.htmlThis seems very complicated but is the correct Apache internal processing, because the per-directory rewriting comes too late in the process. So, when it occurs the (rewritten) request has to be re-injected into the Apache kernel! BUT: While this seems like a serious overhead, it really isn't, because this re-injection happens fully internal to the Apache server and the same procedure is used by many other operations inside Apache. So, you can be sure the design and implementation is correct.
RewriteCond
Syntax:RewriteCond
TestString CondPattern
Default: None
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2 (partially), Apache 1.3
The
RewriteCond
directive defines a rule condition. Precede aRewriteRule
directive with one or moreRewriteCond
directives. The following rewriting rule is only used if its pattern matches the current state of the URI and if these additional conditions apply too.TestString is a string which can contains the following expanded constructs in addition to plain text:
- RewriteRule backreferences: These are backreferences of the form
(1 <= N <= 9) which provide access to the grouped parts (parenthesis!) of the pattern from the corresponding$N
RewriteRule
directive (the one following the current bunch ofRewriteCond
directives).
- RewriteCond backreferences: These are backreferences of the form
(1 <= N <= 9) which provide access to the grouped parts (parenthesis!) of the pattern from the last matched%N
RewriteCond
directive in the current bunch of conditions.
- Server-Variables: These are variables of the form
where NAME_OF_VARIABLE can be a string of the following list:%{
NAME_OF_VARIABLE}
HTTP headers: HTTP_USER_AGENT
HTTP_REFERER
HTTP_COOKIE
HTTP_FORWARDED
HTTP_HOST
HTTP_PROXY_CONNECTION
HTTP_ACCEPT
connection & request: REMOTE_ADDR
REMOTE_HOST
REMOTE_USER
REMOTE_IDENT
REQUEST_METHOD
SCRIPT_FILENAME
PATH_INFO
QUERY_STRING
AUTH_TYPE
server internals: DOCUMENT_ROOT
SERVER_ADMIN
SERVER_NAME
SERVER_PORT
SERVER_PROTOCOL
SERVER_SOFTWARE
system stuff: TIME_YEAR
TIME_MON
TIME_DAY
TIME_HOUR
TIME_MIN
TIME_SEC
TIME_WDAY
TIME
specials: API_VERSION
THE_REQUEST
REQUEST_URI
REQUEST_FILENAME
IS_SUBREQ
Notice: These variables all correspond to the similar named HTTP MIME-headers, C variables of the Apache server or struct tm
fields of the Unix system.Special Notes:
- The variables SCRIPT_FILENAME and REQUEST_FILENAME contain the same value, i.e., the value of the
filename
field of the internalrequest_rec
structure of the Apache server. The first name is just the commonly known CGI variable name while the second is the consistent counterpart to REQUEST_URI (which contains the value of theuri
field ofrequest_rec
).
- There is the special format:
%{ENV:variable}
where variable can be any environment variable. This is looked-up via internal Apache structures and (if not found there) viagetenv()
from the Apache server process.
- There is the special format:
%{HTTP:header}
where header can be any HTTP MIME-header name. This is looked-up from the HTTP request. Example:%{HTTP:Proxy-Connection}
is the value of the HTTP header ``Proxy-Connection:
''.
- There is the special format
%{LA-U:variable}
for look-aheads which perform an internal (URL-based) sub-request to determine the final value of variable. Use this when you want to use a variable for rewriting which actually is set later in an API phase and thus is not available at the current stage. For instance when you want to rewrite according to theREMOTE_USER
variable from within the per-server context (httpd.conf
file) you have to use%{LA-U:REMOTE_USER}
because this variable is set by the authorization phases which come after the URL translation phase where mod_rewrite operates. On the other hand, because mod_rewrite implements its per-directory context (.htaccess
file) via the Fixup phase of the API and because the authorization phases come before this phase, you just can use%{REMOTE_USER}
there.
- There is the special format:
%{LA-F:variable}
which perform an internal (filename-based) sub-request to determine the final value of variable. This is the most of the time the same as LA-U above.CondPattern is the condition pattern, i.e., a regular expression which gets applied to the current instance of the TestString, i.e., TestString gets evaluated and then matched against CondPattern.
Remember: CondPattern is a standard Extended Regular Expression with some additions:
- You can precede the pattern string with a '
!
' character (exclamation mark) to specify a non-matching pattern.
- There are some special variants of CondPatterns. Instead of real regular expression strings you can also use one of the following:
- '<CondPattern' (is lexicographically lower)
Treats the CondPattern as a plain string and compares it lexicographically to TestString and results in a true expression if TestString is lexicographically lower than CondPattern.
- '>CondPattern' (is lexicographically greater)
Treats the CondPattern as a plain string and compares it lexicographically to TestString and results in a true expression if TestString is lexicographically greater than CondPattern.
- '=CondPattern' (is lexicographically equal)
Treats the CondPattern as a plain string and compares it lexicographically to TestString and results in a true expression if TestString is lexicographically equal to CondPattern, i.e the two strings are exactly equal (character by character). If CondPattern is just "" (two quotation marks) this compares TestString against the empty string.
- '-d' (is directory)
Treats the TestString as a pathname and tests if it exists and is a directory.
- '-f' (is regular file)
Treats the TestString as a pathname and tests if it exists and is a regular file.
- '-s' (is regular file with size)
Treats the TestString as a pathname and tests if it exists and is a regular file with size greater than zero.
- '-l' (is symbolic link)
Treats the TestString as a pathname and tests if it exists and is a symbolic link.
- '-F' (is existing file via subrequest)
Checks if TestString is a valid file and accessible via all the server's currently-configured access controls for that path. This uses an internal subrequest to determine the check, so use it with care because it decreases your servers performance!
- '-U' (is existing URL via subrequest)
Checks if TestString is a valid URL and accessible via all the server's currently-configured access controls for that path. This uses an internal subrequest to determine the check, so use it with care because it decreases your server's performance!
Notice: All of these tests can also be prefixed by a not ('!') character to negate their meaning. Additionally you can set special flags for CondPattern by appending
as the third argument to the[
flags]
RewriteCond
directive. Flags is a comma-separated list of the following flags:
- '
nocase|NC
' (no case)
This makes the condition test case-insensitive, i.e., there is no difference between 'A-Z' and 'a-z' both in the expanded TestString and the CondPattern.
- '
ornext|OR
' (or next condition)
Use this to combine rule conditions with a local OR instead of the implicit AND. Typical example:
Without this flag you had to write down the cond/rule three times.RewriteCond %{REMOTE_HOST} ^host1.* [OR] RewriteCond %{REMOTE_HOST} ^host2.* [OR] RewriteCond %{REMOTE_HOST} ^host3.* RewriteRule ...some special stuff for any of these hosts...Example:
To rewrite the Homepage of a site according to the ``User-Agent:
'' header of the request, you can use the following:Interpretation: If you use Netscape Navigator as your browser (which identifies itself as 'Mozilla'), then you get the max homepage, which includes Frames, etc. If you use the Lynx browser (which is Terminal-based), then you get the min homepage, which contains no images, no tables, etc. If you use any other browser you get the standard homepage.RewriteCond %{HTTP_USER_AGENT} ^Mozilla.* RewriteRule ^/$ /homepage.max.html [L] RewriteCond %{HTTP_USER_AGENT} ^Lynx.* RewriteRule ^/$ /homepage.min.html [L] RewriteRule ^/$ /homepage.std.html [L]
RewriteRule
Syntax:RewriteRule
Pattern Substitution
Default: None
Context: server config, virtual host, directory, .htaccess
Override: FileInfo
Status: Extension
Module: mod_rewrite.c
Compatibility: Apache 1.2 (partially), Apache 1.3
The
RewriteRule
directive is the real rewriting workhorse. The directive can occur more than once. Each directive then defines one single rewriting rule. The definition order of these rules is important, because this order is used when applying the rules at run-time.Pattern can be (for Apache 1.1.x a System V8 and for Apache 1.2.x a POSIX) regular expression which gets applied to the current URL. Here ``current'' means the value of the URL when this rule gets applied. This may not be the original requested URL, because there could be any number of rules before which already matched and made alterations to it.
Some hints about the syntax of regular expressions:
Text:.
Any single character[
chars]
Character class: One of chars[^
chars]
Character class: None of chars text1|
text2 Alternative: text1 or text2 Quantifiers:?
0 or 1 of the preceding text*
0 or N of the preceding text (N > 1)+
1 or N of the preceding text (N > 1) Grouping:(
text)
Grouping of text (either to set the borders of an alternative or for making backreferences where the Nth group can be used on the RHS of a RewriteRule with$
N) Anchors:^
Start of line anchor$
End of line anchor Escaping:\
char escape that particular char (for instance to specify the chars ".[]()
" etc.)For more information about regular expressions either have a look at your local regex(3) manpage or its
src/regex/regex.3
copy in the Apache 1.3 distribution. When you are interested in more detailed and deeper information about regular expressions and its variants (POSIX regex, Perl regex, etc.) have a look at the following dedicated book on this topic:Mastering Regular Expressions
Jeffrey E.F. Friedl
Nutshell Handbook Series
O'Reilly & Associates, Inc. 1997
ISBN 1-56592-257-3
Additionally in mod_rewrite the NOT character ('
!
') is a possible pattern prefix. This gives you the ability to negate a pattern; to say, for instance: ``if the current URL does NOT match to this pattern''. This can be used for special cases where it is better to match the negative pattern or as a last default rule.
Notice: When using the NOT character to negate a pattern you cannot have grouped wildcard parts in the pattern. This is impossible because when the pattern does NOT match, there are no contents for the groups. In consequence, if negated patterns are used, you cannot use $N
in the substitution string!Substitution of a rewriting rule is the string which is substituted for (or replaces) the original URL for which Pattern matched. Beside plain text you can use
Back-references are
- back-references
$N
to the RewriteRule pattern- back-references
%N
to the last matched RewriteCond pattern- server-variables as in rule condition test-strings (
%{VARNAME}
)- mapping-function calls (
${mapname:key|default}
)$
N (N=1..9) identifiers which will be replaced by the contents of the Nth group of the matched Pattern. The server-variables are the same as for the TestString of aRewriteCond
directive. The mapping-functions come from theRewriteMap
directive and are explained there. These three types of variables are expanded in the order of the above list.As already mentioned above, all the rewriting rules are applied to the Substitution (in the order of definition in the config file). The URL is completely replaced by the Substitution and the rewriting process goes on until there are no more rules (unless explicitly terminated by a
L
flag - see below).There is a special substitution string named '
-
' which means: NO substitution! Sounds silly? No, it is useful to provide rewriting rules which only match some URLs but do no substitution, e.g., in conjunction with the C (chain) flag to be able to have more than one pattern to be applied before a substitution occurs.One more note: You can even create URLs in the substitution string containing a query string part. Just use a question mark inside the substitution string to indicate that the following stuff should be re-injected into the QUERY_STRING. When you want to erase an existing query string, end the substitution string with just the question mark.
Notice: There is a special feature. When you prefix a substitution field with http://
thishost[:thisport] then mod_rewrite automatically strips it out. This auto-reduction on implicit external redirect URLs is a useful and important feature when used in combination with a mapping-function which generates the hostname part. Have a look at the first example in the example section below to understand this.
Remember: An unconditional external redirect to your own server will not work with the prefix http://thishost
because of this feature. To achieve such a self-redirect, you have to use the R-flag (see below).Additionally you can set special flags for Substitution by appending
as the third argument to the[
flags]
RewriteRule
directive. Flags is a comma-separated list of the following flags:
- '
redirect|R
[=code]' (force redirect)
Prefix Substitution withhttp://thishost[:thisport]/
(which makes the new URL a URI) to force a external redirection. If no code is given a HTTP response of 302 (MOVED TEMPORARILY) is used. If you want to use other response codes in the range 300-400 just specify them as a number or use one of the following symbolic names:temp
(default),permanent
,seeother
. Use it for rules which should canonicalize the URL and gives it back to the client, e.g., translate ``/~
'' into ``/u/
'' or always append a slash to/u/
user, etc.
Notice: When you use this flag, make sure that the substitution field is a valid URL! If not, you are redirecting to an invalid location! And remember that this flag itself only prefixes the URL with
http://thishost[:thisport]/
, but rewriting goes on. Usually you also want to stop and do the redirection immediately. To stop the rewriting you also have to provide the 'L' flag.
- '
forbidden|F
' (force URL to be forbidden)
This forces the current URL to be forbidden, i.e., it immediately sends back a HTTP response of 403 (FORBIDDEN). Use this flag in conjunction with appropriate RewriteConds to conditionally block some URLs.
- '
gone|G
' (force URL to be gone)
This forces the current URL to be gone, i.e., it immediately sends back a HTTP response of 410 (GONE). Use this flag to mark no longer existing pages as gone.
- '
proxy|P
' (force proxy)
This flag forces the substitution part to be internally forced as a proxy request and immediately (i.e., rewriting rule processing stops here) put through the proxy module. You have to make sure that the substitution string is a valid URI (e.g., typically starting withhttp://
hostname) which can be handled by the Apache proxy module. If not you get an error from the proxy module. Use this flag to achieve a more powerful implementation of the ProxyPass directive, to map some remote stuff into the namespace of the local server.Notice: To use this functionality make sure you have the proxy module compiled into your Apache server program. If you don't know please check whether
mod_proxy.c
is part of the ``httpd -l
'' output. If yes, this functionality is available to mod_rewrite. If not, then you first have to rebuild the ``httpd
'' program with mod_proxy enabled.
- '
last|L
' (last rule)
Stop the rewriting process here and don't apply any more rewriting rules. This corresponds to the Perllast
command or thebreak
command from the C language. Use this flag to prevent the currently rewritten URL from being rewritten further by following rules which may be wrong. For example, use it to rewrite the root-path URL ('/
') to a real one, e.g., '/e/www/
'.
- '
next|N
' (next round)
Re-run the rewriting process (starting again with the first rewriting rule). Here the URL to match is again not the original URL but the URL from the last rewriting rule. This corresponds to the Perlnext
command or thecontinue
command from the C language. Use this flag to restart the rewriting process, i.e., to immediately go to the top of the loop.
But be careful not to create a deadloop!
- '
chain|C
' (chained with next rule)
This flag chains the current rule with the next rule (which itself can also be chained with its following rule, etc.). This has the following effect: if a rule matches, then processing continues as usual, i.e., the flag has no effect. If the rule does not match, then all following chained rules are skipped. For instance, use it to remove the ``.www
'' part inside a per-directory rule set when you let an external redirect happen (where the ``.www
'' part should not to occur!).
- '
type|T
=MIME-type' (force MIME type)
Force the MIME-type of the target file to be MIME-type. For instance, this can be used to simulate the oldmod_alias
directiveScriptAlias
which internally forces all files inside the mapped directory to have a MIME type of ``application/x-httpd-cgi
''.
- '
nosubreq|NS
' (used only if no internal sub-request)
This flag forces the rewriting engine to skip a rewriting rule if the current request is an internal sub-request. For instance, sub-requests occur internally in Apache whenmod_include
tries to find out information about possible directory default files (index.xxx
). On sub-requests it is not always useful and even sometimes causes a failure to if the complete set of rules are applied. Use this flag to exclude some rules.
Use the following rule for your decision: whenever you prefix some URLs with CGI-scripts to force them to be processed by the CGI-script, the chance is high that you will run into problems (or even overhead) on sub-requests. In these cases, use this flag.
- '
qsappend|QSA
' (query string append)
This flag forces the rewriting engine to append a query string part in the substitution string to the existing one instead of replacing it. Use this when you want to add more data to the query string via a rewrite rule.
- '
passthrough|PT
' (pass through to next handler)
This flag forces the rewriting engine to set theuri
field of the internalrequest_rec
structure to the value of thefilename
field. This flag is just a hack to be able to post-process the output ofRewriteRule
directives byAlias
,ScriptAlias
,Redirect
, etc. directives from other URI-to-filename translators. A trivial example to show the semantics: If you want to rewrite/abc
to/def
via the rewriting engine ofmod_rewrite
and then/def
to/ghi
withmod_alias
:RewriteRule ^/abc(.*) /def$1 [PT] Alias /def /ghiIf you omit thePT
flag thenmod_rewrite
will do its job fine, i.e., it rewritesuri=/abc/...
tofilename=/def/...
as a full API-compliant URI-to-filename translator should do. Thenmod_alias
comes and tries to do a URI-to-filename transition which will not work.Notice: You have to use this flag if you want to intermix directives of different modules which contain URL-to-filename translators. The typical example is the use of
mod_alias
andmod_rewrite
..
Notice - For the Apache hackers:
If the current Apache API had a filename-to-filename hook additionally to the URI-to-filename hook then we wouldn't need this flag! But without such a hook this flag is the only solution. The Apache Group has discussed this problem and will add such hooks into Apache version 2.0.
- '
skip|S
=num' (skip next rule(s))
This flag forces the rewriting engine to skip the next num rules in sequence when the current rule matches. Use this to make pseudo if-then-else constructs: The last rule of the then-clause becomes askip=N
where N is the number of rules in the else-clause. (This is not the same as the 'chain|C' flag!)
- '
env|E=
VAR:VAL' (set environment variable)
This forces an environment variable named VAR to be set to the value VAL, where VAL can contain regexp backreferences$N
and%N
which will be expanded. You can use this flag more than once to set more than one variable. The variables can be later dereferenced at a lot of situations, but the usual location will be from within XSSI (via<!--#echo var="VAR"-->
) or CGI (e.g.$ENV{'VAR'}
). But additionally you can also dereference it in a following RewriteCond pattern via%{ENV:VAR}
. Use this to strip but remember information from URLs.
Notice: Never forget that Pattern gets applied to a complete URL in per-server configuration files. But in per-directory configuration files, the per-directory prefix (which always is the same for a specific directory!) gets automatically removed for the pattern matching and automatically added after the substitution has been done. This feature is essential for many sorts of rewriting, because without this prefix stripping you have to match the parent directory which is not always possible. There is one exception: If a substitution string starts with ``
http://
'' then the directory prefix will be not added and a external redirect or proxy throughput (if flag P is used!) is forced!
Notice: To enable the rewriting engine for per-directory configuration files you need to set `` RewriteEngine On
'' in these files and ``Option FollowSymLinks
'' enabled. If your administrator has disabled override ofFollowSymLinks
for a user's directory, then you cannot use the rewriting engine. This restriction is needed for security reasons.Here are all possible substitution combinations and their meanings:
Inside per-server configuration (
httpd.conf
)
for request ``GET /somepath/pathinfo
'':
Given Rule Resulting Substitution ---------------------------------------------- ---------------------------------- ^/somepath(.*) otherpath$1 not supported, because invalid! ^/somepath(.*) otherpath$1 [R] not supported, because invalid! ^/somepath(.*) otherpath$1 [P] not supported, because invalid! ---------------------------------------------- ---------------------------------- ^/somepath(.*) /otherpath$1 /otherpath/pathinfo ^/somepath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo via external redirection ^/somepath(.*) /otherpath$1 [P] not supported, because silly! ---------------------------------------------- ---------------------------------- ^/somepath(.*) http://thishost/otherpath$1 /otherpath/pathinfo ^/somepath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo via external redirection ^/somepath(.*) http://thishost/otherpath$1 [P] not supported, because silly! ---------------------------------------------- ---------------------------------- ^/somepath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo via external redirection ^/somepath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo via external redirection (the [R] flag is redundant) ^/somepath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo via internal proxyInside per-directory configuration for
/somepath
(i.e., file.htaccess
in dir/physical/path/to/somepath
containingRewriteBase /somepath
)
for request ``GET /somepath/localpath/pathinfo
'':
Given Rule Resulting Substitution ---------------------------------------------- ---------------------------------- ^localpath(.*) otherpath$1 /somepath/otherpath/pathinfo ^localpath(.*) otherpath$1 [R] http://thishost/somepath/otherpath/pathinfo via external redirection ^localpath(.*) otherpath$1 [P] not supported, because silly! ---------------------------------------------- ---------------------------------- ^localpath(.*) /otherpath$1 /otherpath/pathinfo ^localpath(.*) /otherpath$1 [R] http://thishost/otherpath/pathinfo via external redirection ^localpath(.*) /otherpath$1 [P] not supported, because silly! ---------------------------------------------- ---------------------------------- ^localpath(.*) http://thishost/otherpath$1 /otherpath/pathinfo ^localpath(.*) http://thishost/otherpath$1 [R] http://thishost/otherpath/pathinfo via external redirection ^localpath(.*) http://thishost/otherpath$1 [P] not supported, because silly! ---------------------------------------------- ---------------------------------- ^localpath(.*) http://otherhost/otherpath$1 http://otherhost/otherpath/pathinfo via external redirection ^localpath(.*) http://otherhost/otherpath$1 [R] http://otherhost/otherpath/pathinfo via external redirection (the [R] flag is redundant) ^localpath(.*) http://otherhost/otherpath$1 [P] http://otherhost/otherpath/pathinfo via internal proxyExample:
We want to rewrite URLs of the forminto/
Language/~
Realname/.../
File/u/
Username/.../
File.
LanguageWe take the rewrite mapfile from above and save it under
/path/to/file/map.txt
. Then we only have to add the following lines to the Apache server configuration file:RewriteLog /path/to/file/rewrite.log RewriteMap real-to-user txt:/path/to/file/map.txt RewriteRule ^/([^/]+)/~([^/]+)/(.*)$ /u/${real-to-user:$2|nobody}/$3.$1
Miscellaneous
Environment Variables
This module keeps track of two additional (non-standard) CGI/SSI environment variables namedSCRIPT_URL
andSCRIPT_URI
. These contain the logical Web-view to the current resource, while the standard CGI/SSI variablesSCRIPT_NAME
andSCRIPT_FILENAME
contain the physical System-view.Notice: These variables hold the URI/URL as they were initially requested, i.e., in a state before any rewriting. This is important because the rewriting process is primarily used to rewrite logical URLs to physical pathnames.
Example:
SCRIPT_NAME=/sw/lib/w3s/tree/global/u/rse/.www/index.html SCRIPT_FILENAME=/u/rse/.www/index.html SCRIPT_URL=/u/rse/ SCRIPT_URI=http://en1.engelschall.com/u/rse/
Practical Solutions
There is a comprehensive collection of practical solutions for URL-based problems available by the author of mod_rewrite. Here you will find real-life rulesets and additional information.Apache URL Rewriting Guide
http://www.engelschall.com/pw/apache/rewriteguide/
Apache HTTP Server Version 1.3


Australia: Mining capex to offset non-mining capex weakness - ANZ
by Dhwani MehtaAnalysts at Australia and New Zealand Banking Group (ANZ) offer a sneak peek at what to expect from Wednesday’s Australian Q3 Capex data that will drop in at 0030 GMT.
Key Quotes:
“When the Q3 private new capex data comes out on Thursday 28 November, we expect there will have been a small (0.3%) q/q rise. This would follow a cumulative fall of 1.8% over the previous two quarters.
We could see a downward revision to non-mining firms’ investment growth plans for 2019-20, with the weakness in business conditions worsening in Q3. This would be consistent with our Capex Leading Indicator (Figure below).
In more positive news, mining recorded its strongest quarterly capex result in five years in Q2. We expect mining firms’ plans for a significant expansion in capex in 2019-20 will be largely unchanged in Q3, with a number of multi-billion-dollar iron ore projects locked in.
This would see total capex plans (including both mining and non-mining) upgraded to AUD121bn in Q3, which would imply a 6.1% y/y increase.
A new estimate of AUD125bn or above would signal that firms remain optimistic about capex plans, despite headwinds. However, a new estimate of AUD118bn or below would raise concerns that the weakness in business investment may be more entrenched.”


All PWA Java Classes are documented here. These classes would help you when you build applications that support your daily work. Some of your routine work depends on the result of some system, then you might execute some program to do, and then you might check something and do something else. If these routine work is manually executed, you could automate the routine work with PWA. The PWA Java classes could help you to build such automation application that could be executed from the browser.
Assume we run programs, which shows the result in its log file, on the console screen, does something that we could check. When a program is executed, CmdWinController object is used. This object could store the information displayed on the screen and could return the result of the program, but it cannot manage when the program finishes, which has to be managed by us with CmdCompletionChecker object, which provides several methods to check if the program finishes or not. To display processing status, CmdLogger is used.
When this object is intantiated and used, we should set "tempFilePrefix" before calling executeCommand method. All processing tracking is done with temporary files in OS' temp directory. The temporary file is named with "tempFilePrefix" value as the file name prefix. For actual use, we should use pwa.commandWindow.initialize and pwa.commandWindow.close methods.
In PWA JavaScripts, this object is called "cmdWin".
This object provides several methods that check if the command is finished or not. Use the methods whose name starts with "wait". For example, "waitForCommand", "waitByFileContent", etc. The processing will be waiting until specified condition is met. If the waiting condition is not the information on the console and in another external file, you should use the "wait" method that requires the external file name.
In PWA JavaScripts, this object is called "cmdWait".
When your automation application starts, we may want to see processing status/result. Use this object for that purpose. For example, This is calling methods:
In PWA JavaScripts, this object is called "cmdLogger".
Prev Next


What is your pkg name?


A channel to discuss trading. For useful links and more info click the pinned messages to the right.
100 messages
Before 05-Dec-19 12:00 AM
Lumbi21-Oct-18 06:12 PM
(edited)
siu - Chainmakers21-Oct-18 06:27 PM
Whats up with the fud here
passcombo.com 🏴☠🏴21-Oct-18 06:27 PM
strange Russia gov allowed this... some hidden business
bpkdasbaum21-Oct-18 06:27 PM
dude doesn't seem to be to smart.  Should have fucked of into a jungle or on some tropic island with a new name instead of posing and showing off his money in motherland
passcombo.com 🏴☠🏴21-Oct-18 06:33 PM
well criminals should stay anon for sure
if they want to be free
ok suspected criminals
jl777c21-Oct-18 06:34 PM
like lemonade stand ganstas
3
3
passcombo.com 🏴☠🏴21-Oct-18 06:34 PM
so all of us?
1
well if he is not guilty he will at least visit the great US and do some seightseeing
get better knowledge ot courts and so on
nah... will exchange for some american spies caought in Russia
this we do not know for sure
Im just guessing, we cant know full truth... possible he could also did some hacking for Russia... media never give full story
we just see the surface
grewalsatinder21-Oct-18 06:38 PM
what is the likeliness of new country emerging. an artificial country over sea?
passcombo.com 🏴☠🏴21-Oct-18 06:39 PM
the law of stronger never passed
grewalsatinder21-Oct-18 06:40 PM
are we there yet?
passcombo.com 🏴☠🏴21-Oct-18 06:40 PM
stronger "proves " whatever he wants
grewalsatinder21-Oct-18 06:40 PM
remember reading something like that a future in some mag or something when I was kid
passcombo.com 🏴☠🏴21-Oct-18 06:40 PM
@grewalsatinder some guys wanted to make a new libertarian country between Serbia and Croatia / Hungary or sth
but a country without an army that cant stand against US does nto count(edited)
grewalsatinder21-Oct-18 06:41 PM
yes read that news
passcombo.com 🏴☠🏴21-Oct-18 06:41 PM
actually US will not even use weapons, just pay enough to get you if they want you
Kim Dot Com was almost got by them
snowdamn21-Oct-18 06:42 PM
if they send the NSA after you, not much you can do
don't give them a reason(edited)
passcombo.com 🏴☠🏴21-Oct-18 06:43 PM
we need to reorganize democracy and make politicians extinct, who is with me
Join the conversation: ask your questions & vote in live polls.
upvote GS question
about dPoW and recent 51% attack
BlackJesus21-Oct-18 07:18 PM
@grewalsatinder that dude is boring as hell.
grewalsatinder21-Oct-18 07:23 PM
picked the question and he's answering
2
Cryptoon21-Oct-18 07:26 PM
Just missed it
Will watch the recap later
blubbi21-Oct-18 07:49 PM
WTB 50k ARRR for 333 DEX
javadth21-Oct-18 08:00 PM
اه
hi
which VOL in CMC is legit for exchanges ?
adjusted or reported ?
bpkdasbaum21-Oct-18 10:02 PM
HSH for the whale incoming or what? he gonna snack it up again on 18500
bpkdasbaum21-Oct-18 10:23 PM
this is a really weird feeling. just from knowing that the whale was there for the last days, all usual TA is thrown in question. I am pretty sure there are lots of traders wanting to sell based on what the chart says, but there is the fear that you'll just sell into the whale and that he pumps it soonish. dem mindgames
Hollowman900021-Oct-18 10:38 PM
That’s the game
Losers keep wagecucking, winners fire said wagecuckers from their yachts
Quote: Your "best"! Losers always whine about their best.  Actor: Sean Connery Movie/Show: The Rock I do NOT own thes...
Hollowman900021-Oct-18 11:43 PM
Cock suckers at twitter
Looks like BaboonGasser is dead forever
@baboon_2 it is
Baboon 2: The Regassening
1
ComputerGenie 👴👴👴22-Oct-18 12:15 AM
Perhaps if yous topped calling people 'Cock suckers', you'd stop offending them....
ryman11222-Oct-18 12:17 AM
Better than Jive Turkey
Hollowman900022-Oct-18 12:32 AM
>interpersonal communication skills lessons from @ComputerGenie 👴👴👴
>bluescreen.gif
bpkdasbaum22-Oct-18 12:53 AM
there is hidden divergence in his suggestion, while it may sound like a helpful advice, it's also a passive aggressive critique, only perhaps though
I am kinda curious now, Is there a reason you need that specific account back?(edited)
Hollowman900022-Oct-18 12:59 AM
No
Novelty
Started it with my foray into crypto
ComputerGenie 👴👴👴22-Oct-18 01:09 AM
it's also a passive aggressive critique
That was never my intention; seems I need to work on being less subtle
[ANN] [KMDICE] [dPoW] KMDice - First minable decentralized dice game.
bpkdasbaum22-Oct-18 01:11 AM
lolwat ^^?
how do you get everyone to give their coins away for betting? how do you redistribute?
whata bout lost coins
siu - Chainmakers22-Oct-18 01:14 AM
Its a game.
Luck will redistribute (probability)
lost coins? no one except the owner of the coin is responsible for lost coins (dont get this part).
Hollowman900022-Oct-18 01:15 AM
Wife bought lottery ticket for the 1.6 billion lottery
You think you’ve seen binance buywalls?  But it says it's only unlocked if the mined coins are bet against the locked coins? If I mine a block and lose my key or decide to never bet, noone ever will be able to unlock the other 50%?
siu - Chainmakers22-Oct-18 01:17 AM
well... i you lose your coins and lets say 1% of coins get mined and lost then the odds will be 50:49
bpkdasbaum22-Oct-18 01:18 AM
lawl
siu - Chainmakers22-Oct-18 01:18 AM
the 50% might stay locked forever... maybe eventually all coins will get locked, maybe someone hits thejack pot and win 1.5million coins which is the biggest possible prize
we dont know what will happen, and that is the cool part.
bpkdasbaum22-Oct-18 01:19 AM
transaction fees will bring down the chance as well right?(edited)
siu - Chainmakers22-Oct-18 01:21 AM
not exactly.. why?
bpkdasbaum22-Oct-18 01:22 AM
It's on a 1:1 bet coin ratio right? If i bet 50 coins, each coin has a chance to roll?
siu - Chainmakers22-Oct-18 01:22 AM
txfees dont get locked
bpkdasbaum22-Oct-18 01:22 AM
oh wait, right, fees go to miners, and they can roll
siu - Chainmakers22-Oct-18 01:22 AM
you can bet on any odds from 1 :1 to 1500:1(edited)
max possible bet is 1000KMDICE at 1500:1
that will give you a possible prize of 1.5million coins
smallest possible bet is 0.001 at 1:1
bpkdasbaum22-Oct-18 01:24 AM
Need those rules and info in the thread please :3
wait, can't you simply double your bet each time you lose?
siu - Chainmakers22-Oct-18 01:27 AM
done
Dice Game Info
"fundingtxid": "5be49570c56d036abb08b6d084da93a8a86f58fc48db4a1086be95540d752d6f",
"name": "KMDICE",
"minbet": "0.00100000",
"maxbet": "1000.00000000",
"maxodds": 1500,
"timeoutblocks": 600,
"funding": "10500000.00000000"
blackjok3r22-Oct-18 01:27 AM
the mimium odds is actually 3:1 .. because if you win you get 2x + what yo ubet
over enough bets
bpkdasbaum22-Oct-18 01:27 AM
in roulette the house will give you a max limit on doubling down.
blackjok3r22-Oct-18 01:27 AM
all the coins will end up inthe contract
BUT if some clever/lucky person wins big
siu - Chainmakers22-Oct-18 01:27 AM
maybe, maybe not
blackjok3r22-Oct-18 01:27 AM
and doesnt bet again
then it wont... but my guess is they would sell them