aptitude search ?narrow vs ?and The 2019 Stack Overflow Developer Survey Results Are In Announcing the arrival of Valued Associate #679: Cesar Manara Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern) 2019 Community Moderator Election ResultsWhy I was able to fix a broken package with aptitude but I could not with either apt-get or synaptic?apt-get purge <packages> works fine, aptitude still has <packages> marked as installed and reinstalls themAptitude - uninstalling autoinstalled packages that are recommended by other packagesHow to de-select packages of a certain architecture in aptitudeHow can I upgrade a complete list of packages from stable to backportsMost installed packages marked obsolete in aptitude, updates are not foundEssential packages and multiple architectures on DebianHow do I tell aptitude that a package was installed manually?aptitude display current pkg repo and update pkg repo - default grouping method?apt wants to autoremove automatically installed recommended packages despite settings in apt.conf.d
What was the last x86 CPU that did not have the x87 floating-point unit built in?
I could not break this equation. Please help me
Who or what is the being for whom Being is a question for Heidegger?
Why can't devices on different VLANs, but on the same subnet, communicate?
Do warforged have souls?
ELI5: Why do they say that Israel would have been the fourth country to land a spacecraft on the Moon and why do they call it low cost?
Is it ok to offer lower paid work as a trial period before negotiating for a full-time job?
Derivation tree not rendering
Mortgage adviser recommends a longer term than necessary combined with overpayments
What aspect of planet Earth must be changed to prevent the industrial revolution?
Can the DM override racial traits?
Difference between "generating set" and free product?
He got a vote 80% that of Emmanuel Macron’s
Does Parliament hold absolute power in the UK?
Why is superheterodyning better than direct conversion?
Would an alien lifeform be able to achieve space travel if lacking in vision?
Arduino Pro Micro - switch off LEDs
Can a 1st-level character have an ability score above 18?
How did passengers keep warm on sail ships?
What's the point in a preamp?
Working through the single responsibility principle (SRP) in Python when calls are expensive
Why can't wing-mounted spoilers be used to steepen approaches?
Is every episode of "Where are my Pants?" identical?
Semisimplicity of the category of coherent sheaves?
aptitude search ?narrow vs ?and
The 2019 Stack Overflow Developer Survey Results Are In
Announcing the arrival of Valued Associate #679: Cesar Manara
Planned maintenance scheduled April 17/18, 2019 at 00:00UTC (8:00pm US/Eastern)
2019 Community Moderator Election ResultsWhy I was able to fix a broken package with aptitude but I could not with either apt-get or synaptic?apt-get purge <packages> works fine, aptitude still has <packages> marked as installed and reinstalls themAptitude - uninstalling autoinstalled packages that are recommended by other packagesHow to de-select packages of a certain architecture in aptitudeHow can I upgrade a complete list of packages from stable to backportsMost installed packages marked obsolete in aptitude, updates are not foundEssential packages and multiple architectures on DebianHow do I tell aptitude that a package was installed manually?aptitude display current pkg repo and update pkg repo - default grouping method?apt wants to autoremove automatically installed recommended packages despite settings in apt.conf.d
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
What is the difference between the ?narrow
and ?and
options of aptitude search? For example, why would aptitude search "?and(?installed,?origin(backports))"
return results on my system, but aptitude search "?narrow(?installed,?origin(backports))"
return nothing?
Note that running apt-cache policy
on the packages returned by the ?and
version shows that versions installed are not from backports, so the ?narrow
result is the correct one. But I've run into similar unintuitive results before which have been solved by using ?narrow
after some googling, but have never understood why.
aptitude
add a comment |
What is the difference between the ?narrow
and ?and
options of aptitude search? For example, why would aptitude search "?and(?installed,?origin(backports))"
return results on my system, but aptitude search "?narrow(?installed,?origin(backports))"
return nothing?
Note that running apt-cache policy
on the packages returned by the ?and
version shows that versions installed are not from backports, so the ?narrow
result is the correct one. But I've run into similar unintuitive results before which have been solved by using ?narrow
after some googling, but have never understood why.
aptitude
add a comment |
What is the difference between the ?narrow
and ?and
options of aptitude search? For example, why would aptitude search "?and(?installed,?origin(backports))"
return results on my system, but aptitude search "?narrow(?installed,?origin(backports))"
return nothing?
Note that running apt-cache policy
on the packages returned by the ?and
version shows that versions installed are not from backports, so the ?narrow
result is the correct one. But I've run into similar unintuitive results before which have been solved by using ?narrow
after some googling, but have never understood why.
aptitude
What is the difference between the ?narrow
and ?and
options of aptitude search? For example, why would aptitude search "?and(?installed,?origin(backports))"
return results on my system, but aptitude search "?narrow(?installed,?origin(backports))"
return nothing?
Note that running apt-cache policy
on the packages returned by the ?and
version shows that versions installed are not from backports, so the ?narrow
result is the correct one. But I've run into similar unintuitive results before which have been solved by using ?narrow
after some googling, but have never understood why.
aptitude
aptitude
asked Aug 6 '16 at 17:55
pavonpavon
1506
1506
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
Short answer:
the first command
aptitude search '?and(?installed,?origin(backports))'
finds packages that are installed and
have a backport available,
but the backport is not necessarily installed.
(Maybe the backport is installed, maybe it isn't.)
By contrast, the second command
aptitude search '?narrow(?installed,?origin(backports))'
finds package that are installed,
and the currently installed version is from a backport,
i.e. the backports that are actually installed.
This is a more restrictive search,
because the set of installed backports is a subset of available backports.
You can think of it like this:
all packages
installed packages
installed packages with a backport available (first command)
- installed backports (second command)
On your system, the first command returns results
but the second returns nothing.
This means that you have installed packages with backports available,
but evidently none of those backports are currently installed.
Long answer:
It has to do with aptitude's distinction between
matching the package and matching the package version.
From the
documentation:
There is a subtle, but important, distinction between matching a pattern
against a package, and matching it against all the versions of that
package. When a pattern is matched against a package, each of its terms is
matched against the package, and so each term will match if any version
of the package matches. In contrast, when a pattern is matched against each
version of a package, it will successfully match if it matches when all its
terms are matched against the same version of the package.
For example: suppose that version
3.0-1
of the packageaardvark
is
installed, but that version4.0-1
is available. Then the search
expression?version(4.0-1)?installed
matches aardvark, because
?version(4.0-1)
matches against version4.0-1
of aardvark, while
?installed
matches against version3.0-1
. On the other hand, this
expression does not match against all the versions ofaardvark
, because
no single version is installed and also has a version number of4.0-1
.
The documentation
for ?and
reads:
?and(pattern1, pattern2), pattern1 pattern2
Matches packages that match both pattern1 and pattern2.
Note that this matches packages, not single versions. So this query:
aptitude search '?and(?installed, ?origin(backports))'
gets a list of all the package versions that are installed,
then a list of all the package versions
with an origin matching the regular expression backports
,
and then returns the packages that appear in both lists.
On the other hand,
the documentation
for ?narrow
reads:
?narrow(filter, pattern), ~S filter pattern
Select packages for which a single version matches both filter and pattern.
So that's why this query only shows packages
where the single installed version has an origin that matches backports
:
aptitude search '?narrow(?installed, ?origin(backports))'
There is a related discussion
for the ?any-version
function:
?any-version(pattern)
Matches a package if any one of its versions matches the enclosed pattern.
Note: This term is closely related to
?narrow
. In fact,
?any-version(pattern1 pattern2)
is exactly the same as
?narrow(pattern1, pattern2)
.
Note: To be precise, as with any other pattern, it is not packages but
versions of the packages which are matched. Foraptitude search
and other
uses it does not make much difference, butaptitude versions
will only
show the versions that match, not all versions of the package for which any
version matches.
By running aptitude versions
instead of aptitude search
,
we find that these queries all give the same result:
aptitude versions '?and(?installed, ?origin(backports))'
aptitude versions '?installed?origin(backports)'
aptitude versions '?narrow(?installed, ?origin(backports))'
Whew!
If you find the query language for aptitude
confusing (as I do),
you may prefer to use a different approach,
such as Python's bindings to libapt
.
Rather than matching on version strings,
you can check the origin string directly, like this:
import apt
apt_cache = apt.Cache()
for pkg in apt_cache:
if pkg.is_installed:
for pkg_origin in pkg.installed.origins:
if pkg_origin.origin == 'Debian Backports':
print(pkg.name)
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f301765%2faptitude-search-narrow-vs-and%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Short answer:
the first command
aptitude search '?and(?installed,?origin(backports))'
finds packages that are installed and
have a backport available,
but the backport is not necessarily installed.
(Maybe the backport is installed, maybe it isn't.)
By contrast, the second command
aptitude search '?narrow(?installed,?origin(backports))'
finds package that are installed,
and the currently installed version is from a backport,
i.e. the backports that are actually installed.
This is a more restrictive search,
because the set of installed backports is a subset of available backports.
You can think of it like this:
all packages
installed packages
installed packages with a backport available (first command)
- installed backports (second command)
On your system, the first command returns results
but the second returns nothing.
This means that you have installed packages with backports available,
but evidently none of those backports are currently installed.
Long answer:
It has to do with aptitude's distinction between
matching the package and matching the package version.
From the
documentation:
There is a subtle, but important, distinction between matching a pattern
against a package, and matching it against all the versions of that
package. When a pattern is matched against a package, each of its terms is
matched against the package, and so each term will match if any version
of the package matches. In contrast, when a pattern is matched against each
version of a package, it will successfully match if it matches when all its
terms are matched against the same version of the package.
For example: suppose that version
3.0-1
of the packageaardvark
is
installed, but that version4.0-1
is available. Then the search
expression?version(4.0-1)?installed
matches aardvark, because
?version(4.0-1)
matches against version4.0-1
of aardvark, while
?installed
matches against version3.0-1
. On the other hand, this
expression does not match against all the versions ofaardvark
, because
no single version is installed and also has a version number of4.0-1
.
The documentation
for ?and
reads:
?and(pattern1, pattern2), pattern1 pattern2
Matches packages that match both pattern1 and pattern2.
Note that this matches packages, not single versions. So this query:
aptitude search '?and(?installed, ?origin(backports))'
gets a list of all the package versions that are installed,
then a list of all the package versions
with an origin matching the regular expression backports
,
and then returns the packages that appear in both lists.
On the other hand,
the documentation
for ?narrow
reads:
?narrow(filter, pattern), ~S filter pattern
Select packages for which a single version matches both filter and pattern.
So that's why this query only shows packages
where the single installed version has an origin that matches backports
:
aptitude search '?narrow(?installed, ?origin(backports))'
There is a related discussion
for the ?any-version
function:
?any-version(pattern)
Matches a package if any one of its versions matches the enclosed pattern.
Note: This term is closely related to
?narrow
. In fact,
?any-version(pattern1 pattern2)
is exactly the same as
?narrow(pattern1, pattern2)
.
Note: To be precise, as with any other pattern, it is not packages but
versions of the packages which are matched. Foraptitude search
and other
uses it does not make much difference, butaptitude versions
will only
show the versions that match, not all versions of the package for which any
version matches.
By running aptitude versions
instead of aptitude search
,
we find that these queries all give the same result:
aptitude versions '?and(?installed, ?origin(backports))'
aptitude versions '?installed?origin(backports)'
aptitude versions '?narrow(?installed, ?origin(backports))'
Whew!
If you find the query language for aptitude
confusing (as I do),
you may prefer to use a different approach,
such as Python's bindings to libapt
.
Rather than matching on version strings,
you can check the origin string directly, like this:
import apt
apt_cache = apt.Cache()
for pkg in apt_cache:
if pkg.is_installed:
for pkg_origin in pkg.installed.origins:
if pkg_origin.origin == 'Debian Backports':
print(pkg.name)
add a comment |
Short answer:
the first command
aptitude search '?and(?installed,?origin(backports))'
finds packages that are installed and
have a backport available,
but the backport is not necessarily installed.
(Maybe the backport is installed, maybe it isn't.)
By contrast, the second command
aptitude search '?narrow(?installed,?origin(backports))'
finds package that are installed,
and the currently installed version is from a backport,
i.e. the backports that are actually installed.
This is a more restrictive search,
because the set of installed backports is a subset of available backports.
You can think of it like this:
all packages
installed packages
installed packages with a backport available (first command)
- installed backports (second command)
On your system, the first command returns results
but the second returns nothing.
This means that you have installed packages with backports available,
but evidently none of those backports are currently installed.
Long answer:
It has to do with aptitude's distinction between
matching the package and matching the package version.
From the
documentation:
There is a subtle, but important, distinction between matching a pattern
against a package, and matching it against all the versions of that
package. When a pattern is matched against a package, each of its terms is
matched against the package, and so each term will match if any version
of the package matches. In contrast, when a pattern is matched against each
version of a package, it will successfully match if it matches when all its
terms are matched against the same version of the package.
For example: suppose that version
3.0-1
of the packageaardvark
is
installed, but that version4.0-1
is available. Then the search
expression?version(4.0-1)?installed
matches aardvark, because
?version(4.0-1)
matches against version4.0-1
of aardvark, while
?installed
matches against version3.0-1
. On the other hand, this
expression does not match against all the versions ofaardvark
, because
no single version is installed and also has a version number of4.0-1
.
The documentation
for ?and
reads:
?and(pattern1, pattern2), pattern1 pattern2
Matches packages that match both pattern1 and pattern2.
Note that this matches packages, not single versions. So this query:
aptitude search '?and(?installed, ?origin(backports))'
gets a list of all the package versions that are installed,
then a list of all the package versions
with an origin matching the regular expression backports
,
and then returns the packages that appear in both lists.
On the other hand,
the documentation
for ?narrow
reads:
?narrow(filter, pattern), ~S filter pattern
Select packages for which a single version matches both filter and pattern.
So that's why this query only shows packages
where the single installed version has an origin that matches backports
:
aptitude search '?narrow(?installed, ?origin(backports))'
There is a related discussion
for the ?any-version
function:
?any-version(pattern)
Matches a package if any one of its versions matches the enclosed pattern.
Note: This term is closely related to
?narrow
. In fact,
?any-version(pattern1 pattern2)
is exactly the same as
?narrow(pattern1, pattern2)
.
Note: To be precise, as with any other pattern, it is not packages but
versions of the packages which are matched. Foraptitude search
and other
uses it does not make much difference, butaptitude versions
will only
show the versions that match, not all versions of the package for which any
version matches.
By running aptitude versions
instead of aptitude search
,
we find that these queries all give the same result:
aptitude versions '?and(?installed, ?origin(backports))'
aptitude versions '?installed?origin(backports)'
aptitude versions '?narrow(?installed, ?origin(backports))'
Whew!
If you find the query language for aptitude
confusing (as I do),
you may prefer to use a different approach,
such as Python's bindings to libapt
.
Rather than matching on version strings,
you can check the origin string directly, like this:
import apt
apt_cache = apt.Cache()
for pkg in apt_cache:
if pkg.is_installed:
for pkg_origin in pkg.installed.origins:
if pkg_origin.origin == 'Debian Backports':
print(pkg.name)
add a comment |
Short answer:
the first command
aptitude search '?and(?installed,?origin(backports))'
finds packages that are installed and
have a backport available,
but the backport is not necessarily installed.
(Maybe the backport is installed, maybe it isn't.)
By contrast, the second command
aptitude search '?narrow(?installed,?origin(backports))'
finds package that are installed,
and the currently installed version is from a backport,
i.e. the backports that are actually installed.
This is a more restrictive search,
because the set of installed backports is a subset of available backports.
You can think of it like this:
all packages
installed packages
installed packages with a backport available (first command)
- installed backports (second command)
On your system, the first command returns results
but the second returns nothing.
This means that you have installed packages with backports available,
but evidently none of those backports are currently installed.
Long answer:
It has to do with aptitude's distinction between
matching the package and matching the package version.
From the
documentation:
There is a subtle, but important, distinction between matching a pattern
against a package, and matching it against all the versions of that
package. When a pattern is matched against a package, each of its terms is
matched against the package, and so each term will match if any version
of the package matches. In contrast, when a pattern is matched against each
version of a package, it will successfully match if it matches when all its
terms are matched against the same version of the package.
For example: suppose that version
3.0-1
of the packageaardvark
is
installed, but that version4.0-1
is available. Then the search
expression?version(4.0-1)?installed
matches aardvark, because
?version(4.0-1)
matches against version4.0-1
of aardvark, while
?installed
matches against version3.0-1
. On the other hand, this
expression does not match against all the versions ofaardvark
, because
no single version is installed and also has a version number of4.0-1
.
The documentation
for ?and
reads:
?and(pattern1, pattern2), pattern1 pattern2
Matches packages that match both pattern1 and pattern2.
Note that this matches packages, not single versions. So this query:
aptitude search '?and(?installed, ?origin(backports))'
gets a list of all the package versions that are installed,
then a list of all the package versions
with an origin matching the regular expression backports
,
and then returns the packages that appear in both lists.
On the other hand,
the documentation
for ?narrow
reads:
?narrow(filter, pattern), ~S filter pattern
Select packages for which a single version matches both filter and pattern.
So that's why this query only shows packages
where the single installed version has an origin that matches backports
:
aptitude search '?narrow(?installed, ?origin(backports))'
There is a related discussion
for the ?any-version
function:
?any-version(pattern)
Matches a package if any one of its versions matches the enclosed pattern.
Note: This term is closely related to
?narrow
. In fact,
?any-version(pattern1 pattern2)
is exactly the same as
?narrow(pattern1, pattern2)
.
Note: To be precise, as with any other pattern, it is not packages but
versions of the packages which are matched. Foraptitude search
and other
uses it does not make much difference, butaptitude versions
will only
show the versions that match, not all versions of the package for which any
version matches.
By running aptitude versions
instead of aptitude search
,
we find that these queries all give the same result:
aptitude versions '?and(?installed, ?origin(backports))'
aptitude versions '?installed?origin(backports)'
aptitude versions '?narrow(?installed, ?origin(backports))'
Whew!
If you find the query language for aptitude
confusing (as I do),
you may prefer to use a different approach,
such as Python's bindings to libapt
.
Rather than matching on version strings,
you can check the origin string directly, like this:
import apt
apt_cache = apt.Cache()
for pkg in apt_cache:
if pkg.is_installed:
for pkg_origin in pkg.installed.origins:
if pkg_origin.origin == 'Debian Backports':
print(pkg.name)
Short answer:
the first command
aptitude search '?and(?installed,?origin(backports))'
finds packages that are installed and
have a backport available,
but the backport is not necessarily installed.
(Maybe the backport is installed, maybe it isn't.)
By contrast, the second command
aptitude search '?narrow(?installed,?origin(backports))'
finds package that are installed,
and the currently installed version is from a backport,
i.e. the backports that are actually installed.
This is a more restrictive search,
because the set of installed backports is a subset of available backports.
You can think of it like this:
all packages
installed packages
installed packages with a backport available (first command)
- installed backports (second command)
On your system, the first command returns results
but the second returns nothing.
This means that you have installed packages with backports available,
but evidently none of those backports are currently installed.
Long answer:
It has to do with aptitude's distinction between
matching the package and matching the package version.
From the
documentation:
There is a subtle, but important, distinction between matching a pattern
against a package, and matching it against all the versions of that
package. When a pattern is matched against a package, each of its terms is
matched against the package, and so each term will match if any version
of the package matches. In contrast, when a pattern is matched against each
version of a package, it will successfully match if it matches when all its
terms are matched against the same version of the package.
For example: suppose that version
3.0-1
of the packageaardvark
is
installed, but that version4.0-1
is available. Then the search
expression?version(4.0-1)?installed
matches aardvark, because
?version(4.0-1)
matches against version4.0-1
of aardvark, while
?installed
matches against version3.0-1
. On the other hand, this
expression does not match against all the versions ofaardvark
, because
no single version is installed and also has a version number of4.0-1
.
The documentation
for ?and
reads:
?and(pattern1, pattern2), pattern1 pattern2
Matches packages that match both pattern1 and pattern2.
Note that this matches packages, not single versions. So this query:
aptitude search '?and(?installed, ?origin(backports))'
gets a list of all the package versions that are installed,
then a list of all the package versions
with an origin matching the regular expression backports
,
and then returns the packages that appear in both lists.
On the other hand,
the documentation
for ?narrow
reads:
?narrow(filter, pattern), ~S filter pattern
Select packages for which a single version matches both filter and pattern.
So that's why this query only shows packages
where the single installed version has an origin that matches backports
:
aptitude search '?narrow(?installed, ?origin(backports))'
There is a related discussion
for the ?any-version
function:
?any-version(pattern)
Matches a package if any one of its versions matches the enclosed pattern.
Note: This term is closely related to
?narrow
. In fact,
?any-version(pattern1 pattern2)
is exactly the same as
?narrow(pattern1, pattern2)
.
Note: To be precise, as with any other pattern, it is not packages but
versions of the packages which are matched. Foraptitude search
and other
uses it does not make much difference, butaptitude versions
will only
show the versions that match, not all versions of the package for which any
version matches.
By running aptitude versions
instead of aptitude search
,
we find that these queries all give the same result:
aptitude versions '?and(?installed, ?origin(backports))'
aptitude versions '?installed?origin(backports)'
aptitude versions '?narrow(?installed, ?origin(backports))'
Whew!
If you find the query language for aptitude
confusing (as I do),
you may prefer to use a different approach,
such as Python's bindings to libapt
.
Rather than matching on version strings,
you can check the origin string directly, like this:
import apt
apt_cache = apt.Cache()
for pkg in apt_cache:
if pkg.is_installed:
for pkg_origin in pkg.installed.origins:
if pkg_origin.origin == 'Debian Backports':
print(pkg.name)
edited yesterday
answered Jan 24 '17 at 2:43
Nathaniel M. BeaverNathaniel M. Beaver
195118
195118
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f301765%2faptitude-search-narrow-vs-and%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
-aptitude