text:
[![Build status](https://ci.appveyor.com/api/projects/status/kcnxcg1p2n0t4nm9/branch/master?svg=true)](https://ci.appveyor.com/project/Alex61243/xwrite/branch/master)
[![XWrite@PowerShell Gallery](https://img.shields.io/powershellgallery/dt/XWrite?label=XWrite%40PowerShell%20Gallery)](https://www.powershellgallery.com/packages/XWrite/)

# XWrite

PowerShell module that focuses on enhancing the experience and output of tracing

The module can

- Enable full tracing for all preference variables and rollback their changes
- Enhance the output of the following core (`Microsoft.PowerShell.Utility`) cmdlets:
    - `Write-Host`
    - `Write-Debug`
    - `Write-Verbose`
    - `Write-Information`
    - `Write-Warning`
- Add inline output for the native `Write-Progress` cmdlet.
    - With `Write-Host`
    - With `Write-Debug`
    - With `Write-Verbose`
    - With `Write-Information`

## Enhance the output of the following core (`Microsoft.PowerShell.Utility`) cmdlets

PowerShell normal output | PowerShell output with XWrite enabled
:----------------------- | ------------------------------------:
| ![PowerShell normal](Images/PS-Normal.png)  | ![XWriteEnabled](Images/XWrite-Enabled.png) |

The output can be enhanced with the following extra information:

- The **Source** that is the source script or module name that executed the `Write-` cmdlet.
- The **Caller** that is the name of the script or module that executed the `Write-` cmdlet.
- The **Date** that is the date part of the current date.
- The **Time** that is the time part of the current date.

The enhancement works by placing a global implementation of the respected cmdlet over the core one from the `Microsoft.PowerShell.Utility` namespace. This effectively overwrites the default behavior.

**Note:** Make sure you invoke `Enable-XWrite` at the beginning of the script. Think about including this with each session.

**Note:** The module's overwrite does not work for binary modules or modules that explicitly use the full namespace of the `Write-*` cmdlets.

# Demo

## Default PowerShell output

To demonstrate let's first create a sample function or script

```powershell
# Sample function that uses Write-* commands without any changes
function Test-MyXWrite
{
    param(
    )

    $message=@(
        "DebugPreference=$DebugPreference"
        "VerbosePreference=$VerbosePreference"
        "InformationPreference=$InformationPreference"
        "WarningPreference=$WarningPreference"
    )

    $message|ForEach-Object {
        Write-Host $_
    }

    Write-Debug "DebugPreference=$DebugPreference"
    Write-Verbose "VerbosePreference=$VerbosePreference"
    Write-Information "InformationPreference=$InformationPreference"
    Write-Warning "WarningPreference=$WarningPreference"
}

# Enable full trace
Set-XGlobalTrace -ForAll

# Invoke test function to execute the Write-* commands
Test-MyXWrite

# Disable full trace. Rollback to original settings
Undo-XGlobalTrace
```

![PowerShell normal](Images/PS-Normal.png)

## XWrite enhanced output

```powershell
# Install the module
Install-Module -Name XWrite -Scope CurrentUser -Force

# Enable XWrite default output enhancement
Enable-XWrite -ForAll

# Enable full trace
Set-XGlobalTrace -ForAll

# Invoke test function to execute the Write-* commands
Test-MyXWrite

# Disable full trace. Rollback to original settings
Undo-XGlobalTrace
```

![XWriteEnabled](Images/XWrite-Enabled.png)

## XWrite advanced enhanced output

```powershell
# Enable XWrite advanced output enhancement
Enable-XWrite -ForAll -Source -Date -Time

# Enable full trace
Set-XGlobalTrace -ForAll

# Invoke test function to execute the Write-* commands
Test-MyXWrite

# Disable full trace. Rollback to original settings
Undo-XGlobalTrace
```

![XWriteEnabled](Images/XWrite-Enabled-Full.png)

# Commandlets

- Enable-XWrite
- Disable-XWrite
- Set-XGlobalTrace
- Undo-XGlobalTrace
- Enable-XWriteProgress
- Disable-XWriteProgress

# Code examples

## Showcase script

To showcase the functionality let's assume that e.g `Test-MyXWrite.ps1` exists like this

```powershell
# Enable full trace
Set-XGlobalTrace -ForAll

$message="Hello"

Write-Host $message
Write-Debug $message
Write-Verbose $message
Write-Information $message
Write-Warning $message

# Disable full trace. Rollback to original settings
Undo-XGlobalTrace
```

## Example 1 - Default output enhancement

```powershell
# Enhance all supported Write-* cmdlets
Enable-XWrite -ForAll

# Enhance specific Write-* cmdlets
Enable-XWrite -ForDebug -ForVerbose -ForInformation -ForWarning -ForHost

```

When executing `Test-MyXWrite.ps1` the output is the same

```text
DEBUG: Test-MyXWrite.ps1: Hello
VERBOSE: Test-MyXWrite.ps1: Hello
Test-MyXWrite.ps1: Hello
WARNING: Test-MyXWrite.ps1: Hello
```

**Notice** the extra information `Test-MyXWrite.ps1: ` between the e.g. `DEBUG` and `Hello`.

## Example2 - Advanced output enhancement

```powershell
# Enhance all supported Write-* cmdlets and specify the artifacts in the output
Enable-XWrite -ForAll -Source -Date -Time

# Enhance all supported Write-* cmdlets and specify custom format
Enable-XWrite -ForAll -Format "%source%: %caller%: %date%: %time%: "
```

When executing `Test-MyXWrite.ps1` the output is

```text
Script: Test-MyXWrite.ps1: 20170804: 10:57:27.831: Hello
DEBUG: Script: Test-MyXWrite.ps1: 20170804: 10:57:27.845: Hello
VERBOSE: Script: Test-MyXWrite.ps1: 20170804: 10:57:27.858: Hello
Script: Test-MyXWrite.ps1: 20170804: 10:57:27.871: Hello
WARNING: Script: Test-MyXWrite.ps1: 20170804: 10:57:27.886: Hello
```

**Notice** the extra information `Script: Test-MyXWrite.ps1: 20170804: 10:57:27.845: ` between the e.g. `DEBUG` and `Hello`.

# Formatting

The module will add a prefix to the output with the following logic:

- When no parameters are provided then only the **Caller** is added. e.g. `Test-MyXWrite.ps1`.
- When the `-Source` or `-Date` or `-Time` is specified, then their respected values are added using the optional value of the `-Separator` parameter with value `: `.
- When `-Format` is specified then that custom format is used. The format can interpret `%source%`,`%caller%`,`%date%` and `%time%` variables.

This matrix that puts all above together in simple mapping:

| Variable | Parameter | Example value | Remarks |
|:-------- | --------- | ------------- | ------- |
| `%source%` | `-Source` | Test-MyXWrite.ps1 | The source of the caller which can be `Script`, `Function` or  the module name |
| `%caller%` | No parameter | Test-MyXWrite.ps1 | The name of the caller script or cmdlet |
| `%date%` | `-Date` | 20170804 | the date stamp formatted as `yyyyMMdd` |
| `%time%` | `-Time` | 10:57:27.858 | the time stamp formatted as `hh:mm:ss.fff` |

# How does it work?

**XWrite** creates the implementation of each respected `Write-` command with the exact same signature but the implementation is a bit different to allow injecting the extra output. What happens inside each overwrite, is that before executing the actual function, the incoming parameters are modified and the extra value is added. For example for the `Write-Verbose`

1. Calculate extra values.
1. Retrieve the formatting expression.
1. Render the extra prefix.
1. Modify the incoming parameters. In the case of `Write-Verbose` modify the `-Message` parameter.
1. Execute the stepable pipeline for the `Microsoft.PowerShell.Utility\Write-Verbose` using the `PSBoundParameters`.

The overwrite's command definition can be always acquired by the debug output when enabling or by the in memory definition e.g. `(Get-Command Write-Verbose).Definition

This is the a matrix that shows which parameter is modified for each core cmdlet, it's type and potential issue that can be improved.

| Command | Parameter name | Parameter type | Remarks |
| ------- | -------------- | -------------- | ------- |
| Write-Debug | `-Message` | `string` | |
| Write-Verbose | `-Message` | `string` | |
| Write-Warning | `-Message` | `string` | |
| Write-Information | `-MessageData` | `System.Object` | Potential issues with type casting |
| Write-Host | `-Message` | `System.Object` | Potential issues with type casting |

This is the generated overwrite for `Write-Verbose`. Notice that a `$prefix` is calculated by internal cmdlets `Get-XPrefix` and `Get-XCommandSource`.

```powershell
[CmdletBinding(HelpUri='https://go.microsoft.com/fwlink/?LinkID=113429', RemotingCapability='None')]
param(
    [Parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true)]
    [Alias('Msg')]
    [AllowEmptyString()]
    [string]
    ${Message})

begin
{
    try {

        #region Begin step injection

        $prefix=Get-XPrefix

        $PSBoundParameters.Message=$prefix+$PSBoundParameters.Message

        #endregion

        $outBuffer = $null
        if ($PSBoundParameters.TryGetValue('OutBuffer', [ref]$outBuffer))
        {
            $PSBoundParameters['OutBuffer'] = 1
        }
        $wrappedCmd = $ExecutionContext.InvokeCommand.GetCommand('Microsoft.PowerShell.Utility\Write-Verbose', [System.Management.Automation.CommandTypes]::Cmdlet)
        $scriptCmd = {& $wrappedCmd @PSBoundParameters }
        $steppablePipeline = $scriptCmd.GetSteppablePipeline($myInvocation.CommandOrigin)
        $steppablePipeline.Begin($PSCmdlet)
    } catch {
        throw
    }
}

process
{
    try {
        $steppablePipeline.Process($_)
    } catch {
        throw
    }
}

end
{
    try {
        $steppablePipeline.End()
    } catch {
        throw
    }
}
<#

.ForwardHelpTargetName Microsoft.PowerShell.Utility\Write-Verbose
.ForwardHelpCategory Cmdlet

#>
```

# Develop and debug

At this moment there are no Pester tests, although there isn't much possible to test as I'm not aware how the output of the `Write-*` could be asserted. Still, Pester tests for stability and parameter contract consistency should be implemented.

Since the module interferes with the core cmdlets, this section is to share how to develop and debug.

**Note** always use the `Microsoft.PowerShell.Utility` when referencing `Write-* cmdlets in the implementation. This will make sure that when developing, if the overwrite cmdlet is broken, the system one will be used.

This is my debug script

```powershell
Set-StrictMode -Version latest

Import-Module .\Source\Modules\XWrite\XWrite.psm1 -Force

# Set all levels active for output verification
Set-XGlobalTrace -ForAll

$WhatIfSplat=@{
# Comment/Uncomment to enable WhatIf
#    WhatIf=$true
}

# Disable the functionality
Disable-XWrite @WhatIfSplat

$message="When disabled"
Write-Host $message
Write-Host $message -ForegroundColor Yellow -BackgroundColor DarkBlue
Write-Debug $message
Write-Verbose $message
Write-Information $message
Write-Warning $message

# Chose a variation
Enable-XWrite -ForAll @WhatIfSplat
# Enable-XWrite -ForAll -Caller -Date -Time @WhatIfSplat
# Enable-XWrite -ForAll -Format "%caller% %date% %time%" @WhatIfSplat

$message="When enabled"
Write-Host $message
Write-Host $message -ForegroundColor Yellow -BackgroundColor DarkBlue
Write-Debug $message
Write-Verbose $message
Write-Information $message
Write-Warning $message
```

and outputs

```text
When disabled
When disabled
DEBUG: When disabled
VERBOSE: When disabled
When disabled
WARNING: When disabled

<ScriptBlock>: When enabled
<ScriptBlock>: When enabled
DEBUG: <ScriptBlock>: When enabled
VERBOSE: <ScriptBlock>: When enabled
<ScriptBlock>: When enabled
WARNING: <ScriptBlock>: When enabled
```

**Notice** that the **Caller** is now `<ScriptBlock>` as this is an unsaved script. If you save it then it becomes the name of the script.

# Backlog

1. Add pester tests to safeguard cmdlet contract consistency.
1. Improve the overwrite's implementation when the parameter is of type `System.Object` for
    - `Write-Host`.
    - `Write-Information`.

repository: Sarafian/XWrite

gha_language: PowerShell

repo_name: Sarafian/XWrite


text:
# Spellbook Rails API: A Card, Deck, and Collection API for Magic the Gathering

This is a Rails API built for the [Spellbook](https://github.com/GuttermanA/spellbook) web application created as a final project at the Flatiron School. The API contains a PostgreSQL database seeded with the nearly 20,000 Magic: the Gathering Cards which is fully searchable on name and card type. Users can:

* Login with authentication
* View their saved decks and card collection
* View other user's decks
* Perform full CRUD action on their decks and collection
* Search a database of nearly 20,000 Magic cards
* Search for user decks

While this Rails app is built for my frontend, it has a fully functioning card database that you do not need authentication to use.

All deck and collection features require an account with a valid JWT token to use.

#### Demo

## API Routes

### Application Controller
```
GET /metadata_load
```
Used by the front-end to load formats, archtypes, sets, the card of the day and the deck of the day on initialization.

### Auth Controller
```
POST /login
```
Takes user name and password. If found, authenticates password. If authenticated, issues a JWT token and returns user data, decks, and collection.

### Cards Controller
```
GET /cards/search
```
Takes search params for cards and returns matching cards by type or name for up to 50 results. If passed default, will return 50 cards from the newest set in alphabetical order.

### Collection Controller
```
POST /collections
```
Takes an array of cards and adds them to a user's collection. Requires authentication.

```
PATCH /collections/:id
```
Takes card information and updates collection entry. Requires authentication.

```
DELETE /collections/:id
```
Takes card id and, if found, destroys given collection entry with id. Requires authentication.

### Decks Controller
```
POST /decks
```
Takes deck data in request body and creates deck. Requires authorization.

```
PATCH /decks/:id
```
Takes deck data in request body and updates deck of given id. Requires authentication.

```
DELETE /decks/:id
```
Deletes deck of given id. Requires authentication.

```
GET /decks/:id
```
Returns data for single deck of given id.

```
GET /decks/search
```
Takes search params for decks and returns matching deck names. If passed default as a search term, will return 50 of the most recently created decks.

```
DELETE /decks/:id
```
Takes deck id and, if found, destroys deck with given id. Requires authentication.

### User Controller
```
/signup
```
Takes username and password and creates user account. Issues JWT token.

## Installing
1. Clone repository from GitHub
2. Navigate to the repository directory
```
cd spellbook-api
```
3. Install gems
```
bundle install
```
4. Setup figaro
```
bundle exec figaro install
```
Generate secret for jwt_token and add to application.yml file. If required, add your postrges database admin account information to the application.yml file generated by figaro.

5. Setup database
```
rake db:create
```
```
rake db:migrate
```
```
rake db:seed
```
Will seed cards and decks. Will also create an admin account with password 1234 to be associated with seeded external decks.
**Note: seeding make take a while as the database is seeded by the [Magic: The Gathering Developers API](https://magicthegathering.io/). No API key required.

6. Turn on Rails cache for development
```
rails dev:cache
```
7. Start server
```
rails s
```

## Built With
* [Rails](http://rubyonrails.org/) - web-application framework
* PostgreSQL - database
* [MTG SDK - Ruby](https://github.com/MagicTheGathering/mtg-sdk-ruby) - data and seeding
* [Fast JSON API](https://github.com/Netflix/fast_jsonapi) - serializer
* [JWT](https://github.com/jwt/ruby-jwt) - authentication
* [Mechanize](https://github.com/sparklemotion/mechanize) - Web scraping for tournament decks
* [Nokigiri](https://github.com/sparklemotion/nokogiri) - Web scraping for tournament decks
* [Figaro](https://github.com/laserlemon/figaro) - DB account and secret configuration

## Contributing
1. Fork repository [here](https://github.com/GuttermanA/spellbook-api)
2. Create new branch for your feature
```
git checkout -b my-new-feature
```
3.  Push to your branch
```
git push origin my-new-feature
```
5. Create new pull request

## Authors
* Alexander Gutterman - [Github](https://github.com/guttermana)

## License

MIT © 2018 Alexander Gutterman

The information presented in this API about Magic: The Gathering, both literal and graphical, is copyrighted by Wizards of the Coast. This API is not produced, endorsed, supported, or affiliated with Wizards of the Coast.

license: MIT

repository: GuttermanA/spellbook-api

branch_name: refs/heads/master

extension: md

license_type: permissive

repo_name: GuttermanA/spellbook-api


text:
---
layout: default
---

# 1994-04-23 - Re: T-Shirts, Neil Young, Asilomar, and Smalltalk

## Header Data

From<EMAIL_ADDRESS>(David Taffs)

To<EMAIL_ADDRESS>Message Hash: 6daf509bf5b94b63bff15564896e22126af8babb3241be8ab8969044a98de688

Message ID<EMAIL_ADDRESS>Reply To<EMAIL_ADDRESS>UTC Datetime: 1994-04-23 21:32:21 UTC

Raw Date: Sat, 23 Apr 94 14:32:21 PDT

## Raw message

```
{% raw  %}From<EMAIL_ADDRESS>(David Taffs)
Date: Sat, 23 Apr 94 14:32:21 PDT
To<EMAIL_ADDRESS>Subject: Re: T-Shirts, Neil Young, Asilomar, and Smalltalk
In-Reply-To<EMAIL_ADDRESS>Message-ID<EMAIL_ADDRESS>MIME-Version: 1.0
Content-Type: text/plain

   From<EMAIL_ADDRESS>(Timothy C. May)
   Subject: T-Shirts, Neil Young, Asilomar, and Smalltalk
   Date: Sat, 23 Apr 1994 13:13:00 -0700 (PDT)

Thanks for the great message. I hope I don't start (too much of) a
flame war about these religious issues...

   ...

   I did give a 25-minute talk on "Implications of Cryptography," which
   generated some good discussion. I also cemented some thoughts in
   discussion with Bernard Peuto and Ted Kaehler about the need for a
   deeper analysis of the old computer science work on "mutually
   suspicious cooperating agents," which was predicted to be a Big Thing
   for computer science (along with objects, segmented logical address
   spaces, and several other such Good Ideas), but which faded out when C
   and flat, Unix-style address spaces came to the fore.

You might want to check out research about "the Byzantine Generals
problem", e.g. in ACM's TOPLAS, including (I believe) stuff about
synchronizing distributed mutually-suspicious clocks. As I understand
it, many these problems have been generally solved in theory, and are
just waiting for demand and resources to be put in practice. There is
room for more work, of course.

Objects are Great; C++ (using objects, in I believe the way you mean)
is clearly the language of choice for the virtually the entire
(commercial) programming industry. At least this is for software; if
you are talking about hardware support (e.g. segmented address spaces,
such as the i432) this was always dubious, because in general it is
always better (when possible and adequately efficient) to do something
at "compile time" than "run time" (for example, proving that resources
are protected, by ensuring that given protocols are followed).

So I think Objects are a Good Idea, but I think Segmented Logical Address
Spaces are in principal Less Good (within reason) than a Single Large
Address Space (equivalent in size, within reason) with compile-time
"proofs" of non-interference.

Of course, multiple process address spaces also absorb the functionality
provided by Segmented Logical Address Spaces, and so the Client-Server
model now being hyped immoderately is sort of an implementation of the
Same Thing.

   ...

   Food for thought. I'm wondering if a project to implement a kind of
   "Digital Money World," perhaps in SmalltalkAgents, wouldn't be an
   interesting project. (Many will probably tell me that a collection of
   Perl scripts would be more "portable" and more useful to the current
   Unixcentric community....something I'd like to see more discussion
   of.)

I suspect the framework of choice would be some sort of MOO or MUD. Of
course, once it hit production status, then transliteration into Perl
install scripts would be appropriate.

   Exciting times.

You bet -- it sure is interesting to be alive in these "latter days".
As his ex-Prince-ness has said: "We're gonna party like it's 1999".

Of course, we'd better get strong crypto distributed before the Second
Coming -- you think the current US government is involved in a power
grab, you just wait!!! This new government will really know how to
take care of non-conformists -- Waco is nothing compared to what they
are planning (read: fiery brimstone)...

I wonder if Jesus can create a number so large he can't factor it?

   --Tim May

Pardon my excursion into various religious topics -- arguably this
list is also about religion ("religion is what you do" -- "cypherpunks
write code" -- belief that strong crypto should be widely distributed
is certainly a religious tenet for some on this list). I hope I
haven't offended anybody important...

Important UnSeminated Encouragement of this DisInformation Alteration
is Distributed.

--
<EMAIL_ADDRESS>(David Taffs)

{% endraw %}
```

## Thread

+ Return to [April 1994](/archive/1994/04)

+ Return to<EMAIL_ADDRESS>(David Taffs)](/authors/dat_at_ebt_com_david_taffs_)"
+ Return to<EMAIL_ADDRESS>(Paul Ferguson)](/authors/paul_at_hawksbill_sprintmrn_com_paul_ferguson_)"
+ Return to<EMAIL_ADDRESS>(Timothy C. May)](/authors/tcmay_at_netcom_com_timothy_c_may_)"

+ 1994-04-23 (Sat, 23 Apr 94 04:42:20 PDT) - [Cypherpunk Criminal](/archive/1994/04/899155e02be8f0da12b4d8df378f030c28313939199b67b22b4e856a82f928d9) -<EMAIL_ADDRESS>(Paul Ferguson)_
  + 1994-04-23 (Sat, 23 Apr 94 13:11:55 PDT) - [T-Shirts, Neil Young, Asilomar, and Smalltalk](/archive/1994/04/e8e92b58f0207ff03f681f57afa61972fd6fc39f145414f632b16e1e5850f4c9) -<EMAIL_ADDRESS>(Timothy C. May)_
    + 1994-04-23 (Sat, 23 Apr 94 14:32:21 PDT) - Re: T-Shirts, Neil Young, Asilomar, and Smalltalk -<EMAIL_ADDRESS>(David Taffs)_
      + 1994-04-23 (Sat, 23 Apr 94 15:46:54 PDT) - [Re: T-Shirts, Neil Young, Asilomar, and Smalltalk](/archive/1994/04/6f4a54fdf18c353c2e4ea255cb3f82a79a377c535c2405a6e78dbef5784e9f5e) -<EMAIL_ADDRESS>(Timothy C. May)_
        + 1994-04-24 (Sat, 23 Apr 94 17:26:42 PDT) - [Re: T-Shirts, Neil Young, Asilomar, and Smalltalk](/archive/1994/04/7a0d80e98aa6affe101228b4f638a887076f17a530fe40276fb88d084c5bb823) -<EMAIL_ADDRESS>(David Taffs)_
          + 1994-04-24 (Sat, 23 Apr 94 18:07:52 PDT) - [Re: T-Shirts, Neil Young, Asilomar, and Smalltalk](/archive/1994/04/6b468bbaa3a157143096a0b0c71cb04ef34dd8d06d807f512ada54f518d67a0a) -<EMAIL_ADDRESS>(Timothy C. May)_

gha_license_id: MIT


text:
# Change Log

All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](https://semver.org/).
This change log adheres to standards from [Keep a CHANGELOG](https://keepachangelog.com).

## [Unreleased]

## [2.25.4] - 2022-01-02

### Fixed
- `importType`: avoid crashing on a non-string' ([#2305], thanks [@ljharb])
- [`first`]: prevent crash when parsing angular templates ([#2210], thanks [@ljharb])
- `importType`: properly resolve `@/*`-aliased imports as internal ([#2334], thanks [@ombene])
- [`named`]/`ExportMap`: handle named imports from CJS modules that use dynamic import ([#2341], thanks [@ludofischer])

### Changed
- [`no-default-import`]: report on the token "default" instead of the entire node ([#2299], thanks [@pmcelhaney])
- [Docs] [`order`]: Remove duplicate mention of default ([#2280], thanks [@johnthagen])
- [Deps] update `eslint-module-utils`

## [2.25.3] - 2021-11-09

### Fixed
- [`extensions`]: ignore unresolveable type-only imports ([#2270], [#2271], thanks [@jablko])
- `importType`: fix `isExternalModule` calculation ([#2282], thanks [@mx-bernhard])
- [`no-import-module-exports`]: avoid false positives with a shadowed `module` or `exports` ([#2297], thanks [@ljharb])

### Changed
- [Docs] [`order`]: add type to the default groups ([#2272], thanks [@charpeni])
- [readme] Add note to TypeScript docs to install appropriate resolver ([#2279], thanks [@johnthagen])
- [Refactor] `importType`: combine redundant `isScoped` and `isScopedModule` (thanks [@ljharb])
- [Docs] HTTP => HTTPS ([#2287], thanks [@Schweinepriester])

## [2.25.2] - 2021-10-12

### Fixed
- [Deps] update `eslint-module-utils` for real this time ([#2255], thanks [@ljharb])

## [2.25.1] - 2021-10-11

### Fixed
- [Deps] update `eslint-module-utils`

## [2.25.0] - 2021-10-11

### Added
- Support `eslint` v8 ([#2191], thanks [@ota-meshi])
- [`no-unresolved`]: add `caseSensitiveStrict` option ([#1262], thanks [@sergei-startsev])
- [`no-unused-modules`]: add eslint v8 support ([#2194], thanks [@coderaiser])
- [`no-restricted-paths`]: add/restore glob pattern support ([#2219], thanks [@stropho])
- [`no-unused-modules`]: support dynamic imports ([#1660], [#2212], thanks [@maxkomarychev], [@aladdin-add], [@Hypnosphi])

### Fixed
- [`no-unresolved`]: ignore type-only imports ([#2220], thanks [@jablko])
- [`order`]: fix sorting imports inside TypeScript module declarations ([#2226], thanks [@remcohaszing])
- [`default`], `ExportMap`: Resolve extended TypeScript configuration files ([#2240], thanks [@mrmckeb])

### Changed
- [Refactor] switch to an internal replacement for `pkg-up` and `read-pkg-up` ([#2047], thanks [@mgwalker])
- [patch] TypeScript config: remove `.d.ts` from [`import/parsers` setting] and [`import/extensions` setting] ([#2220], thanks [@jablko])
- [Refactor] [`no-unresolved`], [`no-extraneous-dependencies`]: moduleVisitor usage ([#2233], thanks [@jablko])

## [2.24.2] - 2021-08-24

### Fixed
- [`named`], [`namespace`]: properly handle ExportAllDeclarations ([#2199], thanks [@ljharb])

## [2.24.1] - 2021-08-19

### Fixed
- `ExportMap`: Add default export when esModuleInterop is true and anything is exported ([#2184], thanks [@Maxim-Mazurok])
- [`named`], [`namespace`]: properly set reexports on `export * as … from` ([#1998], [#2161], thanks [@ljharb])
- [`no-duplicates`]: correctly handle case of mixed default/named type imports ([#2149], thanks [@GoodForOneFare], [@nwalters512])
- [`no-duplicates`]: avoid crash with empty `import type {}` ([#2201], thanks [@ljharb])

### Changed
- [Docs] `max-dependencies`: 📖 Document `ignoreTypeImports` option ([#2196], thanks [@himynameisdave])

## [2.24.0] - 2021-08-08

### Added
- [`no-dynamic-require`]: add option `esmodule` ([#1223], thanks [@vikr01])
- [`named`]: add `commonjs` option ([#1222], thanks [@vikr01])
- [`no-namespace`]: Add `ignore` option ([#2112], thanks [@aberezkin])
- [`max-dependencies`]: add option `ignoreTypeImports` ([#1847], thanks [@rfermann])

### Fixed
- [`no-duplicates`]: ensure autofix avoids excessive newlines ([#2028], thanks [@ertrzyiks])
- [`extensions`]: avoid crashing on partially typed import/export statements ([#2118], thanks [@ljharb])
- [`no-extraneous-dependencies`]: add ESM intermediate package.json support ([#2121], thanks [@paztis])
- Use `context.getPhysicalFilename()` when available (ESLint 7.28+) ([#2160], thanks [@pmcelhaney])
- [`extensions`]/`importType`: fix isScoped treating @/abc as scoped module ([#2146], thanks [@rperello])

### Changed
- [Docs] [`extensions`]: improved cases for using<EMAIL_ADDRESS>([#2140], thanks [@wenfangdu])
- [Docs] [`extensions`]: removed incorrect cases ([#2138], thanks [@wenfangdu])
- [Tests] [`order`]: add tests for `pathGroupsExcludedImportTypes: ['type']` ([#2158], thanks [@atav32])
- [Docs] [`order`]:  improve the documentation for the `pathGroupsExcludedImportTypes` option ([#2156], thanks [@liby])
- [Tests] [`no-cycle`]: Restructure test files ([#1517], thanks [@soryy708])
- [Docs] add description how to use plugin with yarn berry ([#2179], thanks [@KostyaZgara])

## [2.23.4] - 2021-05-29

### Fixed
- [`no-import-module-exports`]: Don't crash if packages have no entrypoint ([#2099], thanks [@eps1lon])
- [`no-extraneous-dependencies`]: fix package name algorithm ([#2097], thanks [@paztis])

## [2.23.3] - 2021-05-21

### Fixed
- [`no-restricted-paths`]: fix false positive matches ([#2090], thanks [@malykhinvi])
- [`no-cycle`]: ignore imports where imported file only imports types of importing file ([#2083], thanks [@cherryblossom000])
- [`no-cycle`]: fix false negative when file imports a type after importing a value in Flow ([#2083], thanks [@cherryblossom000])
- [`order`]: restore default behavior unless `type` is in groups ([#2087], thanks [@grit96])

### Changed
- [Docs] Add `no-relative-packages` to list of to the list of rules ([#2075], thanks [@arvigeus])

## [2.23.2] - 2021-05-15

### Changed
- [meta] add `safe-publish-latest`; use `prepublishOnly` script for npm 7+

## [2.23.1] - 2021-05-14

### Fixed
- [`newline-after-import`]: fix crash with `export {}` syntax ([#2063], [#2056], thanks [@ljharb])
- `ExportMap`: do not crash when tsconfig lacks `.compilerOptions` ([#2067], thanks [@ljharb])
- [`order`]: fix alphabetical sorting ([#2071], thanks [@grit96])

## [2.23.0] - 2021-05-13

### Added
- [`no-commonjs`]: Also detect require calls with expressionless template literals: ``` require(`x`) ``` ([#1958], thanks [@FloEdelmann])
- [`no-internal-modules`]: Add `forbid` option ([#1846], thanks [@guillaumewuip])
- add [`no-relative-packages`] ([#1860], [#966], thanks [@tapayne88] [@panrafal])
- add [`no-import-module-exports`] rule: report import declarations with CommonJS exports ([#804], thanks [@kentcdodds] and [@ttmarek])
- [`no-unused-modules`]: Support destructuring assignment for `export`. ([#1997], thanks [@s-h-a-d-o-w])
- [`order`]: support type imports ([#2021], thanks [@grit96])
- [`order`]: Add `warnOnUnassignedImports` option to enable warnings for out of order unassigned imports ([#1990], thanks [@hayes])

### Fixed
- [`export`]/TypeScript: properly detect export specifiers as children of a TS module block ([#1889], thanks [@andreubotella])
- [`order`]: ignore non-module-level requires ([#1940], thanks [@golopot])
- [`no-webpack-loader-syntax`]/TypeScript: avoid crash on missing name ([#1947], thanks [@leonardodino])
- [`no-extraneous-dependencies`]: Add package.json cache ([#1948], thanks [@fa93hws])
- [`prefer-default-export`]: handle empty array destructuring ([#1965], thanks [@ljharb])
- [`no-unused-modules`]: make type imports mark a module as used (fixes #1924) ([#1974], thanks [@cherryblossom000])
- [`no-cycle`]: fix perf regression ([#1944], thanks [@Blasz])
- [`first`]: fix handling of `import = require` ([#1963], thanks [@MatthiasKunnen])
- [`no-cycle`]/[`extensions`]: fix isExternalModule usage ([#1696], thanks [@paztis])
- [`extensions`]/[`no-cycle`]/[`no-extraneous-dependencies`]: Correct module real path resolution ([#1696], thanks [@paztis])
- [`no-named-default`]: ignore Flow import type and typeof ([#1983], thanks [@christianvuerings])
- [`no-extraneous-dependencies`]: Exclude flow `typeof` imports ([#1534], thanks [@devongovett])
- [`newline-after-import`]: respect decorator annotations ([#1985], thanks [@lilling])
- [`no-restricted-paths`]: enhance performance for zones with `except` paths ([#2022], thanks [@malykhinvi])
- [`no-unresolved`]: check import() ([#2026], thanks [@aladdin-add])

### Changed
- [Generic Import Callback] Make callback for all imports once in rules ([#1237], thanks [@ljqx])
- [Docs] [`no-named-as-default`]: add semicolon ([#1897], thanks [@bicstone])
- [Docs] `no-extraneous-dependencies`: correct peerDependencies option default to `true` ([#1993], thanks [@dwardu])
- [Docs] `order`: Document options required to match ordering example ([#1992], thanks [@silviogutierrez])
- [Tests] `no-unresolved`: add tests for `import()` ([#2012], thanks [@davidbonnet])
- [Docs] Add import/recommended ruleset to README ([#2034], thanks [@edemaine])

## [2.22.1] - 2020-09-27

### Fixed
- [`default`]/TypeScript: avoid crash on `export =` with a MemberExpression ([#1841], thanks [@ljharb])
- [`extensions`]/importType: Fix @/abc being treated as scoped module ([#1854], thanks [@3nuc])
- allow using rest operator in named export ([#1878], thanks [@foray1010])
- [`dynamic-import-chunkname`]: allow single quotes to match Webpack support ([#1848], thanks [@straub])

### Changed
- [`export`]: add tests for a name collision with `export * from` ([#1704], thanks @tomprats)

## [2.22.0] - 2020-06-26

### Added
- [`no-unused-modules`]: consider exported TypeScript interfaces, types and enums ([#1819], thanks [@nicolashenry])
- [`no-cycle`]: allow `maxDepth` option to be `"∞"` (thanks [@ljharb])

### Fixed
- [`order`]/TypeScript: properly support `import = object` expressions ([#1823], thanks [@manuth])
- [`no-extraneous-dependencies`]/TypeScript: do not error when importing type from dev dependencies ([#1820], thanks [@fernandopasik])
- [`default`]: avoid crash with `export =` ([#1822], thanks [@AndrewLeedham])
- [`order`]/[`newline-after-import`]: ignore TypeScript's "export import object" ([#1830], thanks [@be5invis])
- [`dynamic-import-chunkname`]/TypeScript: supports `@typescript-eslint/parser` ([#1833], thanks [@noelebrun])
- [`order`]/TypeScript: ignore ordering of object imports ([#1831], thanks [@manuth])
- [`namespace`]: do not report on shadowed import names ([#518], thanks [@ljharb])
- [`export`]: avoid warning on `export * as` non-conflicts ([#1834], thanks [@ljharb])

### Changed
- [`no-extraneous-dependencies`]: add tests for importing types ([#1824], thanks [@taye])
- [docs] [`no-default-export`]: Fix docs url ([#1836], thanks [@beatrizrezener])
- [docs] [`imports-first`]: deprecation info and link to `first` docs ([#1835], thanks [@beatrizrezener])

## [2.21.2] - 2020-06-09

### Fixed
- [`order`]: avoid a crash on TypeScript’s `export import` syntax ([#1808], thanks [@ljharb])
- [`newline-after-import`]: consider TypeScript `import =` syntax' ([#1811], thanks [@ljharb])
- [`no-internal-modules`]: avoid a crash on a named export declaration ([#1814], thanks [@ljharb])

## [2.21.1] - 2020-06-07

### Fixed
- TypeScript: [`import/named`]: avoid requiring `typescript` when not using TS ([#1805], thanks [@ljharb])

## [2.21.0] - 2020-06-07

### Added
- [`import/default`]: support default export in TSExportAssignment ([#1528], thanks [@joaovieira])
- [`no-cycle`]: add `ignoreExternal` option ([#1681], thanks [@sveyret])
- [`order`]: Add support for TypeScript's "import equals"-expressions ([#1785], thanks [@manuth])
- [`import/default`]: support default export in TSExportAssignment ([#1689], thanks [@Maxim-Mazurok])
- [`no-restricted-paths`]: add custom message support ([#1802], thanks [@malykhinvi])

### Fixed
- [`group-exports`]: Flow type export awareness ([#1702], thanks [@ernestostifano])
- [`order`]: Recognize pathGroup config for first group ([#1719], [#1724], thanks [@forivall], [@xpl])
- [`no-unused-modules`]: Fix re-export not counting as usage when used in combination with import ([#1722], thanks [@Ephem])
- [`no-duplicates`]: Handle TS import type ([#1676], thanks [@kmui2])
- [`newline-after-import`]: recognize decorators ([#1139], thanks [@atos1990])
- [`no-unused-modules`]: Revert "[flow] [`no-unused-modules`]: add flow type support" ([#1770], thanks [@Hypnosphi])
- TypeScript: Add nested namespace handling ([#1763], thanks [@julien1619])
- [`namespace`]/`ExportMap`: Fix interface declarations for TypeScript ([#1764], thanks [@julien1619])
- [`no-unused-modules`]: avoid order-dependence ([#1744], thanks [@darkartur])
- [`no-internal-modules`]: also check `export from` syntax ([#1691], thanks [@adjerbetian])
- TypeScript: [`export`]: avoid a crash with `export =` ([#1801], thanks [@ljharb])

### Changed
- [Refactor] `no-extraneous-dependencies`: use moduleVisitor ([#1735], thanks [@adamborowski])
- TypeScript config: Disable [`named`][] ([#1726], thanks [@astorije])
- [readme] Remove duplicate [`no-unused-modules`] from docs ([#1690], thanks [@arvigeus])
- [Docs] `order`: fix bad inline config ([#1788], thanks [@nickofthyme])
- [Tests] Add fix for Windows Subsystem for Linux ([#1786], thanks [@manuth])
- [Docs] `no-unused-rules`: Fix docs for unused exports ([#1776], thanks [@barbogast])
- [eslint] bump minimum v7 version to v7.2.0

## [2.20.2] - 2020-03-28

### Fixed
- [`order`]: fix `isExternalModule` detect on windows ([#1651], thanks [@fisker])
- [`order`]: recognize ".." as a "parent" path ([#1658], thanks [@golopot])
- [`no-duplicates`]: fix fixer on cases with default import ([#1666], thanks [@golopot])
- [`no-unused-modules`]: Handle `export { default } from` syntax ([#1631], thanks [@richardxia])
- [`first`]: Add a way to disable `absolute-first` explicitly ([#1664], thanks [@TheCrueltySage])
- [Docs] `no-webpack-loader-syntax`: Updates webpack URLs ([#1751], thanks [@MikeyBeLike])

## [2.20.1] - 2020-02-01

### Fixed
- [`export`]: Handle function overloading in `*.d.ts` ([#1619], thanks [@IvanGoncharov])
- [`no-absolute-path`]: fix a crash with invalid import syntax ([#1616], thanks [@ljharb])
- [`import/external-module-folders` setting] now correctly works with directories containing modules symlinked from `node_modules` ([#1605], thanks [@skozin])
- [`extensions`]: for invalid code where `name` does not exist, do not crash ([#1613], thanks [@ljharb])
- [`extensions`]: Fix scope regex ([#1611], thanks [@yordis])
- [`no-duplicates`]: allow duplicate imports if one is a namespace and the other not ([#1612], thanks [@sveyret])
- Add some missing rule meta schemas and types ([#1620], thanks [@bmish])
- [`named`]: for importing from a module which re-exports named exports from a `node_modules` module ([#1569], [#1447], thanks [@redbugz], [@kentcdodds])
- [`order`]: Fix alphabetize for mixed requires and imports ([#1626], thanks [@wschurman])

### Changed
- [`import/external-module-folders` setting] behavior is more strict now: it will only match complete path segments ([#1605], thanks [@skozin])
- [meta] fix "files" field to include/exclude the proper files ([#1635], thanks [@ljharb])
- [Tests] `order`: Add TS import type tests ([#1736], thanks [@kmui2])

## [2.20.0] - 2020-01-10

### Added
- [`order`]: added `caseInsensitive` as an additional option to `alphabetize` ([#1586], thanks [@dbrewer5])
- [`no-restricted-paths`]: New `except` option per `zone`, allowing exceptions to be defined for a restricted zone ([#1238], thanks [@rsolomon])
- [`order`]: add option pathGroupsExcludedImportTypes to allow ordering of external import types ([#1565], thanks [@Mairu])

### Fixed
- [`no-unused-modules`]: fix usage of [`import/extensions` setting] ([#1560], thanks [@stekycz])
- [`extensions`]: ignore non-main modules ([#1563], thanks [@saschanaz])
- TypeScript config: lookup for external modules in @types folder ([#1526], thanks [@joaovieira])
- [`no-extraneous-dependencies`]: ensure `node.source` is truthy ([#1589], thanks [@ljharb])
- [`extensions`]: Ignore query strings when checking for extensions ([#1572], thanks [@pcorpet])

### Docs
- [`extensions`]: improve `ignorePackages` docs ([#1248], thanks [@ivo-stefchev])

## [2.19.1] - 2019-12-08

### Fixed
- [`no-extraneous-dependencies`]: ensure `node.source` exists

## [2.19.0] - 2019-12-08

### Added
- [`internal-regex` setting]: regex pattern for marking packages "internal"  ([#1491], thanks [@Librazy])
- [`group-exports`]: make aggregate module exports valid ([#1472], thanks [@atikenny])
- [`no-namespace`]: Make rule fixable ([#1401], thanks [@TrevorBurnham])
- support `parseForESLint` from custom parser ([#1435], thanks [@JounQin])
- [`no-extraneous-dependencies`]: Implement support for [bundledDependencies](https://npm.github.io/using-pkgs-docs/package-json/types/bundleddependencies.html) ([#1436], thanks [@schmidsi]))
- [`no-unused-modules`]: add flow type support ([#1542], thanks [@rfermann])
- [`order`]: Adds support for pathGroups to allow ordering by defined patterns ([#795], [#1386], thanks [@Mairu])
- [`no-duplicates`]: Add `considerQueryString` option : allow duplicate imports with different query strings ([#1107], thanks [@pcorpet]).
- [`order`]: Add support for alphabetical sorting of import paths within import groups ([#1360], [#1105], [#629], thanks [@duncanbeevers], [@stropho], [@luczsoma], [@randallreedjr])
- [`no-commonjs`]: add `allowConditionalRequire` option ([#1439], thanks [@Pessimistress])

### Fixed
- [`default`]: make error message less confusing ([#1470], thanks [@golopot])
- Improve performance of `ExportMap.for` by only loading paths when necessary. ([#1519], thanks [@brendo])
- Support export of a merged TypeScript namespace declaration ([#1495], thanks [@benmunro])
- [`order`]: fix autofix to not move imports across fn calls ([#1253], thanks [@tihonove])
- [`prefer-default-export`]: fix false positive with type export ([#1506], thanks [@golopot])
- [`extensions`]: Fix `ignorePackages` to produce errors ([#1521], thanks [@saschanaz])
- [`no-unused-modules`]: fix crash due to `export *` ([#1496], thanks [@Taranys])
- [`no-cycle`]: should not warn for Flow imports ([#1494], thanks [@maxmalov])
- [`order`]: fix `@someModule` considered as `unknown` instead of `internal` ([#1493], thanks [@aamulumi])
- [`no-extraneous-dependencies`]: Check `export from` ([#1049], thanks [@marcusdarmstrong])

### Docs
- [`no-useless-path-segments`]: add docs for option `commonjs` ([#1507], thanks [@golopot])

### Changed
- [`no-unused-modules`]/`eslint-module-utils`: Avoid superfluous calls and code ([#1551], thanks [@brettz9])

## [2.18.2] - 2019-07-19

### Fixed
- Skip warning on type interfaces ([#1425], thanks [@lencioni])

## [2.18.1] - 2019-07-18

### Fixed
- Improve parse perf when using `@typescript-eslint/parser` ([#1409], thanks [@bradzacher])
- [`prefer-default-export`]: don't warn on TypeAlias & TSTypeAliasDeclaration ([#1377], thanks [@sharmilajesupaul])
- [`no-unused-modules`]: Exclude package "main"/"bin"/"browser" entry points ([#1404], thanks [@rfermann])
- [`export`]: false positive for TypeScript overloads ([#1412], thanks [@golopot])

### Refactors
- [`no-extraneous-dependencies`], `importType`: remove lodash ([#1419], thanks [@ljharb])

## [2.18.0] - 2019-06-24

### Added
- Support eslint v6 ([#1393], thanks [@sheepsteak])
- [`order`]: Adds support for correctly sorting unknown types into a single group ([#1375], thanks [@swernerx])
- [`order`]: add fixer for destructuring commonjs import ([#1372], thanks [@golopot])
- TypeScript config: add TS def extensions + defer to TS over JS ([#1366], thanks [@benmosher])

### Fixed
- [`no-unused-modules`]: handle ClassDeclaration ([#1371], thanks [@golopot])

### Docs
- [`no-cycle`]: split code examples so file separation is obvious ([#1370], thanks [@alex-page])
- [`no-named-as-default-member`]: update broken link ([#1389], thanks [@fooloomanzoo])

## [2.17.3] - 2019-05-23

### Fixed
- [`no-common-js`]: Also throw an error when assigning ([#1354], thanks [@charlessuh])
- [`no-unused-modules`]: don't crash when lint file outside src-folder ([#1347], thanks [@rfermann])
- [`no-unused-modules`]: make `import { name as otherName }` work ([#1340], [#1342], thanks [@rfermann])
- [`no-unused-modules`]: make appveyor tests passing ([#1333], thanks [@rfermann])
- [`named`]: ignore Flow `typeof` imports and `type` exports ([#1345], thanks [@loganfsmyth])
- [refactor] fix eslint 6 compat by fixing imports (thank [@ljharb])
- Improve support for TypeScript declare structures ([#1356], thanks [@christophercurrie])

### Docs
- add missing `no-unused-modules` in README ([#1358], thanks [@golopot])
- [`no-unused-modules`]: Indicates usage, plugin defaults to no-op, and add description to main README.md ([#1352], thanks [@johndevedu])
- Document `env` option for `eslint-import-resolver-webpack` ([#1363], thanks [@kgregory])

## [2.17.2] - 2019-04-16

### Fixed
- [`no-unused-modules`]: avoid crash when using `ignoreExports`-option ([#1331], [#1323], thanks [@rfermann])
- [`no-unused-modules`]: make sure that rule with no options will not fail ([#1330], [#1334], thanks [@kiwka])

## [2.17.1] - 2019-04-13

### Fixed
- require v2.4 of `eslint-module-utils` ([#1322])

## [2.17.0] - 2019-04-13

### Added
- [`no-useless-path-segments`]: Add `noUselessIndex` option ([#1290], thanks [@timkraut])
- [`no-duplicates`]: Add autofix ([#1312], thanks [@lydell])
- Add [`no-unused-modules`] rule ([#1142], thanks [@rfermann])
- support export type named exports from TypeScript ([#1304], thanks [@bradennapier] and [@schmod])

### Fixed
- [`order`]: Fix interpreting some external modules being interpreted as internal modules ([#793], [#794] thanks [@ephys])
- allow aliases that start with @ to be "internal" ([#1293], [#1294], thanks [@jeffshaver])
- aliased internal modules that look like core modules ([#1297], thanks [@echenley])
- [`namespace`]: add check for null ExportMap ([#1235], [#1144], thanks [@ljqx])
- [ExportMap] fix condition for checking if block comment ([#1234], [#1233], thanks [@ljqx])
- Fix overwriting of dynamic import() CallExpression ([`no-cycle`], [`no-relative-parent-imports`], [`no-unresolved`], [`no-useless-path-segments`]) ([#1218], [#1166], [#1035], thanks [@vikr01])
- [`export`]: false positives for TypeScript type + value export ([#1319], thanks [@bradzacher])
- [`export`]: Support TypeScript namespaces ([#1320], [#1300], thanks [@bradzacher])

### Docs
- Update readme for TypeScript ([#1256], [#1277], thanks [@kirill-konshin])
- make rule names consistent ([#1112], thanks [@feychenie])

### Tests
- fix broken tests on master ([#1295], thanks [@jeffshaver] and [@ljharb])
- [`no-commonjs`]: add tests that show corner cases ([#1308], thanks [@TakeScoop])

## [2.16.0] - 2019-01-29

### Added
- `typescript` config ([#1257], thanks [@kirill-konshin])

### Fixed
- Memory leak of `SourceCode` objects for all parsed dependencies, resolved. (issue [#1266], thanks [@asapach] and [@sergei-startsev] for digging in)

## [2.15.0] - 2019-01-22

### Added
- new rule: [`no-named-export`] ([#1157], thanks [@fsmaia])

### Fixed
- [`no-extraneous-dependencies`]: `packageDir` option with array value was clobbering package deps instead of merging them ([#1175]/[#1176], thanks [@aravindet] & [@pzhine])
- [`dynamic-import-chunkname`]: Add proper webpack comment parsing ([#1163], thanks [@st-sloth])
- [`named`]: fix destructuring assignment ([#1232], thanks [@ljqx])

## [2.14.0] - 2018-08-13

### Added
- [`no-useless-path-segments`]: add commonJS (CJS) support ([#1128], thanks [@1pete])
- [`namespace`]: add JSX check ([#1151], thanks [@jf248])

### Fixed
- [`no-cycle`]: ignore Flow imports ([#1126], thanks [@gajus])
- fix Flow type imports ([#1106], thanks [@syymza])
- [`no-relative-parent-imports`]: resolve paths ([#1135], thanks [@chrislloyd])
- [`order`]: fix autofixer when using typescript-eslint-parser ([#1137], thanks [@justinanastos])
- repeat fix from [#797] for [#717], in another place (thanks [@ljharb])

### Refactors
- add explicit support for RestElement alongside ExperimentalRestProperty (thanks [@ljharb])

## [2.13.0] - 2018-06-24

### Added
- Add ESLint 5 support ([#1122], thanks [@ai] and [@ljharb])
- Add [`no-relative-parent-imports`] rule: disallow relative imports from parent directories ([#1093], thanks [@chrislloyd])

### Fixed
- `namespace` rule: ensure it works in eslint 5/ecmaVersion 2018 (thanks [@ljharb])

## [2.12.0] - 2018-05-17

### Added
- Ignore type imports for [`named`] rule ([#931], thanks [@mattijsbliek])
- Add documentation for [`no-useless-path-segments`] rule ([#1068], thanks [@manovotny])
- `packageDir` option for [`no-extraneous-dependencies`] can be array-valued ([#1085], thanks [@hulkish])

## [2.11.0] - 2018-04-09

### Added
- Fixer for [`first`] ([#1046], thanks [@fengkfengk])
- `allow-require` option for [`no-commonjs`] rule ([#880], thanks [@futpib])

### Fixed
- memory/CPU regression where ASTs were held in memory ([#1058], thanks [@klimashkin]/[@lukeapage])

## [2.10.0] - 2018-03-29

### Added
- Autofixer for [`order`] rule ([#908], thanks [@tihonove])
- Add [`no-cycle`] rule: reports import cycles.

## [2.9.0] - 2018-02-21

### Added
- Add [`group-exports`] rule: style-guide rule to report use of multiple named exports ([#721], thanks [@robertrossmann])
- Add [`no-self-import`] rule: forbids a module from importing itself. ([#727], [#449], [#447], thanks [@giodamelio]).
- Add [`no-default-export`] rule ([#889], thanks [@isiahmeadows])
- Add [`no-useless-path-segments`] rule ([#912], thanks [@graingert] and [@danny-andrews])
- ... and more! check the commits for v[2.9.0]

## [2.8.0] - 2017-10-18
### Added
- [`exports-last`] rule ([#620] + [#632], thanks [@k15a])

### Changed
- Case-sensitivity checking ignores working directory and ancestors. ([#720] + [#858], thanks [@laysent])

### Fixed
- support scoped modules containing hyphens ([#744], thanks [@rosswarren])
- core-modules now resolves files inside declared modules ([#886] / [#891], thanks [@mplewis])
- TypeError for missing AST fields from TypeScript ([#842] / [#944], thanks [@alexgorbatchev])

## [2.7.0] - 2017-07-06

### Changed
- [`no-absolute-path`] picks up speed boost, optional AMD support ([#843], thanks [@jseminck])

## [2.6.1] - 2017-06-29

### Fixed
- update bundled node resolver dependency to latest version

## [2.6.0] - 2017-06-23

### Changed
- update tests / peerDeps for ESLint 4.0 compatibility ([#871], thanks [@mastilver])
- [`memo-parser`] updated to require `filePath` on parser options as it melts
  down if it's not there, now that this plugin always provides it. (see [#863])

## [2.5.0] - 2017-06-22

Re-releasing v[2.4.0] after discovering that the memory leak is isolated to the [`memo-parser`],
which is more or less experimental anyway.

### Added
- Autofixer for newline-after-import. ([#686] + [#696], thanks [@eelyafi])

## [2.4.0] - 2017-06-02 [YANKED]

Yanked due to critical issue in eslint-module-utils with cache key resulting from [#839].

### Added
- Add `filePath` into `parserOptions` passed to `parser` ([#839], thanks [@sompylasar])
- Add `allow` option to [`no-unassigned-import`] to allow for files that match the globs ([#671], [#737], thanks [@kevin940726]).

## [2.3.0] - 2017-05-18

### Added
- [`no-anonymous-default-export`] rule: report anonymous default exports ([#712], thanks [@duncanbeevers]).
- Add new value to [`order`]'s `newlines-between` option to allow newlines inside import groups ([#627], [#628], thanks [@giodamelio])
- Add `count` option to the [`newline-after-import`] rule to allow configuration of number of newlines expected ([#742], thanks [@ntdb])

### Changed
- [`no-extraneous-dependencies`]: use `read-pkg-up` to simplify finding + loading `package.json` ([#680], thanks [@wtgtybhertgeghgtwtg])
- Add support to specify the package.json [`no-extraneous-dependencies`] ([#685], thanks [@ramasilveyra])

### Fixed
- attempt to fix crash in [`no-mutable-exports`]. ([#660])
- "default is a reserved keyword" in no-maned-default tests by locking down babylon to 6.15.0 (#756, thanks @gmathieu)
- support scoped modules containing non word characters

## [2.2.0] - 2016-11-07

### Fixed
- Corrected a few gaffs in the auto-ignore logic to fix major performance issues
  with projects that did not explicitly ignore `node_modules`. ([#654])
- [`import/ignore` setting] was only being respected if the ignored module didn't start with
  an `import` or `export` JS statement
- [`prefer-default-export`]: fixed crash on export extensions ([#653])

## [2.1.0] - 2016-11-02

### Added
- Add [`no-named-default`] rule: style-guide rule to report use of unnecessarily named default imports ([#596], thanks [@ntdb])
- [`no-extraneous-dependencies`]: check globs against CWD + absolute path ([#602] + [#630], thanks [@ljharb])

### Fixed
- [`prefer-default-export`] handles flow `export type` ([#484] + [#639], thanks [@jakubsta])
- [`prefer-default-export`] handles re-exported default exports ([#609])
- Fix crash when using [`newline-after-import`] with decorators ([#592])
- Properly report [`newline-after-import`] when next line is a decorator
- Fixed documentation for the default values for the [`order`] rule ([#601])

## [2.0.1] - 2016-10-06

### Fixed
- Fixed code that relied on removed dependencies. ([#604])

## [2.0.0]! - 2016-09-30

### Added
- [`unambiguous`] rule: report modules that are not unambiguously ES modules.
- `recommended` shared config. Roughly `errors` and `warnings` mixed together,
  with some `parserOptions` in the mix. ([#402])
- `react` shared config: added `jsx: true` to `parserOptions.ecmaFeatures`.
- Added [`no-webpack-loader-syntax`] rule: forbid custom Webpack loader syntax in imports. ([#586], thanks [@fson]!)
- Add option `newlines-between: "ignore"` to [`order`] ([#519])
- Added [`no-unassigned-import`] rule ([#529])

### Breaking
- [`import/extensions` setting] defaults to `['.js']`. ([#306])
- [`import/ignore` setting] defaults to nothing, and ambiguous modules are ignored natively. This means importing from CommonJS modules will no longer be reported by [`default`], [`named`], or [`namespace`], regardless of `import/ignore`. ([#270])
- [`newline-after-import`]: Removed need for an empty line after an inline `require` call ([#570])
- [`order`]: Default value for `newlines-between` option is now `ignore` ([#519])

### Changed
- `imports-first` is renamed to [`first`]. `imports-first` alias will continue to
  exist, but may be removed in a future major release.
- Case-sensitivity: now specifically (and optionally) reported by [`no-unresolved`].
  Other rules will ignore case-mismatches on paths on case-insensitive filesystems. ([#311])

### Fixed
- [`no-internal-modules`]: support `@`-scoped packages ([#577]+[#578], thanks [@spalger])

## [1.16.0] - 2016-09-22

### Added
- Added [`no-dynamic-require`] rule: forbid `require()` calls with expressions. ([#567], [#568])
- Added [`no-internal-modules`] rule: restrict deep package imports to specific folders. ([#485], thanks [@spalger]!)
- [`extensions`]: allow override of a chosen default with options object ([#555], thanks [@ljharb]!)

### Fixed
- [`no-named-as-default`] no longer false-positives on `export default from '...'` ([#566], thanks [@preco21])
- [`default`]: allow re-export of values from ignored files as default ([#545], thanks [@skyrpex])

## [1.15.0] - 2016-09-12

### Added
- Added an `allow` option to [`no-nodejs-modules`] to allow exceptions ([#452], [#509]).
- Added [`no-absolute-path`] rule ([#530], [#538])
- [`max-dependencies`] for specifying the maximum number of dependencies (both `import` and `require`) a module can have. (see [#489], thanks [@tizmagik])
- Added glob option to config for [`no-extraneous-dependencies`], after much bikeshedding. Thanks, [@knpwrs]! ([#527])

### Fixed
- [`no-named-as-default-member`] Allow default import to have a property named "default" ([#507], [#508], thanks [@jquense] for both!)

## [1.14.0] - 2016-08-22

### Added
- [`import/parsers` setting]: parse some dependencies (i.e. TypeScript!) with a different parser than the ESLint-configured parser. ([#503])

### Fixed
- [`namespace`] exception for get property from `namespace` import, which are re-export from commonjs module ([#499] fixes [#416], thanks [@wKich])

## [1.13.0] - 2016-08-11

### Added
- `allowComputed` option for [`namespace`] rule. If set to `true`, won't report
  computed member references to namespaces. (see [#456])

### Changed
- Modified [`no-nodejs-modules`] error message to include the module's name ([#453], [#461])

### Fixed
- [`import/extensions` setting] is respected in spite of the appearance of imports
  in an imported file. (fixes [#478], thanks [@rhys-vdw])

## [1.12.0] - 2016-07-26

### Added
- [`import/external-module-folders` setting]: a possibility to configure folders for "external" modules ([#444], thanks [@zloirock])

## [1.11.1] - 2016-07-20

### Fixed
- [`newline-after-import`] exception for `switch` branches with `require`s iff parsed as `sourceType:'module'`.
  (still [#441], thanks again [@ljharb])

## [1.11.0] - 2016-07-17

### Added
- Added an `peerDependencies` option to [`no-extraneous-dependencies`] to allow/forbid peer dependencies ([#423], [#428], thanks [@jfmengels]!).

### Fixed
- [`newline-after-import`] exception for multiple `require`s in an arrow
  function expression (e.g. `() => require('a') || require('b')`). ([#441], thanks [@ljharb])

## [1.10.3] - 2016-07-08

### Fixed
- removing `Symbol` dependencies (i.e. `for-of` loops) due to Node 0.10 polyfill
  issue (see [#415]). Should not make any discernible semantic difference.

## [1.10.2] - 2016-07-04

### Fixed
- Something horrible happened during `npm prepublish` of 1.10.1.
  Several `rm -rf node_modules && npm i` and `gulp clean && npm prepublish`s later, it is rebuilt and republished as 1.10.2. Thanks [@rhettlivingston] for noticing and reporting!

## [1.10.1] - 2016-07-02 [YANKED]

### Added
- Officially support ESLint 3.x. (peerDependencies updated to `2.x - 3.x`)

## [1.10.0] - 2016-06-30

### Added
- Added new rule [`no-restricted-paths`]. ([#155]/[#371], thanks [@lo1tuma])
- [`import/core-modules` setting]: allow configuration of additional module names,
  to be treated as builtin modules (a la `path`, etc. in Node). ([#275] + [#365], thanks [@sindresorhus] for driving)
- React Native shared config (based on comment from [#283])

### Fixed
- Fixed crash with `newline-after-import` related to the use of switch cases. (fixes [#386], thanks [@ljharb] for reporting) ([#395])

## [1.9.2] - 2016-06-21

### Fixed
- Issues with ignored/CJS files in [`export`] and [`no-deprecated`] rules. ([#348], [#370])

## [1.9.1] - 2016-06-16

### Fixed
- Reordered precedence for loading resolvers. ([#373])

## [1.9.0] - 2016-06-10

### Added
- Added support TomDoc comments to [`no-deprecated`]. ([#321], thanks [@josh])
- Added support for loading custom resolvers ([#314], thanks [@le0nik])

### Fixed
- [`prefer-default-export`] handles `export function` and `export const` in same file ([#359], thanks [@scottnonnenberg])

## [1.8.1] - 2016-05-23

### Fixed
- `export * from 'foo'` now properly ignores a `default` export from `foo`, if any. ([#328]/[#332], thanks [@jkimbo])
  This impacts all static analysis of imported names. ([`default`], [`named`], [`namespace`], [`export`])
- Make [`order`]'s `newline-between` option handle multiline import statements ([#313], thanks [@singles])
- Make [`order`]'s `newline-between` option handle not assigned import statements ([#313], thanks [@singles])
- Make [`order`]'s `newline-between` option ignore `require` statements inside object literals ([#313], thanks [@singles])
- [`prefer-default-export`] properly handles deep destructuring, `export * from ...`, and files with no exports. ([#342]+[#343], thanks [@scottnonnenberg])

## [1.8.0] - 2016-05-11

### Added
- [`prefer-default-export`], new rule. ([#308], thanks [@gavriguy])

### Fixed
- Ignore namespace / ES7 re-exports in [`no-mutable-exports`]. ([#317], fixed by [#322]. thanks [@borisyankov] + [@jfmengels])
- Make [`no-extraneous-dependencies`] handle scoped packages ([#316], thanks [@jfmengels])

## [1.7.0] - 2016-05-06

### Added
- [`newline-after-import`], new rule. ([#245], thanks [@singles])
- Added an `optionalDependencies` option to [`no-extraneous-dependencies`] to allow/forbid optional dependencies ([#266], thanks [@jfmengels]).
- Added `newlines-between` option to [`order`] rule ([#298], thanks [@singles])
- add [`no-mutable-exports`] rule ([#290], thanks [@josh])
- [`import/extensions` setting]: a list of file extensions to parse as modules
  and search for `export`s. If unspecified, all extensions are considered valid (for now).
  In v2, this will likely default to `['.js', MODULE_EXT]`. ([#297], to fix [#267])

### Fixed
- [`extensions`]: fallback to source path for extension enforcement if imported
  module is not resolved. Also, never report for builtins (i.e. `path`). ([#296])

## [1.6.1] - 2016-04-28

### Fixed
- [`no-named-as-default-member`]: don't crash on rest props. ([#281], thanks [@SimenB])
- support for Node 6: don't pass `null` to `path` functions.
  Thanks to [@strawbrary] for bringing this up ([#272]) and adding OSX support to the Travis
  config ([#288]).

## [1.6.0] - 2016-04-25

### Added
- add [`no-named-as-default-member`] to `warnings` canned config
- add [`no-extraneous-dependencies`] rule ([#241], thanks [@jfmengels])
- add [`extensions`] rule ([#250], thanks [@lo1tuma])
- add [`no-nodejs-modules`] rule ([#261], thanks [@jfmengels])
- add [`order`] rule ([#247], thanks [@jfmengels])
- consider `resolve.fallback` config option in the webpack resolver ([#254])

### Changed
- [`imports-first`] now allows directives (i.e. `'use strict'`) strictly before
  any imports ([#256], thanks [@lemonmade])

### Fixed
- [`named`] now properly ignores the source module if a name is re-exported from
  an ignored file (i.e. `node_modules`). Also improved the reported error. (thanks to [@jimbolla] for reporting)
- [`no-named-as-default-member`] had a crash on destructuring in loops (thanks for heads up from [@lemonmade])

## [1.5.0] - 2016-04-18

### Added
- report resolver errors at the top of the linted file
- add [`no-namespace`] rule ([#239], thanks [@singles])
- add [`no-named-as-default-member`] rule ([#243], thanks [@dmnd])

### Changed
- Rearranged rule groups in README in preparation for more style guide rules

### Removed
- support for Node 0.10, via `es6-*` ponyfills. Using native Map/Set/Symbol.

## [1.4.0] - 2016-03-25

### Added
- Resolver plugin interface v2: more explicit response format that more clearly covers the found-but-core-module case, where there is no path.
  Still backwards-compatible with the original version of the resolver spec.
- [Resolver documentation](./resolvers/README.md)

### Changed
- using `package.json/files` instead of `.npmignore` for package file inclusion ([#228], thanks [@mathieudutour])
- using `es6-*` ponyfills instead of `babel-runtime`

## [1.3.0] - 2016-03-20

Major perf improvements. Between parsing only once and ignoring gigantic, non-module `node_modules`,
there is very little added time.

My test project takes 17s to lint completely, down from 55s, when using the
memoizing parser, and takes only 27s with naked `babel-eslint` (thus, reparsing local modules).

### Added
- This change log ([#216])
- Experimental memoizing [parser](./memo-parser/README.md)

### Fixed
- Huge reduction in execution time by _only_ ignoring [`import/ignore` setting] if
  something that looks like an `export` is detected in the module content.

## [1.2.0] - 2016-03-19

Thanks [@lencioni] for identifying a huge amount of rework in resolve and kicking
off a bunch of memoization.

I'm seeing 62% improvement over my normal test codebase when executing only
[`no-unresolved`] in isolation, and ~35% total reduction in lint time.

### Changed
- added caching to core/resolve via [#214], configured via [`import/cache` setting]

## [1.1.0] - 2016-03-15

### Added
- Added an [`ignore`](./docs/rules/no-unresolved.md#ignore) option to [`no-unresolved`] for those pesky files that no resolver can find. (still prefer enhancing the Webpack and Node resolvers to using it, though). See [#89] for details.

## [1.0.4] - 2016-03-11

### Changed
- respect hoisting for deep namespaces ([`namespace`]/[`no-deprecated`]) ([#211])

### Fixed
- don't crash on self references ([#210])
- correct cache behavior in `eslint_d` for deep namespaces ([#200])

## [1.0.3] - 2016-02-26

### Changed
- no-deprecated follows deep namespaces ([#191])

### Fixed
- [`namespace`] no longer flags modules with only a default export as having no names. (ns.default is valid ES6)

## [1.0.2] - 2016-02-26

### Fixed
- don't parse imports with no specifiers ([#192])

## [1.0.1] - 2016-02-25

### Fixed
- export `stage-0` shared config
- documented [`no-deprecated`]
- deep namespaces are traversed regardless of how they get imported ([#189])

## [1.0.0] - 2016-02-24

### Added
- [`no-deprecated`]: WIP rule to let you know at lint time if you're using deprecated functions, constants, classes, or modules.

### Changed
- [`namespace`]: support deep namespaces ([#119] via [#157])

## [1.0.0-beta.0] - 2016-02-13

### Changed
- support for (only) ESLint 2.x
- no longer needs/refers to `import/parser` or `import/parse-options`. Instead, ESLint provides the configured parser + options to the rules, and they use that to parse dependencies.

### Removed

- `babylon` as default import parser (see Breaking)

## [0.13.0] - 2016-02-08

### Added
- [`no-commonjs`] rule
- [`no-amd`] rule

### Removed
- Removed vestigial `no-require` rule. [`no-commonjs`] is more complete.

## [0.12.2] - 2016-02-06 [YANKED]

Unpublished from npm and re-released as 0.13.0. See [#170].

## [0.12.1] - 2015-12-17

### Changed
- Broke docs for rules out into individual files.

## [0.12.0] - 2015-12-14

### Changed
- Ignore [`import/ignore` setting] if exports are actually found in the parsed module. Does this to support use of `jsnext:main` in `node_modules` without the pain of managing an allow list or a nuanced deny list.

## [0.11.0] - 2015-11-27

### Added
- Resolver plugins. Now the linter can read Webpack config, properly follow aliases and ignore externals, dismisses inline loaders, etc. etc.!

repository: ChromeDevTools/devtools-frontend

branch_name: refs/heads/main

gha_language: TypeScript

repo_name: ChromeDevTools/devtools-frontend


text:
# simply::utility

A small C++ helper library.

## use

Add the [simply.utility](http://www.nuget.org/packages/simply.utility) NuGet package to your Visual C++
Native Unit Test project with the [Package Manager Dialog](http://docs.nuget.org/consume/Package-Manager-Dialog) or
the [Package Manager Console](http://docs.nuget.org/consume/package-manager-console).
``` PowerShell
Install-Package simply.utility
```

Include the library header and use its namespace.
``` C++
#include <simply/utility.h>
using namespace simply;
```

Use the library.
``` C++
static int value { 42 };
temporary<int> replacement { value, 7 };
```

## build

[![Build status](https://ci.appveyor.com/api/projects/status/github/olegsych/simply.utility?branch=master)](https://ci.appveyor.com/project/olegsych/simply-utility/branch/master)

From [Visual Studio 2017](https://www.visualstudio.com/downloads):
- Open `simply.utility.sln`
- Select _Build Solution_ from the _Build_ menu
- To switch build between `x86` and `x64` platforms, select _Configuration Manager_ from the _Build_ menu and change the _Active Solution Configuration_

From [Developer Command Prompt for VS2017](https://docs.microsoft.com/en-us/dotnet/framework/tools/developer-command-prompt-for-vs):
```
msbuild simply.utility.sln /p:Platform=x86
msbuild simply.utility.sln /p:Platform=x64
```

## test

From Visual Studio 2017:
- Select _Run_ / _All Tests_ from the _Test_ menu
- To switch test execution between `x86` and `x64` platform, select _Test Settings_ from the _Test_ menu and change the _Default Processor Architecture_.

From Developer Command Prompt for VS2017:
```
vstest.console bin\debug\Win32\test.dll /Platform:x86
vstest.console bin\debug\x64\test.dll /Platform:x64 /inIsolation
```


text:
# [getrector.org](https://getrector.org) Website

## Run via docker

```bash
docker-compose up
```

Voilá!

- Web: [localhost:8080](http://localhost:8080)
- Adminer: [localhost:8081](http://localhost:8081) (host: `mysql`, user: `root`, pass: `root`)
- Mailhog: [localhost:8025](http://localhost:8025)

MySQL is published to localhost on port 3307.

### Customization

- Use `.env.local` to customize environment variables.
- Use `docker-compose.override.yml` to customize Docker setup.

To change published MySQL port use:
```bash
GETRECTOR_ORG_MYSQL_PORT=33306 docker-compose up
```

### Running with Xdebug
If you want to use xdebug, here is example `docker-compose.override.yml` that will enable xdebug (do not forget to change ip address):
```
version: "3.7"
services:
    web:
        build:
            context: .
            target: xdebug
            dockerfile: Dockerfile
        environment:
            XDEBUG_CONFIG: "client_host=<IP_ADDRESS>"
            PHP_IDE_CONFIG: "serverName=getrector_org"

```

Then re-build your image so it contains xdebug extension:
```
docker-compose down
docker-compose up --build
```

### Troubleshooting

Sometimes, you might have outdated Docker images locally, to update, please run:

```bash
bin/pull-docker-images.sh
```


text:
Given a demographics table in the following format:

#### demographics table schema
id
name
birthday
race
you need to return a table that shows a count of each race represented, ordered by the count in descending order as:

#### output table schema
race
count
```sql
SELECT
   race
  ,COUNT(*) AS count
FROM demographics
GROUP BY race
ORDER BY count DESC
```

url: https://raw.githubusercontent.com/pzoladkiewicz/CodeWars/ff7705766d2bf41b8fd74f71a18f20f12b48cf22/sql/7 kyu/Easy SQL: Counting and Grouping.md

repository: pzoladkiewicz/CodeWars

filename: Easy SQL: Counting and Grouping.md

repo_name: pzoladkiewicz/CodeWars


text:
---
layout: post
title: "Operating System Fingerprinting and Active Fingerprinting using Nmap"
description: "The various techniques and methods in and around OS fingerprinting"
comments: true
keywords: "fingerprint, fingerprinting, os fingerprinting"
---

# What is OS fingerprinting?

OS fingerprinting is the process of differentiating the OS used by a host in a network.  There can be different implementations in determining this like obtaining the TCP/IP stack (TTL value defaults), HTTP packets (via User-Agent field), via ICMP requests, open port patterns, TCP window size and more.

There are two types of tools used - **active fingerprinters** and **passive fingerprinters**.

# Operating System (OS) fingerprinting using the Nmap active fingerprinter

Via conducting an ``nmap`` scan using the ``-O`` parameter, one can conduct OS fingerprinting through inspecting the packets received from the target.  More details about [nmap here](https://www.nmap.org).

Example command:

```
nmap -Pn -O IP_ADDRESS
```

The ``-Pn`` has been added since I know that the target is up but it may be blocking the ping probe.

An example output is below of conducting an OS fingerprint exercise:

```
$ nmap -Pn -O IP_ADDRESS_HERE

Starting Nmap 7.25BETA2 ( https://nmap.org ) at 2017-02-10 17:03 EST
Nmap scan report for MYSITE.COM (IP_ADDRESS_HERE)
Host is up (0.0020s latency).

All 1000 scanned ports on MYSITE.COM (IP_ADDRESS_HERE) are filtered

Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port

Device type: WAP|general purpose|specialized

Running: DETAILS_HERE
OS CPE: OS_CPE_DETAILS_HERE

OS details: OS_DETAILS_HERE

OS detection performed. Please report any incorrect results at https://nmap.org/submit/ .

Nmap done: 1 IP address (1 host up) scanned in 253.29 seconds

```

Also note that by default, nmap scans 1000 ports which is mentioned in the report above.

# Passive fingerprinters

See this article from [netresec](http://www.netresec.com/?page=Blog&month=2011-11&post=Passive-OS-Fingerprinting) on passive OS fingerprinting.

> Your mileage may vary.  This content is constantly under development and may change at any time.


text:
# Pierre's Sweets and Savories

#### C#, Database, and Identity Authentication practice for Epicodus, 08.14.2020

## By Jeff Kim

## Description

Pierre's Business is booming and he needs the same pizazz that we applied to his bakery to help sell his new sweet and savory treats! He wants to be able to have a list of treats, as well as a list of flavors and to be able to associate them so that he can have multiple flavors for each treat and vice-versa. He also wants his employees to be able to log in so that they can add, update, delete, and associate treats and flavors, while customers will only be able to view what is available for the day.

This project uses C#, MySQL, Entity Framework, Microsoft Identity, and MVC to create a web interface that will allow the greatest video rental franchise of all time to maintain a daily menu of treats, categorize them by flavor, and allow authorized users to employ full CRUD functionality. The interface will achieve this by utilizing a MySQL database along with Identity authorization.

## Specifications

| Behavior | Input | Output |  Completed(Y/N?)  |
| -------- | ----- | ------ | -------- |
| Create an object called Treat with an auto-implementing property for its Name |  |  | Y |
| Create an object called Flavor with an auto-implementing property for its Name | | | Y |
| Allow authorized users to create a new Treat object through a user interface |  |  | Y |
| Allow authorized users to create a new Flavor object through a user interface |  |  | Y |
| Create a database with tables for Treat and Flavor objects using Entity Framework and code first development and database migrations | | | Y |
| Maintain a many-to-many relationship between Treat and Flavor objects via a joing table | | | Y |
| Allow authorized users to create a new join relationship between an Treat and a Flavor from each object's details page | | | Y |
| Allow unauthenticated users to view a list of Treats and Flavors, as well as their details page | | | Y |
| Restrict unauthenticated users from Creating, Editing, Deleting, or Associating Treat or Flavor objects | | | Y |

## Setup/Installation Requirements

**Requirements:**
* [.NET Core SDK 2.2](https://dotnet.microsoft.com/download/thank-you/dotnet-sdk-2.2.203-windows-x64-installer)
* [MySQL Server 8.0.19](https://dev.mysql.com/downloads/file/?id=484919)
* [MySQL Workbench 8.0.19](https://dev.mysql.com/downloads/file/?id=484919)
* Entity Framework

**To use this program:**

1. Open your preferred browser.
2. Navigate to https://github.com/jkbutserious/PierreSweets.Solution.git.
3. Click the **Code** button and click **Download ZIP** to clone the repository to your computer.
4. Open the Windows PowerShell console, VS Code Bash terminal, or the MacOS Terminal and use the ``cd [YOUR DOWNLOAD FILEPATH]/PierreSweets.Solution/Blockbuster`` command to navigate to the Blockbuster subdirectory.
5. Use the ``dotnet restore`` command to install the necessary packages on your computer.
6. Use the ``dotnet run`` command to run the program.
7. Use the web interface to add engineers and machines and keep track of Dr. Sneuss's Blockbuster.
8. Ensure that the following code is present in your *appsettings.json* file:

    ```
    {
      "ConnectionStrings": {
          "DefaultConnection": "Server=localhost;Port=3306;database=jeff_kim;uid=root;pwd=epicodus;"
      }
    }
    ```

9. If you have any issues running this program, please reach out to the developer or troubleshoot at your own risk.

To recreate the database using MySQL and Entity Framework Core:

_**Note**: These instructions assume that you have installed and set up your MySQL Server according to Epicodus's guidelines, as well as Entity Framework Core. For more information, see [Installing and Configuring MySQL](https://www.learnhowtoprogram.com/c-and-net/getting-started-with-c/installing-and-configuring-mysql) and [Configuration for Entity Framework Core](https://www.learnhowtoprogram.com/c-and-net/database-basics-c2449db9-5bd8-4303-af8d-7ed7259f79a7/configuration-for-entity-framework-core)._

1. Open Windows PowerShell, the MacOS Terminal, or your VS Code terminal and use the command ``cd [YOUR DOWNLOAD FILEPATH]/PierreSweets.Solution``.
2. Ensure that the Migrations folder is included in your cloned repository.
3. Use the ``dotnet ef database update`` command to apply the latest database migration.
4. Use MySQL Workbench or your preferred terminal to verify the database schema.

**To contribute to this project:**

1. Open your preferred browser.
2. Navigate to https://github.com/jkbutserious/PierreSweets.Solution.
3. Log into or sign up for your GitHub account.
4. Click the **Fork** button to copy the repository and all source code.
5. From your forked repository, you can download or clone the repository, by clicking the **Code** button.
  * To clone the repository in Visual Studio Code's terminal, use the command

    ```git clone https://github.com/[YOUR-USER-NAME-HERE]/PierreSweets.Solution```
  * To clone the repository in GitHub Desktop, click the **Open in Desktop** option
  * To download the repository, click the **Download ZIP** option, save the archive to your computer, and extract it to the folder of your choice
6. Use your preferred code editor to edit the appropriate model and view files. New classes should be added in the Models subdirectory and should use the ``Blockbuster.Models`` namespace. **Note**: the Blockbuster.csproj file is a C# project file and should not be edited.
7. Use the ``dotnet ef migrations add [YOUR MIGRATION NAME HERE]`` to add a new database migration.

    You can also export your database schema from MySQL Workbench by using the **Data Export** option on the **Administration** tab of your database, select the schema you want to export, select the **Dump Structure and Data** option from the dropdown menu, and click the **Start Export** button. Make sure to name the file _jeff_kim.sql_ and add the file to your repository in the top-level directory.
8.
9. Push your changes to your forked repository.

#### Additional Setup/Installation Notes:

* No additional code is necessary to view this project.

## Known Bugs

_No known issues. Please contact me if you have any problems._

## Support and contact details

To report any issues with this page or to contribute to this project, contact Jeff Kim at<EMAIL_ADDRESS>
## Technologies Used

* C#
* .NET Core 2.2
* MySQL Server 8.0.19
* MySQL Workbench 8.0.19
* Entity Framework
* ASP.NET Core Identity
* MVC
* Visual Studio Code
* Git and Git BASH

### License

Copyright © 2020 Jeffrey Kim

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.


text:
# Programming Languages I @ ECE NTUA
### Γλώσσες Προγραμματισμού Ι @ HMMY ΕΜΠ

This repository contains our solutions for the exercises of the course of Programming Languages I of the National Technical University of Athens.
Programming languages used:
- C/C++
- Java
- Python 3
- Standard ML
- Prolog

Exercises details:
1) [Exercise 1](./ex1/exerc20-1.pdf)
2) [Exercise 2](./ex2/exerc20-2.pdf)
3) [Exercise 3](./ex3/exerc20-3.pdf)


text:
# Ebay/Web word finder

This is an academic project, for my automata theory class.

- The application takes a text file entry and finds the number of matches for the words "ebay" and "web" given the following state diagram:

## Snapshots
|  |  |
| ------- | --- |

## Usage
Just download the latest release from [here](https://github.com/ivansteezy/AFND-UI/releases/tag/Version1.0), unzip the folder and run de ```AFND.exe``` application.

## Demo
There is a video demo on my youtube channel lol
- https://youtu.be/wL4Em8Jvbh8

repository: ivansteezy/AFND-UI

repo_name: ivansteezy/AFND-UI


text:
# Client-side Sample for Downloading Reports

This is a demonstration on how to download a PDF or Excel report from the OpenApi and give it a file name.

More on portfolio reports: <https://www.developer.saxo/openapi/learn/portfolio-report>

Interactive demo: <https://saxobank.github.io/openapi-samples-js/portfolio/download-reports/>

repository: SaxoBank/openapi-samples-js

gha_language: JavaScript

repo_name: SaxoBank/openapi-samples-js


text:
---
title: 'Day 1: The Difference Between WordPress.org and WordPress.com'
author: LP
layout: post
permalink: /day-1-the-difference-between-wordpress-org-and-wordpress-com/
wiziapp_processed:
  - 1
dsq_thread_id:
  - 527261906
---

  Resource: http://en.support.wordpress.com/com-vs-org — The official WordPress site offers a good explanation.

  I remember the first time I started playing around with a free blog hosted on wordpress.com. It was great, I couldn’t believe I had a live site within minutes, and playing with different themes became kind of addictive. The trouble was, I didn’t know CSS, and I also wasn’t given the power to customize the site any more than change the placements of a couple of widgets unless I wanted to change the theme. I also noticed talk about different “plugins” that I definitely could’ve found useful, but I couldn’t install any beyond the ones that WordPress.com had approved.

  Here’s the deal. If you just want to blog, my advice would be to go for the free hosting on tumblr, wordpress, or blogspot. (And if you’re so inclined, you could even attach a domain name to your blog.) But if you want to go beyond blogging and learn web design and development, then you should install the open-sourced wordpress package. In the open-sourced version you’ll actually be able to access your theme files and see the code that makes everything click. This means you’ll have to pay for a 3rd party hosting provider, but at the average price of 1-2 coffees per month and for the benefit of the learning experience, the cost is well worth it.

  You should check with your hosting provider to figure out how to install WordPress. Some services, like Bluehost, let you install it with one click (it really is that easy). WordPress is a very popular CMS (content management system), so the question should be old beans for any hosting provider you’re researching.


text:
# elixir-alphabetize
Alphabetizes `alias`, `require`, `use`, and `import` statements at the top of an elixir file

Packages -> elixir-alphabetize -> Beautify

## Example
```
defmodule MyApp.MyController do
  import MyThing
  use MyOtherThing
  alias MyApp.User
  alias MyApp.Organization
  @moduledoc """
  """
```

becomes

```
defmodule MyApp.MyController do
  alias MyApp.Organization
  alias MyApp.User
  import MyThing
  use MyOtherThing
  @moduledoc """
  """
```


text:
BestBuy Assignment
==================

### requirements
No frameworks, full-on build process, all-round testing

Viewing
=======

Preferred way of running the app is by using a simple `http-server`. Since JSON being requested from other domain, to avoid 'Access-Control-Allow-Origin' errors JSONP proxy might be used (configured by editing BestBuyFramework.DataService.proxy to `1`) or disable browser's security by

open -a /Applications/Google\ Chrome.app --args --disable-web-security

Optimization
============

- All thumbnail images should be made of the same size on the server to avoid unnesessary processing on the client side. If that's not possible a component should be developed to represent a product thumbnail which will calculate width and height of an image to preserve image proportions (now it is hardcoded in the CSS to be stretched/reduced to 150x150 pixels).
- extra-long product titles should be truncated and/or saved in the extra data field
- A default thumbnail image to be provided - if there's an error fetching an actual thumbnail, this default one should be displayed instead.
- have multiple configs for easy switching between JSON stubs versus backend service calls.
- minify and compress javascript files, have multiple .HTML versions for compressed/development versions of the app; have a `gulp` script to automate this.
- precompile Handlebars templates.
- for all invalid requests (non-existing category request, non-existing product etc.) prepare corresponding error messages/default views etc.
- For development and easy versioning each controller/module/template/etc. should be placed in their own file; Grunt/Gulp script should be present to perform stitching/assembly of different functions/parts independently.

Testing
=======

functional tests may be seen in the browser by navigating to /test/index.html. Console runner doesn't work because of the version mismatch between Jasmine html reporter and a current test runner.

I was unable to provide reliable e2e tests since I have quite weird setup of my dev machine - Selenium doesn't work, CasperJS/PhantomJS version mismatch etc. A simple awareness test is present and may be run by ./casper.sh; It will be able to produce positive results if BestBuyFramework.DataService.proxy is set to '1' (i.e. JSONP proxy is in use) and that is quite unreliable - they have limits. In real life JSON stubs should be used along with local server.


text:
# MTGA Card Detector

Python utility to find the location of playable cards in MTGA. Provides a script with the function `mtga_get_card_positions` which returns a list of screen-relative `(x, y)` tuples that are a clickable region of a playable card.

Currently about 80% of the way there, still struggles on some corner cases like yellow/white highlights of the leftmost card in a full hand.

## Usage
- Install `OpenCV` and `pyautogui` into your environment
    - e.g. `pip install opencv-python pyautogui`
- Run `python test_script.py`
- Copy/import `mtga_get_card_positions` into whatever you want to use it with

## Assumptions
- Tested @ 1440p
    - Likely needs minor tweaks to `border_` and `card_region` variables to work at 1080p
- MTGA in full-screen open on your main screen with no visibility blocking overlays
- No alt-style cards (need to have a black border)
- Cards in default state:
    - Playable cards highlighted in blue
    - Not hovering over any cards
    - No animations etc over the cards

## Process
- Aim to run fast (currently <0.1s locally) therefore vectorised as much as possible
    - Lets `numpy`/`OpenCV` do the majority of the heavy lifting
- Use MTGA's blue/yellow "playable" border to find the rough region
    - Left-most card has a darkened effect
    - Use region to strip out everything else
- Use black border to find individual cards
    - Will always be delineated by blue borders
    - Parameterise black border to catch most cases
    - Pull border coordinates to get a clickable position

## Talon Use-Case
This was specifically designed to pipe coordinates to the excellent [Talon](https://talonvoice.com/) in order to facilitate voice-control of the game.

Original region, roughly clipped by screen percent:
![screenshot](img/mtga_screenshot.png)

Processed region with border highlighted:
![screenshot](img/mtga_screenshot_processed.png)

Talon overlay:
![screenshot](img/mtga_screenshot_talon.png)


text:
## param completion

Generates shell completion scripts

### Synopsis

Output shell completion code for the specified shell (bash or zsh).
The shell code must be evaluated to provide interactive completion of param commands.
This can be done by sourcing it from ~/.bashrc

Examples:
    # Installing bash completion
    printf "
    # param shell completion
    source <(param completion bash)
    " >> $HOME/.bashrc
    source $HOME/.bashrc

```
param completion (bash|zsh) [flags]
```

### Options

```
  -h, --help   help for completion
```

### Options inherited from parent commands

```
      --config string         config file (default is $HOME/.param.yaml)
      --endpoint-url string   Prefixes to filter by
```

### SEE ALSO

* [param](param.md)	 - Tools to improve Parameter Store on the command line.

###### Auto generated by spf13/cobra on 7-Nov-2018

repository: ocasta/param

repo_name: ocasta/param


text:
# Query Logger Example

This short guide will demonstrate how to setup ecAudit as a pure Query Logger in combination with the [Chronicle Logger](chronicle_logger.md) backend.
In this example all CQL queries will be logged without any filtering, and users will be able to connect without any credentials.
With a setup like this it is possible to log all CQL queries in a cluster for troubleshooting purposes and similar.

## cassandra.yaml

Change the following setting in your ```cassandra.yaml```.

```
role_manager: com.ericsson.bss.cassandra.ecaudit.auth.AuditRoleManager
```

Leave the ```authenticator``` and ```authorizer``` settings at their default.

```
authenticator: AllowAllAuthenticator
authorizer: AllowAllAuthorizer
```

## cassandra-env.sh

Add the following JVM option to the ```cassandra-env.sh``` or the ```cassandra.in.sh```.

**Note:** If you configure these settings in your ```cassandra-env.sh```,
consider that the ```JVM_EXTRA_OPTS``` variable is consumed at the end of the file,
so make sure to add the following lines *before* they are consumed.

```
JVM_EXTRA_OPTS="$JVM_EXTRA_OPTS -Dcassandra.custom_query_handler_class=com.ericsson.bss.cassandra.ecaudit.handler.AuditQueryHandler"
JVM_EXTRA_OPTS="$JVM_EXTRA_OPTS -Decaudit.filter_type=NONE"
JVM_EXTRA_OPTS="$JVM_EXTRA_OPTS -da:net.openhft..."
```

## audit.yaml

Setup the ```audit.yaml``` as follows to roll a new Chronicle log file every minute,
and store only fields which are relevant in this example.
Also, use ```post_logging``` to make sure there is one audit record per CQL request.

```
log_timing_strategy: post_logging

logger_backend:
    - class_name: com.ericsson.bss.cassandra.ecaudit.logger.ChronicleAuditLogger
      parameters:
      - log_dir: /var/lib/cassandra/audit
        roll_cycle: MINUTELY
        fields: TIMESTAMP, OPERATION, BATCH_ID, STATUS
```

## eclog

The query logs contain binary data since they are written with the Chronicle logger backend.

The ```eclog``` tool will print the content in a human readable format.
With a configuration file it is possible to get a custom format of each record.
Create a ```eclog.yaml``` file with the following content in the same place as the chronicle log files under ```/var/lib/casssandra/audit/```.

```
log_format: "${TIMESTAMP}|{?${BATCH_ID}?}|${STATUS}|${OPERATION}"
time_format: "yyyy-MM-dd HH:mm:ss z"
```

Here's an example on how that could look.

```
# java -jar eclog.jar -t 6 /var/lib/cassandra/audit/
2020-04-01 12:42:02 CEST||ATTEMPT|INSERT INTO country.by_code (code, name, iso) VALUES ( 46, 'Sweden', 'SE');
2020-04-01 12:42:10 CEST||ATTEMPT|INSERT INTO country.by_code (code, name, iso) VALUES ( 47, 'Norway', 'NO');
2020-04-01 12:42:18 CEST||ATTEMPT|INSERT INTO country.by_code (code, name, iso) VALUES ( 48, 'Poland', 'PL');
2020-04-01 12:42:24 CEST||ATTEMPT|INSERT INTO country.by_code (code, name, iso) VALUES ( 49, 'Germany', 'DE');
2020-04-01 12:42:32 CEST||ATTEMPT|INSERT INTO country.by_code (code, name, iso) VALUES ( 51, 'Peru', 'PE');
2020-04-01 12:43:10 CEST||ATTEMPT|SELECT iso FROM country.by_code WHERE code = 46;
```

repository: Ericsson/ecaudit

gha_language: Java

repo_name: Ericsson/ecaudit


text:
# Time Zipper
A Time Management app for high school or college students based on flutter

* App UI Example
![](https://github.com/OswaldHe/Time-Zipper/blob/master/Screenshot/IMG_3211.PNG)
![](https://github.com/OswaldHe/Time-Zipper/blob/master/Screenshot/IMG_3212.PNG)
![](https://github.com/OswaldHe/Time-Zipper/blob/master/Screenshot/IMG_3213.PNG)
![](https://github.com/OswaldHe/Time-Zipper/blob/master/Screenshot/IMG_3214.PNG)
![](https://github.com/OswaldHe/Time-Zipper/blob/master/Screenshot/IMG_3215.PNG)

repository: haikukoten/Time-Zipper

repo_name: haikukoten/Time-Zipper


text:
---
title: MoveTables
description: Move tables between keyspaces without downtime
weight: 10
---

{{< info >}}
Starting with Vitess 11.0 you should use the [VReplication v2 commands](../../movetables)
{{< /info >}}

### Command

```
MoveTables -v1 [-cells=<cells>] [-tablet_types=<source_tablet_types>] -workflow=<workflow>
            [-all] [-exclude=<tables>]  [-auto_start] [-stop_after_copy]
            <source_keyspace> <target_keyspace> <table_specs>
```

### Description

MoveTables is used to start a workflow to move one or more tables from an external database or an existing Vitess keyspace into a new Vitess keyspace.
The target keyspace can be unsharded or sharded.

MoveTables is used typically for migrating data into Vitess or to implement vertical sharding. You might use the former when you
first start using Vitess and the latter if you want to distribute your load across servers.

### Parameters

#### -cells
**optional**\
**default** local cell

A comma-separated list of cell names or cell aliases. This list is used by VReplication to determine which
cells should be used to pick a tablet for selecting data from the source keyspace.

###### Uses

* Improve performance by using picking a tablet in cells in network proximity with the target
* To reduce bandwidth costs by skipping cells that are in different availability zones
* Select cells where replica lags are lower

#### -tablet_types
**optional**\
**default** replica

A comma-separated list of tablet types that are used while picking a tablet for sourcing data.
One or more from PRIMARY, REPLICA, RDONLY.

###### Uses

* To reduce the load on PRIMARY tablets by using REPLICAs or RDONLYs
* Reducing lags by pointing to PRIMARY

#### workflow
**mandatory**

Unique name for the MoveTables-initiated workflow, used in later commands to refer back to this workflow

#### source_keyspace
**mandatory**

Name of existing keyspace that contains the tables to be moved

#### target_keyspace
**mandatory**

Name of existing keyspace to which the tables will be moved

#### table_specs
**optional**  one of `table_specs` or `-all` needs to be specified

_Either_

* a comma-separated list of tables
  * if target keyspace is unsharded OR
  * if target keyspace is sharded AND the tables being moved are already defined in the target's vschema

  Example: `MoveTables -workflow=commerce2customer commerce customer customer,corder`

_Or_

* the JSON table section of the vschema for associated tables
  * if target keyspace is sharded AND
  * tables being moved are not yet present in the target's vschema

  Example: `MoveTables -workflow=commerce2customer commerce customer '{"t1":{"column_vindexes": [{"column": "id", "name": "hash"}]}}}'`

#### -all

**optional** cannot specify `table_specs` if `-all` is specified

Move all tables from the source keyspace.

#### -exclude

**optional** only applies if `-all` is specified

If moving all tables, specifies tables to be skipped.

#### -auto_start

**optional**
**default** true

Normally the workflow starts immediately after it is created. If this flag is set
to false then the workflow is in a Stopped state until you explicitly start it.

###### Uses
* allows updating the rows in `_vt.vreplication` after MoveTables has setup the
streams. For example, you can add some filters to specific tables or change the
projection clause to modify the values on the target. This
provides an easier way to create simpler Materialize workflows by first using
MoveTables with auto_start false, updating the BinlogSource as required by your
Materialize and then start the workflow.
* changing the `copy_state` and/or `pos` values to restart a broken MoveTables workflow
from a specific point of time.

#### -stop_after_copy

**optional**
**default** false

If set, the workflow will stop once the Copy phase has been completed i.e. once
all tables have been copied and VReplication decides that the lag
is small enough to start replicating, the workflow state will be set to Stopped.

###### Uses
* If you just want a consistent snapshot of all the tables you can set this flag. The workflow
will stop once the copy is done and you can then mark the workflow as `Complete`d

### A MoveTables Workflow

Once you select the set of tables to move from one keyspace to another you need to initiate a VReplication workflow as follows:

1. Initiate the migration using MoveTables
2. Monitor the workflow using [Workflow](../../workflow)
3. Confirm that data has been copied over correctly using [VDiff](../../vdiff)
4. Start the cutover by routing all reads from your application to those tables using [SwitchReads](../switchreads)
5. Complete the cutover by routing all writes using [SwitchWrites](../switchwrites)
6. Optionally clean up the source tables using [DropSources](../dropsources)

### Common use cases for MoveTables

#### Adopting Vitess

For those wanting to try out Vitess for the first time, MoveTables provides an easy way to route part of their workload
to Vitess with the ability to migrate back at any time without any risk. You point a vttablet to your existing MySQL installation,
spin up an unsharded Vitess cluster and use a MoveTables workflow to start serving some tables from Vitess. You can also go
further and use a Reshard workflow to experiment with a sharded version of a part of your database.

See [user guide](../../../../user-guides/configuration-advanced/unmanaged-tablet/#move-legacytable-to-the-commerce-keyspace) for detailed steps

#### Vertical Sharding

For existing Vitess users you can easily move one or more tables to another keyspace, either for balancing load or
as preparation for sharding your tables.

See [user guide](../../../../user-guides/migration/move-tables/) which describes how MoveTables works in the local example provided
in the Vitess repo.

#### More Reading

* [MoveTables in practice](../../../../concepts/move-tables/)

repository: vitessio/website

branch_name: refs/heads/prod

repo_name: vitessio/website


text:
# Entoloma eulividum Noordel., 1985 SPECIES

#### Status
SYNONYM

#### According to
The Catalogue of Life, 3rd January 2011

#### Published in
Persoonia 12(4): 457 (1985)

#### Original name
Entoloma eulividum Noordel., 1985

### Remarks
null

repository: mdoering/backbone

path: /life/Fungi/Basidiomycota/Agaricomycetes/Agaricales/Entolomataceae/Entoloma/Entoloma sinuatum/ Syn. Entoloma eulividum/README.md

repo_name: mdoering/backbone


text:
# python-aosd

python-aosd is a Python binding for [libaosd]: an on screen display (OSD) library, which uses Cairo to create high quality rendered graphics to be overlaid on top of the screen.

[![build](https://github.com/arminha/python-aosd/workflows/build/badge.svg)](https://github.com/arminha/python-aosd/actions?query=workflow%3Abuild)

## Requirements

* Python >= 2.7
* [libaosd]
* [pycairo]
* [pangocairo]

## Build requirements

* [Pyrex] or [Cython]
* headers for [pycairo], [libaosd] and [pangocairo]

## Building

python-aosd uses [distutils]. Building it is as simple as running

```sh
python setup.py build
```

in the root directory.

Running

```sh
python setup.py install
```

will install python-aosd.

## Changelog

### Version 0.2.5

* Move to GitHub

### Version 0.2.4

* Replace command module in setup.py with subprocess

### Version 0.2.3

* Bug Fix: correct value of aosd.PANGO_ALIGN_CENTER

### Version 0.2.2

* move to git
* Bug Fix: fix indentation in aosd.pyx

[libaosd]: https://github.com/atheme-legacy/libaosd
[pyrex]: http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex
[cython]: http://cython.org
[pycairo]: http://cairographics.org/pycairo
[distutils]: http://docs.python.org/library/distutils.html
[pangocairo]: http://www.pango.org/

repository: arminha/python-aosd

gha_language: Python

repo_name: arminha/python-aosd